Identifikasi Nilai Uang Logam Menggunakan Metode Otsu Thresholding


Berikut ini merupakan contoh aplikasi pengolahan citra untuk melakukan identifikasi nilai uang logam menggunakan metode otsu thresholding. Uang logam yang diidentifikasi nilainya adalah uang logam Rp. 100, Rp. 200, Rp. 500, dan Rp. 1000. Langkah-langkah pengolahan citra yang dilakukan antara lain adalah sebagai berikut:

1. Membaca citra rgb asli

clc; clear; close all; warning off all;

% membaca citra rgb
Img = imread('koin 01.jpg');
figure, imshow(Img);

2. Mengkonversi ruang warna citra rgb menjadi grayscale

% mengkonversi citra rgb menjadi grayscale
Img_gray = rgb2gray(Img);
figure, imshow(Img_gray);

3. Melakukan segmentasi citra menggunakan metode otsu thresholding

% mengkonversi citra grayscale menjadi biner
bw = im2bw(Img_gray,graythresh(Img_gray));
% melakukan komplemen citra agar objek bernilai satu dan background bernilai nol
bw = imcomplement(bw);
figure, imshow(bw);

4. Melakukan operasi morfologi untuk menyempurnakan hasil segmentasi

% operasi morfologi untuk menyempurnakan hasil segmentasi
% area opening untuk menghilangkan noise
bw = bwareaopen(bw,100);
% filling holes untuk mengisi objek yang berlubang
bw = imfill(bw,'holes');
% closing untuk membuat bentuk objek lebih smooth
str = strel('disk',5);
bw = imclose(bw,str);
% menghilangkan objek yang menempel pada border (tepian citra)
bw = imclearborder(bw);

5. Melakukan identifikasi pada setiap uang logam berdasarkan batasan ciri warna (dalam ruang warna YCbCr) dan ciri ukuran (luasan objek) yang ditentukan

% pelabelan terhadap masing2 objek
[B,L] = bwlabel(bw);
% menghitung luas dan centroid objek
stats = regionprops(B,'All');
% mengkonversi citra rgb menjadi YCbCr
YCbCr = rgb2ycbcr(Img);
% mengekstrak komponen Cb (Chrominance-blue)
Cb = YCbCr(:,:,2);

% menampilkan citra rgb
figure, imshow(Img);
hold on
% membuat boundary pada koin yang terdeteksi
Boundaries = bwboundaries(bw,'noholes');

% untuk n = 1 s.d n = jumlah objek
for n = 1:L
    boundary = Boundaries{n};
    % menghitung nilai Cb dari masing2 objek
    bw_label = (B==n);
    Cb_label = immultiply(Cb,bw_label);
    Cb_label = (sum(sum(Cb_label)))/(sum(sum(bw_label)));
    % menghitung luas dan centroid masing2 objek
    Area = stats(n).Area;
    centroid = stats(n).Centroid;
    % jika nilai Cb > 120 maka dikenali sebagai koin silver
    if Cb_label>120
        % jika luas < 70000 maka dikenali sebagai koin 100
        if Area<70000
            nilai = 100;
            % jika luas < 80000 maka dikenali sebagai koin 200
        elseif Area<80000 nilai = 200; % jika luas > 80000 maka dikenali sebagai koin 500
        else
            nilai = 500;
        end
        % menampilkan boundary pada objek
        plot(boundary(:,2), boundary(:,1), 'y', 'LineWidth', 4)
        % menampilkan nilai koin pada centroid objek
        text(centroid(1)-50,centroid(2),num2str(nilai),...
            'Color','y','FontSize',20,'FontWeight','bold');
        % jika nilai Cb < 120 maka dikenali sebagai koin kuning
    else
        % jika luas < 70000 maka dikenali sebagai koin 500
        if Area<70000 nilai = 500; % jika luas > 70000 maka dikenali sebagai koin 1000
        else
            nilai = 1000;
        end
        % menampilkan boundary pada objek
        plot(boundary(:,2), boundary(:,1), 'c', 'LineWidth', 4)
        % menampilkan nilai koin pada centroid objek
        text(centroid(1)-50,centroid(2),num2str(nilai),...
            'Color','c','FontSize',20,'FontWeight','bold');
    end
end

6. Pembuatan Graphical User Interface (GUI)

function varargout = identifikasi_uang_logam(varargin)
% IDENTIFIKASI_UANG_LOGAM MATLAB code for identifikasi_uang_logam.fig
%      IDENTIFIKASI_UANG_LOGAM, by itself, creates a new IDENTIFIKASI_UANG_LOGAM or raises the existing
%      singleton*.
%
%      H = IDENTIFIKASI_UANG_LOGAM returns the handle to a new IDENTIFIKASI_UANG_LOGAM or the handle to
%      the existing singleton*.
%
%      IDENTIFIKASI_UANG_LOGAM('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in IDENTIFIKASI_UANG_LOGAM.M with the given input arguments.
%
%      IDENTIFIKASI_UANG_LOGAM('Property','Value',...) creates a new IDENTIFIKASI_UANG_LOGAM or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before identifikasi_uang_logam_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to identifikasi_uang_logam_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help identifikasi_uang_logam

% Last Modified by GUIDE v2.5 27-Jul-2019 17:25:54

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @identifikasi_uang_logam_OpeningFcn, ...
    'gui_OutputFcn',  @identifikasi_uang_logam_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before identifikasi_uang_logam is made visible.
function identifikasi_uang_logam_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to identifikasi_uang_logam (see VARARGIN)

% Choose default command line output for identifikasi_uang_logam
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
movegui(hObject,'center');

% UIWAIT makes identifikasi_uang_logam wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = identifikasi_uang_logam_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% menampilkan menu browse file
[filename, pathname] = uigetfile('*.jpg');

% jika ada file yang dipilih maka akan menjalankan perintah di bawahnya
if ~isequal(filename,0)
    % mereset button2
    set(handles.pushbutton2,'Enable','on')
    set(handles.uitable1,'Data',[])
    axes(handles.axes1)
    cla reset
    set(gca,'XTick',[])
    set(gca,'YTick',[])
    axes(handles.axes2)
    cla reset
    set(gca,'XTick',[])
    set(gca,'YTick',[])
    % membaca citra rgb
    Img = imread(fullfile(pathname,filename));
    % menampilkan citra pada axes
    axes(handles.axes1)
    imshow(Img)
    title('Citra Uang Logam','FontName','Comic Sans MS')
    % menyimpan variabel Img pada lokasi handles
    % (lokasi penyimpanan variabel) agar dapat
    % dipanggil oleh pushbutton yang lain
    handles.Img = Img;
    guidata(hObject, handles)
else
    % jika tidak ada file yang dipilih maka akan kembali
    return
end

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% memanggil variabel Img yang ada di lokasi handles
Img = handles.Img;
% mengkonversi citra rgb menjadi grayscale
Img_gray = rgb2gray(Img);
% mengkonversi citra grayscale menjadi biner
bw = im2bw(Img_gray,graythresh(Img_gray));
% melakukan komplemen citra agar objek bernilai satu
% dan background bernilai nol
bw = imcomplement(bw);
% operasi morfologi untuk menyempurnakan hasil segmentasi
% 1. area opening untuk menghilangkan noise
bw = bwareaopen(bw,100);
% 2. filling holes untuk mengisi objek yang berlubang
bw = imfill(bw,'holes');
% 3. closing untuk membuat bentuk objek lebih smooth
str = strel('disk',5);
bw = imclose(bw,str);
% 4. menghilangkan objek yang menempel pada border (tepian citra)
bw = imclearborder(bw);
% pelabelan terhadap masing2 objek
[B,L] = bwlabel(bw);
% menghitung luas dan centroid objek
stats = regionprops(B,'All');
% mengkonversi citra rgb menjadi YCbCr
YCbCr = rgb2ycbcr(Img);
% mengekstrak komponen Cb (Chrominance-blue)
Cb = YCbCr(:,:,2);

% menampilkan citra rgb hasil identifikasi pada axes
axes(handles.axes2)
imshow(Img);
title('Hasil Identifikasi','FontName','Comic Sans MS')
hold on

% membaca value dari masing2 checkbox
val1 = get(handles.checkbox1,'Value');
val2 = get(handles.checkbox2,'Value');
val3 = get(handles.checkbox3,'Value');
val4 = get(handles.checkbox4,'Value');
val5 = get(handles.checkbox5,'Value');

% jika deteksi dilakukan pada semua uang logam
if val1==1
    % menginisialisasi variabel data_koin
    data_koin = zeros(L,1);
    % membuat boundary pada koin yang terdeteksi
    Boundaries = bwboundaries(bw,'noholes');
    % untuk n = 1 s.d n = jumlah objek
    for n = 1:L
        boundary = Boundaries{n};
        % menghitung nilai Cb dari masing2 objek
        bw_label = (B==n);
        Cb_label = immultiply(Cb,bw_label);
        Cb_label = (sum(sum(Cb_label)))/(sum(sum(bw_label)));
        % menghitung luas dan centroid masing2 objek
        Area = stats(n).Area;
        centroid = stats(n).Centroid;
        % jika nilai Cb > 120 maka dikenali sebagai koin silver
        if Cb_label>120
            % jika luas < 70000 maka dikenali sebagai koin Rp. 100
            if Area<70000
                nilai = 100;
                % jika luas < 80000 maka dikenali sebagai koin Rp. 200
            elseif Area<80000 nilai = 200; % jika luas > 80000 maka dikenali sebagai koin Rp. 500
            else
                nilai = 500;
            end
            % menampilkan boundary pada objek
            plot(boundary(:,2), boundary(:,1), 'y', 'LineWidth', 4)
            % menampilkan nilai koin pada centroid objek
            text(centroid(1)-100,centroid(2),num2str(nilai),...
                'Color','y','FontSize',20,'FontWeight','bold');
            % jika nilai Cb < 120 maka dikenali sebagai koin kuning
        else
            % jika luas < 70000 maka dikenali sebagai koin Rp. 500
            if Area<70000 nilai = 500; % jika luas > 70000 maka dikenali sebagai koin Rp. 1000
            else
                nilai = 1000;
            end
            % menampilkan boundary pada objek
            plot(boundary(:,2), boundary(:,1), 'c', 'LineWidth', 4)
            % menampilkan nilai koin pada centroid objek
            text(centroid(1)-100,centroid(2),num2str(nilai),...
                'Color','c','FontSize',20,'FontWeight','bold');
        end
        % mengisi variabel data_koin dengan nilai koin
        data_koin(n) = nilai;
    end
    
    % menghitung banyaknya masing2 koin berdasarkan nilainya
    [~,n_100] = find(data_koin==100);
    nilai_100 = numel(n_100);
    
    [~,n_200] = find(data_koin==200);
    nilai_200 = numel(n_200);
    
    [~,n_500] = find(data_koin==500);
    nilai_500 = numel(n_500);
    
    [~,n_1000] = find(data_koin==1000);
    nilai_1000 = numel(n_1000);
    
    % menghitung nilai total koin
    nilai_total = nilai_100+nilai_200+nilai_500+nilai_1000;
    
    % menghitung jumlah nilai koin
    jumlah_100 = nilai_100*100;
    jumlah_200 = nilai_200*200;
    jumlah_500 = nilai_500*500;
    jumlah_1000 = nilai_1000*1000;
    jumlah_total = jumlah_100+jumlah_200+jumlah_500+jumlah_1000;
    
    % menginisialisasi variabel cell_koin
    cell_koin = cell(5,3);
    
    % mengisi variabel cell_koin dengan data2 koin
    cell_koin{1,1} = 'Rp. 100';
    cell_koin{2,1} = 'Rp. 200';
    cell_koin{3,1} = 'Rp. 500';
    cell_koin{4,1} = 'Rp. 1000';
    cell_koin{5,1} = 'Total';
    cell_koin{1,2} = num2str(nilai_100);
    cell_koin{2,2} = num2str(nilai_200);
    cell_koin{3,2} = num2str(nilai_500);
    cell_koin{4,2} = num2str(nilai_1000);
    cell_koin{5,2} = num2str(nilai_total);
    cell_koin{1,3} = ['Rp. ',num2str(jumlah_100)];
    cell_koin{2,3} = ['Rp. ',num2str(jumlah_200)];
    cell_koin{3,3} = ['Rp. ',num2str(jumlah_500)];
    cell_koin{4,3} = ['Rp. ',num2str(jumlah_1000)];
    cell_koin{5,3} = ['Rp. ',num2str(jumlah_total)];
    % menampilkan cell_koin pada tabel
    set(handles.uitable1,'Data',cell_koin,...
        'RowName',1:4)
    
    % jika deteksi dilakukan hanya pada uang logam Rp. 100
elseif val2==1
    % menginisialisasi variabel data_koin
    data_koin = 0;
    % membuat boundary pada koin yang terdeteksi
    Boundaries = bwboundaries(bw,'noholes');
    
    % untuk n = 1 s.d n = jumlah objek
    for n = 1:L
        % menghitung nilai Cb dari masing2 objek
        bw_label = (B==n);
        Cb_label = immultiply(Cb,bw_label);
        Cb_label = (sum(sum(Cb_label)))/(sum(sum(bw_label)));
        % menghitung luas dan centroid masing2 objek
        Area = stats(n).Area;
        centroid = stats(n).Centroid;
        % jika nilai Cb > 120 maka dikenali sebagai koin silver
        if Cb_label>120
            % jika luas < 70000 maka dikenali sebagai koin Rp. 100
            if Area<70000 % menampilkan boundary pada objek boundary = Boundaries{n}; plot(boundary(:,2), boundary(:,1), 'y', 'LineWidth', 4) nilai = 100; % menampilkan nilai koin pada centroid objek text(centroid(1)-100,centroid(2),num2str(nilai),... 'Color','y','FontSize',20,'FontWeight','bold'); % mengisi variabel data_koin dengan nilai koin data_koin = [data_koin;nilai]; end end end % menghitung banyaknya koin Rp. 100 [~,n_100] = find(data_koin==100); nilai_100 = numel(n_100); % menghitung jumlah nilai koin Rp. 100 jumlah_100 = nilai_100*100; % menginisialisasi variabel cell_koin cell_koin = cell(1,3); % mengisi variabel cell_koin dengan data2 koin cell_koin{1,1} = 'Rp. 100'; cell_koin{1,2} = num2str(nilai_100); cell_koin{1,3} = ['Rp. ',num2str(jumlah_100)]; % menampilkan cell_koin pada tabel set(handles.uitable1,'Data',cell_koin,... 'RowName',1) % jika deteksi dilakukan hanya pada uang logam Rp. 200 elseif val3==1 % menginisialisasi variabel data_koin data_koin = 0; % membuat boundary pada koin yang terdeteksi Boundaries = bwboundaries(bw,'noholes'); % untuk n = 1 s.d n = jumlah objek for n = 1:L boundary = Boundaries{n}; % menghitung nilai Cb dari masing2 objek bw_label = (B==n); Cb_label = immultiply(Cb,bw_label); Cb_label = (sum(sum(Cb_label)))/(sum(sum(bw_label))); % menghitung luas dan centroid masing2 objek Area = stats(n).Area; centroid = stats(n).Centroid; % jika nilai Cb > 120 maka dikenali sebagai koin silver
        if Cb_label>120
            % jika luas > 70000 & luas < 80000 maka dikenali sebagai koin Rp. 200 if Area>70000 && Area <80000 nilai = 200; % menampilkan boundary pada objek plot(boundary(:,2), boundary(:,1), 'y', 'LineWidth', 4) % menampilkan nilai koin pada centroid objek text(centroid(1)-100,centroid(2),num2str(nilai),... 'Color','y','FontSize',20,'FontWeight','bold'); % mengisi variabel data_koin dengan nilai koin data_koin = [data_koin;nilai]; end end end % menghitung banyaknya koin Rp. 200 [~,n_200] = find(data_koin==200); nilai_200 = numel(n_200); % menghitung jumlah nilai koin jumlah_200 = nilai_200*200; % menginisialisasi variabel cell_koin cell_koin = cell(1,3); % mengisi variabel cell_koin dengan data2 koin cell_koin{1,1} = 'Rp. 200'; cell_koin{1,2} = num2str(nilai_200); cell_koin{1,3} = ['Rp. ',num2str(jumlah_200)]; % menampilkan cell_koin pada tabel set(handles.uitable1,'Data',cell_koin,... 'RowName',1) % jika deteksi dilakukan hanya pada uang logam Rp. 500 elseif val4==1 % menginisialisasi variabel data_koin data_koin = 0; % membuat boundary pada koin yang terdeteksi Boundaries = bwboundaries(bw,'noholes'); % untuk n = 1 s.d n = jumlah objek for n = 1:L boundary = Boundaries{n}; % menghitung nilai Cb dari masing2 objek bw_label = (B==n); Cb_label = immultiply(Cb,bw_label); Cb_label = (sum(sum(Cb_label)))/(sum(sum(bw_label))); % menghitung luas dan centroid masing2 objek Area = stats(n).Area; centroid = stats(n).Centroid; % jika nilai Cb > 120 maka dikenali sebagai koin silver
        if Cb_label>120
            % jika luas > 80000 maka dikenali sebagai koin Rp. 500
            if Area>80000
                nilai = 500;
                % menampilkan boundary pada objek
                plot(boundary(:,2), boundary(:,1), 'y', 'LineWidth', 4)
                % menampilkan nilai koin pada centroid objek
                text(centroid(1)-100,centroid(2),num2str(nilai),...
                    'Color','y','FontSize',20,'FontWeight','bold');
                % mengisi variabel data_koin dengan nilai koin
                data_koin = [data_koin;nilai];
            end
            % jika nilai Cb < 120 maka dikenali sebagai koin kuning
        else
            % jika luas < 70000 maka dikenali sebagai koin Rp. 500
            if Area<70000
                nilai = 500;
                % menampilkan boundary pada objek
                plot(boundary(:,2), boundary(:,1), 'c', 'LineWidth', 4)
                % menampilkan nilai koin pada centroid objek
                text(centroid(1)-100,centroid(2),num2str(nilai),...
                    'Color','c','FontSize',20,'FontWeight','bold');
                % mengisi variabel data_koin dengan nilai koin
                data_koin = [data_koin;nilai];
            end
        end
    end
    
    % menghitung banyaknya koin Rp. 500
    [~,n_500] = find(data_koin==500);
    nilai_500 = numel(n_500);
    
    % menghitung jumlah nilai koin
    jumlah_500 = nilai_500*500;
    
    % menginisialisasi variabel cell_koin
    cell_koin = cell(1,3);
    
    % mengisi variabel cell_koin dengan data2 koin
    cell_koin{1,1} = 'Rp. 500';
    cell_koin{1,2} = num2str(nilai_500);
    cell_koin{1,3} = ['Rp. ',num2str(jumlah_500)];
    % menampilkan cell_koin pada tabel
    set(handles.uitable1,'Data',cell_koin,...
        'RowName',1)
    
    % jika deteksi dilakukan hanya pada uang logam Rp. 1000
elseif val5==1
    % menginisialisasi variabel data_koin
    data_koin = 0;
    % membuat boundary pada koin yang terdeteksi
    Boundaries = bwboundaries(bw,'noholes');
    
    % untuk n = 1 s.d n = jumlah objek
    for n = 1:L
        boundary = Boundaries{n};
        % menghitung nilai Cb dari masing2 objek
        bw_label = (B==n);
        Cb_label = immultiply(Cb,bw_label);
        Cb_label = (sum(sum(Cb_label)))/(sum(sum(bw_label)));
        % menghitung luas dan centroid masing2 objek
        Area = stats(n).Area;
        centroid = stats(n).Centroid;
        % jika nilai Cb < 120 maka dikenali sebagai koin kuning
        if Cb_label<120 % jika luas > 70000 maka dikenali sebagai koin Rp. 1000
            if Area>70000
                nilai = 1000;
                % membuat boundary pada objek
                plot(boundary(:,2), boundary(:,1), 'c', 'LineWidth', 4)
                % menampilkan nilai koin pada centroid objek
                text(centroid(1)-100,centroid(2),num2str(nilai),...
                    'Color','c','FontSize',20,'FontWeight','bold');
                % mengisi variabel data_koin dengan nilai koin
                data_koin = [data_koin;nilai];
            end
        end
    end
    
    % menghitung banyaknya koin Rp. 1000
    [~,n_1000] = find(data_koin==1000);
    nilai_1000 = numel(n_1000);
    
    % menghitung jumlah nilai koin
    jumlah_1000 = nilai_1000*1000;
    
    % menginisialisasi variabel cell_koin
    cell_koin = cell(1,3);
    
    % mengisi variabel cell_koin dengan data2 koin
    cell_koin{1,1} = 'Rp. 1000';
    cell_koin{1,2} = num2str(nilai_1000);
    cell_koin{1,3} = ['Rp. ',num2str(jumlah_1000)];
    % menampilkan cell_koin pada tabel
    set(handles.uitable1,'Data',cell_koin,...
        'RowName',1)
end

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% mereset button2
set(handles.pushbutton2,'Enable','off')
set(handles.uitable1,'Data',[])
set(handles.checkbox1,'Value',1)
set(handles.checkbox2,'Value',0)
set(handles.checkbox3,'Value',0)
set(handles.checkbox4,'Value',0)
set(handles.checkbox5,'Value',0)
axes(handles.axes1)
cla reset
set(gca,'XTick',[])
set(gca,'YTick',[])
axes(handles.axes2)
cla reset
set(gca,'XTick',[])
set(gca,'YTick',[])


% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% menutup halaman identifikasi_uang_logam
close all;


% --- Executes on button press in checkbox1.
function checkbox1_Callback(hObject, eventdata, handles)
% hObject    handle to checkbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox1
set(handles.checkbox1,'Value',1)
set(handles.checkbox2,'Value',0)
set(handles.checkbox3,'Value',0)
set(handles.checkbox4,'Value',0)
set(handles.checkbox5,'Value',0)


% --- Executes on button press in checkbox2.
function checkbox2_Callback(hObject, eventdata, handles)
% hObject    handle to checkbox2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox2
set(handles.checkbox1,'Value',0)
set(handles.checkbox2,'Value',1)
set(handles.checkbox3,'Value',0)
set(handles.checkbox4,'Value',0)
set(handles.checkbox5,'Value',0)

% --- Executes on button press in checkbox3.
function checkbox3_Callback(hObject, eventdata, handles)
% hObject    handle to checkbox3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox3
set(handles.checkbox1,'Value',0)
set(handles.checkbox2,'Value',0)
set(handles.checkbox3,'Value',1)
set(handles.checkbox4,'Value',0)
set(handles.checkbox5,'Value',0)

% --- Executes on button press in checkbox4.
function checkbox4_Callback(hObject, eventdata, handles)
% hObject    handle to checkbox4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox4
set(handles.checkbox1,'Value',0)
set(handles.checkbox2,'Value',0)
set(handles.checkbox3,'Value',0)
set(handles.checkbox4,'Value',1)
set(handles.checkbox5,'Value',0)

% --- Executes on button press in checkbox5.
function checkbox5_Callback(hObject, eventdata, handles)
% hObject    handle to checkbox5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox5
set(handles.checkbox1,'Value',0)
set(handles.checkbox2,'Value',0)
set(handles.checkbox3,'Value',0)
set(handles.checkbox4,'Value',0)
set(handles.checkbox5,'Value',1)

Tampilan GUI untuk mendeteksi uang logam Rp. 100

Tampilan GUI untuk mendeteksi uang logam Rp. 200

Tampilan GUI untuk mendeteksi uang logam Rp. 500

Tampilan GUI untuk mendeteksi uang logam Rp. 1000

Tampilan GUI untuk mendeteksi semua uang logam

File lengkap source code dan citra pada pemrograman matlab di atas dapat diperoleh melalui halaman berikut ini:
Source Code

Posted on July 27, 2019, in Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , . Bookmark the permalink. 7 Comments.

  1. mas jika kita pakai gambar yang ber beda cara mengetahui area setiap koinnya gimana caranya mas? makasih

  2. Mas kalau saya pake gambar meteran listrik ini bisa juga gak? Atau ada saran lain menggunakan apa untuk membaca angkanya? Terimakasih sebelumnya mas

  3. Hannah Lutfiah Ramadona

    izin mas, apakah ada file koin 01 jpg nya? karena saya download image in new tab gitu malah hasil pendeteksiannya jadi berbeda

  4. Mas mau nanya, pada variabel area tersebut untuk logika if else nya didapat dari mana ya angkanya mas, terimakasih

Leave a comment