RGB
RGB
Untuk membuat GUI kalibrasi komputer vision pendeteksi objek berwarna digunakan
algoritma pengolahan citra digial, algoritma ini akan menghasilkan kordinat objek
berdasarkan pusat warnanya. Kordinat objek ini kemudian digunakan untuk membuat
logika posisi objek sebagaimana digambarkan pada Gambar 24.1. Berikut adalah tahapan
pembuatan GUI untuk kalibrasi pendeteksian objek berdasarkan warna menggunakan fasilitas
GUIDE MATLAB:
1. Bukalah program MATLAB. Setelah itu, ketiklah ‘guide’ pada Command Windows dan
pilihlah Create a New GUI seperti berikut.
Gambar 24.4 Jendela GUIDE Quick Start untuk membuat file baru GUI MATLAB
4. Lakukan penyesuaian pada property inspector dengan double click pada item yang ingin
di atur propertinya.
Gambar 24.7 Pengaturan string dan tag pada property Inspector
6. Kemudian save file, misalkan diberi nama: GUIvision, maka akan terdapat dua file yang
tersimpan yaitu GUIvision.m dan GUIvision.fig. Setelah itu isikan program utama pada
function GUIvision_OpeningFcn, function pop_Callback, function set_Callback
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Outputs from this function are returned to the command line.
function varargout = GUIvision_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;
a=text(bc(1)+15,bc(2),strcat('X:',num2str(round(bc(1))),'Y:',num2str(round(
bc(2)))));
set(a,'FontName','Arial','FontWeight','bold','FontSize',12,'Color','red');
set(handles.bc1,'String',num2str(bc(1)));
set(handles.bc2,'String',num2str(bc(2)));
myform=guidata(gcbo);
if bc(1)>=0 && bc(1)<=106.7 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','belok kanan curam');
elseif bc(1)>=0 && bc(1)<=106.7 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','belok kanan sedang');
elseif bc(1)>=0 && bc(1)<=106.7 && bc(2)>=160 && bc(2)<=240
set(myform.arah,'String','belok kanan sedikit');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','maju ke depan dekat');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','maju ke depan sedang');
elseif bc(1)>=106.7 && bc(1)<=213.4&&bc(2)>=160 && bc(2)<=240
set(myform.arah,'String','maju ke depan jauh');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','belok kiri curam');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','belok kiri sedang');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=160 &&bc(2)<=240
set(myform.arah,'String','belok kiri sedikit');
else
set(myform.arah,'String','tak terdeteksi');
end
end
hold off
axes(handles.axes1);
imshow(im);
end
stop(vid);
flushdata(vid);
clear all
case 2
imaqreset
info= imaqhwinfo;
vid=videoinput('winvideo',1,'YUY2_320x240');
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 5;
start(vid)
% Set loop from the value of slider
while(vid.FramesAcquired<=handles.val)
im = getsnapshot(vid);
R=im(:,:,1);
R=fliplr(R);
G=im(:,:,2);
G=fliplr(G);
B=im(:,:,3);
B=fliplr(B);
im=cat(3,R,G,B);
diff= imsubtract(im(:,:,2), rgb2gray(im));
diff2= medfilt2(diff, [3 3]);
diff3= im2bw(diff2,0.18);
diff4= bwareaopen(diff3,300);
bw = bwlabel(diff4, 8);
stats = regionprops(bw, 'BoundingBox', 'Centroid');
axes(handles.axes2);
imshow(bw)
hold on
for object = 1:length(stats)
bb = stats(object).BoundingBox;
bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
plot(bc(1),bc(2), '-m+')
a=text(bc(1)+15,bc(2),strcat('X:',num2str(round(bc(1))),'Y:',num2str(round(
bc(2)))));
set(a,'FontName','Arial','FontWeight','bold','FontSize',12,'Color','red');
set(handles.bc1,'String',num2str(bc(1)));
set(handles.bc2,'String',num2str(bc(2)));
myform=guidata(gcbo);
if bc(1)>=0 && bc(1)<=106.7 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','belok kanan curam');
elseif bc(1)>=0 && bc(1)<=106.7 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','belok kanan sedang');
elseif bc(1)>=0 && bc(1)<=106.7 && bc(2)>=160 && bc(2)<=240
set(myform.arah,'String','belok kanan sedikit');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','maju ke depan dekat');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=80 &&bc(2)<=160
set(myform.arah,'String','maju ke depan sedang');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=160 &&bc(2)<=240
set(myform.arah,'String','maju ke depan jauh');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','belok kiri curam');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','belok kiri sedang');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=160 && bc(2)<=240
set(myform.arah,'String','belok kiri sedikit');
else
set(myform.arah,'String',' tak terdeteksi');
end
end
hold off
axes(handles.axes1);
imshow(im);
end
stop(vid);
flushdata(vid);
clear all
case 3
imaqreset
info= imaqhwinfo;
vid=videoinput('winvideo',1,'YUY2_320x240');
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 5;
start(vid)
% Set loop from the value of slider
while(vid.FramesAcquired<=handles.val)
im = getsnapshot(vid);
R=im(:,:,1);
R=fliplr(R);
G=im(:,:,2);
G=fliplr(G);
B=im(:,:,3);
B=fliplr(B);
im=cat(3,R,G,B);
diff= imsubtract(im(:,:,3), rgb2gray(im));
diff2= medfilt2(diff, [3 3]);
diff3= im2bw(diff2,0.18);
diff4= bwareaopen(diff3,300);
bw = bwlabel(diff4, 8);
stats = regionprops(bw, 'BoundingBox', 'Centroid');
axes(handles.axes2);
imshow(bw)
hold on
for object = 1:length(stats)
bb = stats(object).BoundingBox;
bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
plot(bc(1),bc(2), '-m+')
a=text(bc(1)+15,bc(2),strcat('X:',num2str(round(bc(1))),'Y:',num2str(round(
bc(2)))));
set(a,'FontName','Arial','FontWeight','bold','FontSize',12,'Color','red');
set(handles.bc1,'String',num2str(bc(1)));
set(handles.bc2,'String',num2str(bc(2)));
myform=guidata(gcbo);
if bc(1)>=0 && bc(1)<=106.7 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','belok kanan curam');
elseif bc(1)>=0 && bc(1)<=106.7 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','belok kanan sedang');
elseif bc(1)>=0 && bc(1)<=106.7 && bc(2)>=160 && bc(2)<=240
set(myform.arah,'String','belok kanan sedikit');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','maju ke depan dekat');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','maju ke depan sedang');
elseif bc(1)>=106.7 && bc(1)<=213.4 && bc(2)>=160 && bc(2)<=240
set(myform.arah,'String','maju ke depan jauh');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=0 && bc(2)<=80
set(myform.arah,'String','belok kiri curam');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=80 && bc(2)<=160
set(myform.arah,'String','belok kiri sedang');
elseif bc(1)>=213.4 && bc(1)<=320 && bc(2)>=160 && bc(2)<=240
set(myform.arah,'String','belok kiri sedikit');
else
set(myform.arah,'String',' tak terdeteksi');
end
end
hold off
axes(handles.axes1);
imshow(im);
end
stop(vid);
flushdata(vid);
clear all
end
7. Setelah membuat program, kemudian tekan toolbar save and run GUIvision.m, maka
akan muncul tampilan GUI, kemudian pilih nilai frame video yang diinginkan, klik
tombol Set, tekan tombol pilihan warna yang akan dideteksi, lalu klik tombol START.
Maka sistem akan mulai mendeteksi kordinat posisi objek.
(a)
(b)
Gambar 24.8 Tampilan GUI robot vision pendeteksi objek berwarna merah