BAB IV HASIL DAN PEMBAHASAN
4.2. Penjelasan Program
Tombol kamera aktif memiliki fungsi untuk menghubungkan antara webcam
dengan Matlab yang terdapat pada laptop dan kemudian ditampilkan ke dalam proses pengenalan kode huruf semaphore. Proses tombol kamera aktif sebagai berikut :
Perintah imqhwininfo dijalankan sebelumnya memulai mengambil data dari video kamera untuk memastikan adapter kamera terbaca dengan baik. Program di atas secara garis besar berfungsi untuk menampilkan informasi yang akan disampaikan oleh webcam
dan informasi tersebut akan diinisialisasi di dalam program agar antara webcam dengan
software Matlab dapat melakukan komunikasi. Dalam proses ini yang tertampil ialah video resolusi, lebar, panjang, port webcam, dan band dari video. Setelah Handle Image
diperoleh, maka perintah program preview dapat berjalan. Preview berfungsi menampilkan video pada saat kamera aktif dengan inisialisasi yang telah digunakan.
4.2.2. Tombol Ambil Gambar
Tombol ambil gambar digunakan untuk mengambil gambar pose kode huruf
semaphore yang akan dikenali dalam proses pengenalan pola. Program tombol ambil gambar sebagai berikut :
function kameraaktif_Callback(hObject, eventdata, handles) % hObject handle to kameraaktif (see GCBO)
% handles structure with handles and pengguna data (see GUIDATA) imaqhwinfo;
info = imaqhwinfo('winvideo');
dev_info = imaqhwinfo('winvideo',1);
vidobj = videoinput('winvideo',1,'RGB24_1280x960); vidobj.FramesPerTrigger = 1;
triggerconfig(vidobj, 'manual');
vidRes = get(vidobj,'VideoResolution'); imWidth = 1280;
imHeight = 960;
nBands = get(vidobj,'NumberOfBands');
hImage = image(zeros(imHeight, imWidth, nBands),
'parent',handles.axes1); preview(vidobj,hImage)
function ambilgambar_Callback(hObject, eventdata, handles) % hObject handle to ambilgambar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and pengguna data (see GUIDATA) imaqhwinfo;
info = imaqhwinfo('winvideo');
Perintah program ambil gambar sama dengan perintah program kamera aktif. Namun terdapat penambahan program pada bagian getdata yang berfungsi untuk mengambil citra pada saat webcam dalam kondisi aktif. Citra yang telah diambil akan diinisialisasi menggunakan handles agar dapat dipanggil dalam file figure maupun file.m, yang kemudian akan ditampilkan pada axes1.
4.2.3. Pop-Up Menu
Pop-up menu digunakan untuk pengguna memilih variasi desimasi yang diinginkan, pada bagian pop-up menuini terdiri dari 3 pilihan variasi desimasi, yaitu desimasi 1, desimasi 2, dan desimasi 3. Perintah program yang digunakan pada pop-up menu adalah sebagai berikut:
function popupmenu_Callback(hObject, eventdata, handles) % hObject handle to popupmenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and pengguna data (see GUIDATA) indeks=get(handles.popupmenu,'value'); switch indeks case 2 des=1; case 3 des=2; case 4 des=3; end handles.des=des; guidata(hObject,handles);
vidobj = videoinput('winvideo',1,'RGB24_1280x960'); vidobj.FramesPerTrigger = 1;
triggerconfig(vidobj, 'manual');
vidRes = get(vidobj,'VideoResolution'); imWidth = 1280;
imHeight = 960;
nBands = get(vidobj,'NumberOfBands');
hImage = image(zeros(imHeight, imWidth, nBands),
'parent',handles.axes1); start(vidobj); pause(1); trigger(vidobj); stoppreview(vidobj); gambar=getdata(vidobj); handles.gambar=gambar; guidata(hObject,handles)
Program di atas tertulis “des=1” maksudnya adalah desimasi akan dilakukan sebanyak 1 kali, begitu juga pada “des=2” yang maksudnya adalah desimasi akan dilakukan sebanyak 2 kali dan sama maknanya pada “des=3”. Desimasi diinisialisasikan dengan nama “des”. Agar nilai variasi desimasi ini dapat dipanggil diprogram lain, maka
diubah menjadi “handles.des”. 4.2.4. Tombol Proses
Tombol proses adalah tombol yang berfungsi untuk menjalankan proses pengenalan kode huruf semaphore yang tediri dari beberapa bagian program yang digabungkan mulai dari program pembanding dengan basis data, program preprocessing
yang terdiri dari program konversi RGB ke HSV, program segmentasi warna, program
cropping dan program resizing, program ekstraksi ciri, program jarak Euclidean dan hasil keluaran berupa teks.
- Program Pembanding Basis Data
Berfungsi untuk membandingkan data sesuai dengan desimasi yang dipilih oleh pengguna pada proses pop-up menu.
Program di atas berfungsi untuk mengeluarkan data yang terdapat pada basis data yang akan dibandingkan dengan program perhitungan jarak. Ketika pengguna memilih desimasi 1 pada proses pop-up menu, maka data tersebut akan dibandingkan dengan data
yang berada pada “db64d1” begitu juga apabila penggunamemilih desimasi yang lainnya.
- Program Konversi RGB ke HSV
Program ini berfungsi untuk mengubah gambar RGB ke gambar HSV dengan perintah program sebagai berikut :
%PROSES KONVERSI HSV x=handles.gambar; x1=rgb2hsv(x); %DATABASE % PopUpMenu des=handles.des; if (des==1) loaddb64d1 elseif (des==2) loaddb64d2 elseif (des==3) loaddb64d3 end
Program tertulis “handles.gambar” maksudnya dalam proses konversi ini dapat
memanggil gambar yang telah diambil dengan webcam yang terdapat pada perintah
program “ambil gambar” sebelumnya. Contoh program konversi HSV citra dapat dilihat pada Gambar 4.6.
(a)
(b)
Gambar 4.6. Konversi citra RGB ke HSV
(a) Citra masukkan (RGB); (b) citra hasil konversi dalam bentuk hue, saturation dan
- Program Segmentasi Warna
Program ini berfungsi mengambil bagian warna hue yang diperlukan sesuai dengan warna kuning yang terdapat pada bendera semaphore dan menghilangkan warna-warna yang tidak diperlukan.
Pada program di atas, segmentasi bagian depan dilakukan terlebih dahulu dengan cara mengambil nilai saturation yang tertulis pada program “HSV=x1(:,:,2);”. Dapat dijelaskan bahwa “x1” adalah hasil gambar yang telah dikonversi menjadi citra HSV.
Program dari “hsv” adalah gambar yang berisikan nilai saturation. Kemudian terdapat
“depan=hsv>0.45;” depan adalah hasil dari nilai saturation yang nilainya lebih dari 0,45. Nilai ambang saturation ini diperoleh dari percobaan yang dilakukan penulis pada saat pengambilan data.
Nilai ini perlu diketahui agar dapat membantu program dalam menangani segmentasi warna khususnya berhubungan dengan kecerahan pada warna yang ditentukan. Gambar 4.7. sebagai contoh program segmentasi bagian depan untuk memperoleh nilai
saturation yang terdapat pada citra.
(a) (b)
Gambar 4.7. Contoh proses ambil nilai saturation; (a) mengambil nilai saturation dari citra HSV; (b) ambil nilai saturation yang memiliki nilai lebih dari 0.45
% Segmentasi bagian depan (foreground)
hsv=x1(:,:,2); % Ambil bagian saturation depan=hsv>0.45; % Original: 0.45
% ---% Segmentasi kuning
x2=x1(:,:,1); % Ambil bagian hue
x3=x2*360; % Setting nilai hue maks 360 th1=x3>35; % Original: 35
th2=x3<50; % Original: 50 kuning=and(th1,th2);
Segmentasi kuning “x2” berisikan gambar yang berisikan nilai hue dari hasil gambar x1. Dari Gambar 4.7, bagian (a) dikalikan dengan 360 karena ruang warna hue
terdiri dari 0 – 360. Terdapat “th1” dan “th2” “kuning” adalah program untuk
menggabungkan “th1” dan “th2”.
(a) (b)
(d) (c)
(e)
Gambar 4.8. Contoh proses segmentasi kuning; (a) mengambil nilai hue pada citra; (b) pengaturan nilai hue maksimal; (c) mengambil nilai hue dengan nilai lebih besar dari 35
pada citra; (d) mengambil nilai hue dengan nilai kurang dari 50 pada citra; (e) menggambungkan proses (c) dan (d) untuk memperoleh warna kuning.
Gambar 4.8. sebagai contoh program segmentasi warna kuning dengan cara mengambil nilai hue yang memiliki nilai ambang 35 – 50. Nilai ambang ini diperoleh dari Gambar 2.10, warna kuning pada semaphore memiliki rentang nilai 35 – 50.
Segmentasi citra bendera berwarna kuning adalah gabungan dari hasil segmentasi
bagian depan yaitu “depan” yang digabungkan dengan hasil segmentasi kuning yaitu
“kuning”. Proses “bkuning1=bwareaopen(bkuning,2000)” sebagai proses “bwareaopen”
untuk mengetahui daerah mana yang termasuk objek dan foreground dari citra secara jelas.
Nilai “2000” adalah memisahkan objek yang diperlukan pada citra yang memiliki daerah
warna kuning sesuai luasan piksel sebesar 2000. Contoh proses segmentasi citra bendera berwarna kuning dapat diperlihatkan pada Gambar 4.9.
(a) (b)
Gambar 4.9. Contoh proses segmentasi citra bendera berwarna kuning; (a) penggabungan
dari proses “depan” dengan “kuning”; (b) memilih daerah yang berwarna kuning sesuai luasan piksel yang diinginkan pada citra.
- Program Potong Gambar
Program ini berfungsi memotong gambar sehingga bagian yang tidak diperlukan dapat dihilangkan.
% Potong Gambar
axes(handles.axes2);
if sum(sum(bkuning1))>0 % Potong kiri cout=bkuning1; a=sum(cout); b=find(a>0); cout(:,1:b(1)-1)=[]; % Potong kanan cout=fliplr(cout); a=sum(cout); b=find(a>0); cout(:,1:b(1)-1)=[];
(a) (b)
(d) (c)
Gambar 4.10. Proses pemotongan citra; (a) hasil potong kiri; (b) hasil potong kanan setelah putar 1800 ; (c) hasil potong atas setelah diputar -900; (d) hasil potong bawah
setelah diputar 900. % Potong atas cout=cout'; a=sum(cout); b=find(a>0); cout(:,1:b(1)-1)=[]; % Potong bawah cout=fliplr(cout); a=sum(cout); b=find(a>0); cout(:,1:b(1)-1)=[]; % Penyesuaian orientasi cout=cout'; cout=flipud(cout); cout=fliplr(cout); else cout=bkuning1; end imshow (cout) axison
Gambar 4.10, memperlihatkan proses pemotongan citra. Proses pemotongan gambar ini akan ditampilkan pada axes 2 setelah proses dijalankan keseluruhan. Pada
proses ini, gambar yang digunakan adalah citra “bbkuning” yang akan dipotong secara
bertahap dengan cara memutar keseluruhan citra dan kemudian dipotong pada bagian kiri dari citra secara bertahap.
- Program Resizing 64x64
Program ini berfungsi untuk menyesuaikan ukuran gambar yang telah dipotong sebelumnya sehingga memiliki ukuran piksel yang sama.
Program di atas menggunakan perintah “imresize” yang berfungsi mengubah
ukuran citra. Resizing dapat berdampak memperbesar ataupun memperkecil ukuran citra. Pada program ini ukuran yang diperlukan adalah 64 x 64 piksel. Gambar 4.11. menunjukkan citra yang telah dipotong untuk selanjutkan diproses pada proses resizing.
(a) (b)
Gambar 4.11. Proses resizing pada citra masukkan; (a) citra yang telah dipotong; (b) citra yang telah diresizing ke piksel 64 x 64.
- Program Ekstraksi Ciri
Program ini berfungsi untuk memproses data yang banyak kemudian diekstrak menjadi data yang lebih sedikit namun dari data yang lebih sedikit tersebut telah mewakili data sebelumnya yang lebih banyak.
%Resizing 64x64 axes(handles.axes3);
x10=imresize(cout,[64 64]); imshow(x10)
Terdapat fungsi program “xcwv” untuk memanggil fungsi ekstraksi ciri, dalam
fungsi tersebut menggunakan ekstraksi ciri wavelet haar. Masukan dari ekstraksi ciri adalah hasil dari proses resizing yang berasal dari citra masukkan. Terdapat “des” yang
memiliki nilai desimasi yang telah ditentukan oleh pengguna dari pop-up menu.
List program “x12” berfungsi untuk membuat data yang terdiri dari beberapa kolom menjadi hanya satu kolom, sebagai contoh data 32x32 diubah menjadi 1x1024. Keluaran
dari fungsi “xcwv” adalah x11 merupakan hasil dari ekstraksi ciri wavelet haar. Hasil dari
list x11 ini akan ditampilkan pada axes4 pada GUI.
- Program Fungsi Jarak Euclidean
Program ini berfungsi sebagai pembanding antara hasil dari ekstraksi ciri dengan basis data yang telah disediakan.
Perintah program jarak adalah untuk memanggil fungsi jarak Euclidean yang akan
membandingkan antara hasil keluaran dari ekstraksi ciri yaitu “x12” dengan hasil dari basis data yaitu “z”. Sehingga “minr” merupakan hasil dari nilai terkecil dari hasil perhitungan
jarak. Nilai terkecil yang diperoleh akan dinyatakan sebagai keluaran dari sistem pengenalan kode huruf semaphore.
- Program Keluaran
Program ini berfungsi sebagai penampil hasil pengenalan kode huruf semaphore
berupa teks. % Dekomposisi wavelet axes(handles.axes4); x11=xcwv(x10,des); x12=x11(:); imshow(x11) axison % ---%Keluaran Teks if(minr==r(1)) z1={'A'} set(handles.text1,'string',z1); elseif(minr==r(2)) z2={'B'} set(handles.text1,'string',z2); % Fungsi Jarak for n=1:26 r(n)=jarak(x12,z(:,n)); end minr=min(r)
elseif(minr==r(3)) z3={'C'} set(handles.text1,'string',z3); elseif(minr==r(4)) z4={'D'} set(handles.text1,'string',z4); elseif(minr==r(5)) z5={'E'} set(handles.text1,'string',z5); elseif(minr==r(6)) z6={'F'} set(handles.text1,'string',z6); elseif(minr==r(7)) z7={'G'} set(handles.text1,'string',z7); elseif(minr==r(8)) z8={'H'} set(handles.text1,'string',z8); elseif(minr==r(9)) z9={'I'} set(handles.text1,'string',z9); elseif(minr==r(10)) z10={'J'} set(handles.text1,'string',z10); elseif(minr==r(11)) z11={'K'} set(handles.text1,'string',z11); elseif(minr==r(12)) z12={'L'} set(handles.text1,'string',z12); elseif(minr==r(13)) z13={'M'} set(handles.text1,'string',z13); elseif(minr==r(14)) z14={'N'} set(handles.text1,'string',z14); elseif(minr==r(15)) z15={'O'} set(handles.text1,'string',z15); elseif(minr==r(16)) z16={'P'} set(handles.text1,'string',z16); elseif(minr==r(17)) z17={'Q'} set(handles.text1,'string',z17); elseif(minr==r(18)) z18={'R'} set(handles.text1,'string',z18); elseif(minr==r(19)) z19={'S'} set(handles.text1,'string',z19); elseif(minr==r(20)) z20={'T'} set(handles.text1,'string',z20); elseif(minr==r(21)) z21={'U'} set(handles.text1,'string',z21); elseif(minr==r(22)) z22={'V'} set(handles.text1,'string',z22);
Program di atas adalah program untuk menampilkan hasil pengenalan kode huruf
semaphore berupa teks. Terdapat 26 pengenalan kode huruf semaphore yang mewakili A
sampai dengan Z. Program “(minr==r(1))” sampai dengan “(minr==r(26))” sebagai
keluaran dari perhitungan jarak, dengan jarak terkecil yang akan ditampilkan.
4.2.5. Tombol Reset
Tombol “Reset” berfungsi sebagai mengembalikan program ke tampilan awal apabila
pengguna melakukan kesalahan atau terjadi error pada saat proses pengenalan
berlangsung. Program pada tombol “Reset” dapat diperlihatkan di bawah ini :
4.2.6. Tombol Keluar
Tombol “Keluar” berfungsi sebagai menutup atau mengakhiri program atau
tampilan pada GUI pengenalan kode huruf semaphore. Program dapat diperlihatkan sebagai berikut :
function keluar_Callback(hObject, eventdata, handles) % hObject handle to keluar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and pengguna data (see GUIDATA) close
function reset_Callback(hObject, eventdata, handles) % hObject handle to reset (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and pengguna data (see GUIDATA) axes(handles.axes1) plot(0); axes(handles.axes2) plot(0); axes(handles.axes3) plot(0); axes(handles.axes4) plot(0); set(handles.popupmenu,'value',1); set(handles.text1,'string','') elseif(minr==r(23)) z23={'W'} set(handles.text1,'string',z23); elseif(minr==r(24)) z24={'X'} set(handles.text1,'string',z24); elseif(minr==r(25)) z25={'Y'} set(handles.text1,'string',z25); elseif(minr==r(26)) z26={'Z'} set(handles.text1,'string',z26); end