• Tidak ada hasil yang ditemukan

Penjelasan Program

Dalam dokumen Pengenalan kode huruf semaphore (Halaman 57-69)

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

Dalam dokumen Pengenalan kode huruf semaphore (Halaman 57-69)

Dokumen terkait