• Tidak ada hasil yang ditemukan

Contoh Aplikasi yang Memanfaatkan Pengolahan Citra

Dalam dokumen Pengolahan Citra Digital Menggunakan Matlab (Halaman 28-40)

Dengan pengolahan Citra, banyak aplikasi(terapan) yang bisa kita gunakan mis-alkan saja pattern recognition (pengenalan pola), perbaikan citra, normalisasi citra, dan lain - lain. Adapun alikasi pengolahan citra yang akn dibahas di sini tidak hanya dibuat dengan menggunakan M-File saja, akan tetapi dibuat dengan menggunakan GUI (Graphic User Interface) yang akan memudahkan user untuk memakai aplikasi.

Kode program yang akan ditampilkan di sini adalah kode program yang terletak pada tombol (button) dan dituliskan di bawah kode program tertentu. Misalkan yang dijelaskan adalah kode program pada tombol btnVid_on, maka kode program yang dita-mpilkan adalah kode program setelah kode program di bawah ini.

% --- Executes on button press in btnVid_on.

function btnVid_on_Callback(hObject, eventdata, handles) % hObject handle to btnVid_on (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

Berikut ini adalah beberapa aplikasi dari pengolahan citra : 1. Aplikasi untuk Kompresi Citra Digital

Kompresi citra adalah memperkecil ukuran (besar file) citra digital dengan cara mengurangi detail citra. Dengan dilakukan kompresi, maka ukuran citra akan men-jadi lebih kecil sehingga akan bisa mempercepat proses transfer file.

(a) Desain Tampilan

Desain tampilan yang dibuat adalah sebagai berikut :

Dari gambar di atas terlihat beberapa component yang dipakai, yaitu :

• axes yang dipakai ada 2 yaitu : yang sebelah kiri dengan Tag "axes1" di-gunakan untuk menampilkan citra input, kemudian yang sebelah kanan dengan Tag "axes2" digunakan untuk menampilkan citra yang sudah dikompress.

• Pop-up Menu yang dipakai hanya 1 buah dengan Tag Popup dan string-nya diisi dengan :

25 50 75 100

Ini merupakan pilihan - pilihan yang kualitas dari citra yang akan disim-pan dalam persen.

• Button yang dipakai sebanyalk 3 buah yaitu :

– Button dengan Tag btnOpen dan string OPEN digunakan untuk mem-buka file citra yang akan dikompress dan menampilkannya pada "axes1". – Button dengan Tag btnKompress dan string KOMPRESS digunakan

untuk melakukan proses kompresi citra digital kemudian menampilkan-nya pada "axes2".

– Button dengan Tag btnKeluar dan string KELUAR digunakan untuk keluar dari aplikasi.

(b) Kode Program i. Tombol "OPEN" [nama_file1, nama_path1]=uigetfile ( ... {’*.jpg’,’File JPEG(*.jpg)’; ’*.png’,’File PNG(*.png)’;... ’*.bmp’,’File BMP(*.bmp)’;... ’*.*’,’Semua file(*.*)’},... ’Buka File Citra Asli’); if ~isequal(nama_file1, 0) handles.data1=imread(fullfile(nama_path1,... nama_file1)); guidata(hObject,handles); handles.current_data1=handles.data1; axes(handles.axes1); imshow(handles.current_data1); else return; end Keterangan :

• uigetfile() : merupakan fungsi untuk menampilkan tampilan GUI un-tuk mengambil file.

• isequal(a,b) : merupakan fungsi untuk menentukan ketidaksamaan 2 objek. Dalam hal ini tentu saja ketidaksamaan antara a dengan b. ii. Tombol "KOMPRESS"

val=get(handles.Popup,’value’); str=get(handles.Popup,’string’);

kualitas = str2num(str{val}); [nama_file_simpan, path_simpan]=uiputfile(... {’*.jpg’,’File JPEG(*.jpg)’; ’*.png’,’File PNG(*.png)’;... ’*.bmp’,’File BMP(*.bmp)’;... ’*.*’,’Semua file(*.*)’},...

’Menyimpan File Hasil Kompresi’); if ~isequal(nama_file_simpan,0) imwrite(handles.data1,fullfile(path_simpan,... nama_file_simpan),’quality’,kualitas); citra_kompres=imread(fullfile(path_simpan,... nama_file_simpan)); axes(handles.axes2); imshow(citra_kompres); end Keterangan :

• val=get(handles.Popup,’value’) : digunakan untuk mengambil ’value’(nilai) dari "Pop-up Menu" dengan Tag Popup dan menyimpannya dalam variabel val.

• str=get(handles.Popup,’string’) : digunakan untuk mengambil string dari "Pop-up Menu" dengan Tag Popup.

• strval : digunakan untuk mengambil string dengan value tertentu. • str2num() : digunakan untuk merubah nilai string menjadi nilai

nu-merik.

• imwrite() : digunakan untuk menyimpan citra. iii. Tombol "KELUAR"

button = questdlg(’Apakah anda mau keluar ?’, ... ’Konfirmasi Keluar’,’Ya’,’Tidak’,’Tidak’); switch button case ’Ya’, clc; close; case ’Tidak’, quit cancel; end Keterangan :

• button = questdlg(’Apakah anda mau keluar ?’,... ’Konfirmasi Keluar’,’Ya’,’Tidak’,’Tidak’); digunakan untuk menampilkan tampilan GUI untuk menampilkan pertanyaan pada use beserta jawabannya. Tentu saja di sini pertanyaan-nya adalah "Apakah anda mau keluar ?" dengan jawaban "Ya" dan "Tidak" dengan default jawaban pada "Tidak". Sedangkan nama GUI-nya adalah "Konfirmasi Keluar".

(c) Cara Penggunaan

Cara menggunakan aplikasi ini sangatlah mudah, pertama - tama buka file citra dengan klik tombol "OPEN", lalu pilih citra yang mau dikompress, lalu klik OK. Setelah file citra yang dibuka ditampilkan pada axes1 (sebelah kiri), pilih kualitas citra yang akan dikompress pada "Pop-up Menu". Setelah itu untuk melakukan kompresi, tinggal klik tombol "KOMPRESS" lau simpan citra yang dikompress dengan nama dan format yang kamu inginkan, lalu klik OK.

Untuk keluar dari aplikasi, tinggal klik tombol "KELUAR" lalu klik tombol "Ya". Sedangkan untuk membatalkan, klik tombol "Tidak".

Gambar di bawah ini merupakan gambar hasil running dari "Aplikasi untuk Kompresi Citra Digital" dengan kualitas yang dipilih adalah 50.

2. Aplikasi untuk Mengambil Foto Melalui Webcam

Dari namanya, tentu saja untuk bisa menjalankan aplikasi ini kita membutuhkan webcam yang terinstal pada komputer yang kita gunakan.

Dengan toolbox image processing yang ada di Matlab kita bisa melakukan pengam-bilan foto melalui webcam yang kita punya. Cara kerja aplikasi ini adalah dengan mengambil 1 frame dari gambar yang ditangkap melalui webcam dan videonya ditampilkan di layar. Ukuran dari gambar yang diambil tentu saja sesuai dengan resolusi dari webcam yang dipakai untuk menampilkan video.

Resolusi - resolusi webcam (dalam pixel) yang dipakai pada aplikasi ini ada 5 macam, yaitu 640x480, 352x288, 320x240, 176x144, 160x120.

(a) Desain Tampilan

Dari gambar di atas terlihat beberapa component yang dipakai, yaitu :

• axes yang dipakai adalah 2 axes yaitu axes1 untuk menampilkan video dari webcam dan axes2 untuk menampilkan hasil capture video.

• Pop-up Menu yang dipakai hanya 1 dengan nama (Tag) popup dan string-nya diisi dengan :

YUY2_640x480 YUY2_352x288 YUY2_320x240 YUY2_176x144 YUY2_160x120

Ini merupakan pilihan - pilihan yang menentukan resolusi video yang akan ditampilkan pada aplikasi.

• Edit Text yang dipakai hanya 1 dengan nama (Tag) txtUkuran dan string kosong digunakan untuk menampilkan ukuran dari gambar hasil capture video.

• Button atau tombol yang dipakai sejumlah 5 buah, yakni :

– Button dengan Tag btnVid_on dan string Video On digunakan untuk menghidupkan webcam dan menampilkannya dalam aplikasi. – Button dengan Tag btnVid_off dan string Video Off digunakan

un-tuk mematikan webcam.

– Button dengan Tag btCapture dan string Capture digunakan untuk mengambil gambar (capture) dari webcam yang sedang hidup. – Button dengan Tag btnSave dan string Save digunakan untuk

meny-impan hasil capture.

– Button dengan Tag btnExit dan string Exit digunakan untuk keluar dari aplikasi.

(b) Kode Program

Kode program di sini akan dijelaskan berdasarkan tombol - tombol yang di-pakai, yaitu :

i. Tombol "Video On" global vid val=get(handles.popup,’value’); str=get(handles.popup,’string’); selected_string = str{val}; vid = videoinput(’winvideo’,1,selected_string); set(vid,’ReturnedColorSpace’,’rgb’);

vidRes = get(vid, ’VideoResolution’); imWidth = vidRes(1);

imHeight = vidRes(2);

nBands = get(vid, ’NumberOfBands’);

hImage = image( zeros(imHeight, imWidth, nBands) ); axes(handles.axes1);

preview(vid, hImage); Keterangan :

• global vid : digunakan untuk menjadikan variabel vid menjadi vari-abel global yang artinya varivari-abel ini akan dapat diakses oleh tombol - tombol yang lain

ii. Tombol "Video Off" global vid delete(vid); iii. Tombol "Capture"

global vid capture

capture= getsnapshot(vid); axes(handles.axes2); imshow(capture); a=size(capture); set(handles.txtUkuran,’string’,num2str(a)) Keterangan :

• capture= getsnapshot(vid); : digunakan untuk untuk mengambil 1 frame dari video yang ditangkap oleh webcam pada saat itu juga ke-mudian menyimpannya dalam variabel capture.

• num2str() : digunakan untuk merubah nilai numerik menjadi nilai string karena memang untuk menampilkan nilai pada "Edit Text", nilai yang mau ditampilkan harus berupa string.

• set(handles.txtUkuran,’string’,num2str(a)) : digunakan untuk men-setting string dari "Edit Text" dengan Tag "txtUkuran" yang ke-mudian diisi dengan nilai dari variabel a.

iv. Tombol "Save" global capture

[nama_file_simpan, path_simpan]=uiputfile(... {’*.jpg’,’File JPEG(*.jpg)’;

’*.png’,’File PNG(*.png)’;... ’*.bmp’,’File BMP(*.bmp)’;... ’*.*’,’Semua file(*.*)’},... ’Menyimpan File Hasil Capture’); if ~isequal(nama_file_simpan,0) imwrite(capture,fullfile(path_simpan,... nama_file_simpan)); end v. Tombol "Exit" close; (c) Cara Penggunaan

Cara menggunakan aplikasi ini sangatlah mudah.

• Pertama - tama pilih resolusi video yang diinginkan melalui "Pop-up Menu".

• Untuk menghidupkan Webcam, klik tombol "Video On". Gambar yang ditangkap webcam akan langsung ditampilkan pada "axes1" (sebelah kiri).

• Untuk meng-capture gambar, klik tombol "Capture". Gambar hasil cap-ture akan langsung ditampilkan pada "axes2" (sebelah kanan) dan uku-ran matriksnya ditampilkan di bawahnya pada "Edit Text".

• Untuk menyimpan hasil capture, klik tombol "Save", beri nama dan pilih format yang diinginkan, kemudian klik "OK".

• Untuk mematikan webcam, tinggal klik tombol "Video Off". • Untuk keluar dari apilkasi, klik tombol "Exit".

Gambar di bawah ini merupakan gambar hasil running dari "Aplikasi untuk Mengambil Gambar Melalui Webcam".

3. Sistem Pengenalan Wajah Menggunakan Histogram Citra

Tentunya nilai histogram antara suatu citra dengan citra yang lain yang berbeda tentunya juga akan berbeda pula. Akan tetapi bila citra tersebut masih merupakan kelompok citra yang mempunyai kemiripan (misalkan sekumpulan citra wajah dari

satu orang) pastilah perbedaan histogram citra dari citra - citra tersebut tidak terlalu jauh. Nah, konsep inilah yang akan dipakai untuk Sistem Pengenalan Wajah.

(a) Desain Tampilan Desain tampilan yang dibuat adalah sebagai berikut :

Dari gambar di atas terlihat beberapa component yang dipakai, yaitu :

• "axes" yang digunakan ada 2 buah, yang sebelah kiri dengan Tag "axes1" digunakan untuk menampilkan citra wajah input, kemudian yang sebelah kanan dengan Tag "axes2" digunakan untuk menampilkan citra wajah hasil pengenalan.

• "button" yang digunakan ada 4 buah, yakni :

– Button dengan Tag btnOpen dan string OPEN digunakan untuk mem-buka file citra wajah dan menampilkannya pada "axes1".

– Button dengan Tag btnUpdate dan string UPDATE digunakan untuk mencari nilai histogram dari masing - masing citra wajah yang ada dalam database dan menyimpannya dalam file "DFace.mat".

– Button dengan Tag btnKenali dan string KENALI digunakan un-tuk melakukan prose pengenalan wajah dan kemudian menampilkan hasilnya pada "axes2".

– Button dengan Tag btnKeluar dan string KELUAR digunakan untuk keluar dari aplikasi.

(b) Kode Program i. Tombol "OPEN" global I [nama_file1, nama_path1]=uigetfile ( ... {’*.bmp’,’File BMP(*.bmp)’;... ’*.jpg’,’File JPEG(*.jpg)’;... ’*.png’,’File PNG(*.png)’;...

’*.*’,’Semua file(*.*)’},... ’Buka File Citra Asli’); if ~isequal(nama_file1, 0) I=imread(fullfile(nama_path1,nama_file1)); axes(handles.axes1); imshow(I); else return; end

ii. Tombol "UPDATE"

a=size(dir(’DBase’)); jum_folder=a(1)-2; AHist=0:255; for i=1:jum_folder k=1; for j=1:5 I=imread(strcat(’DBase/S’,int2str(i),... ’/’,int2str(k),’.bmp’)); Hist=imhist(I); AHist=[AHist;Hist’]; k=k+2; end end

save ’DFace’ AHist;

msgbox(’Update Berhasil’) Keterangan :

• dir(’DBase’) : digunakan untuk melakukan listing direktory pada folder "DBase". Biasanya direktori yang di list adalah sejumlah file + 2.

• strcat(’DBase/’,jum_folder) : digunakan untuk menggabungkan an-tara string yang ditulis secara langsung dengan variabel. Dalam con-toh di samping variabelnya adalah jum_folder.

• save ’DFace’ AHist : digunakan untuk menyimpan variable AHist ke dalam file "DFace.mat"

• msgbox(’Update Berhasil’) : digunakan untuk menampilkan tampi-lan GUI berupa Message Box dengan tulisan "Update Berhasil". iii. Tombol "KENALI"

global I hist=imhist(I)’; load DFace; [x y]=size(AHist); jum=0; for i=2:x

for j=1:y

jum = jum + (hist(j) - AHist(i,j))^2; end Jarak(i-1,1) =sqrt(jum); jum = 0; end [temp M] = min(Jarak); Folder=ceil(M/5); axes(handles.axes2); imshow(strcat(’DBase/S’,int2str(Folder),’/5.bmp’)) Keterangan :

• [temp M] = min(Jarak) : digunakan untuk menentukan nilai minimal dari sekelompok nilai (data). Dalam contoh di samping, sekelompok nilai (data) tersebut disimpan dalam variabel Jarak. Hasil minimal-nya disimpan dalam variabel temp, sedangkan posisiminimal-nya dalam data disimpan dalam variabel M.

• ceil(val) : digunakan untuk membulatkan ke atas dari nilai yang ter-dapat pada variabel val. Misalkan 2.2 akan dibulatkan ke 3, 4.9 akan dibulatkan ke 5, dan sebagainya.

iv. Tombol "KELUAR"

button = questdlg(’Apakah Anda ingin keluar?’, ... ’Konfirmasi Keluar’,’Ya’,’Tidak’,’Tidak’); switch button case ’Ya’, clc; close; case ’Tidak’, quit cancel; end (c) Cara Penggunaan

Cara menggunakan aplikasi "Pengenalan Wajah" ini adalah sebagai berikut : • Sebelum menggunakan aplikasi "Pengenalan Wajah" ini, setting terlebih

dahulu data wajah yang akan kita pakai. Untuk setiap orangnya diam-bil 10 sample wajah dan beri nama dengan nama "1.bmp","2.bmp", dan seterusnya sampai "10.bmp", kemudian dimasukkan dalam folder yang diberi nama "Si" dimana i adalah orang yang ke-... Jadi jika ada 10 orang berarti kita buat folder dengan nama "S1", "S2", "S3", dan seterusnya sampai "S10". Kemudian kesemua folder yang kita buat dimasukkan ke dalam folder yang diberi nama "DBase".

• Untuk menggunakan aplikasi ini mudah sekali. Pertama - tama klik tombol "UPDATE" untuk mencari nilai histogram dari masing - masing citra wajah yang ada dalam folder "S1", "S2", dan seterusnya lalu nilainya akan disimpan dalam file "DFace.mat". Tidak semua citra wajah dicari

Untuk "UPDATE" ini cukuplah sekali saja diklik selama database wajah yang dipakai tidak berubah.

• Kemudian untuk melakukan proses pengenalan klik tombol "OPEN", kemudian pilih gambar wajah yang tersimpan dalam database wajah, lalu klik "OK". Setelah gambar yang kita pilih tampil pada "axes" yang se-belah kiri, kemudian klik tombol "KENALI". Hasil wajah yang dikenali akan ditampilkan pada "axes" sebelah kanan.

• Untuk keluar dari aplikai, tinggal klik tombol "KELUAR" lalu klik "Ya". Untuk membatalkan klik "Tidak".

Gambar di bawah ini adalah gambar hasil running dari aplikasi "Pengenalan Wajah Menggunakan Histogram Citra".

Bagi yang menginginkan Source Code dari aplikasi - aplikasi di atas, silahkan menghubungi penulis. Contact person dari penulis ada di halaman Biografi di bagian terakhir.

Bibliography

[1] Siang, J.J. Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan Matlab. Penerbit ANDI, Yogyakarta, 2009.

[2] Siang, J.J. Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan Matlab. Penerbit ANDI, Yogyakarta, 2009.

[3] Mabrur, Andik. Pengenalan Wajah Menggunakan Metode Adjacent Pixel Intensity Difference Quantization Histogram Generation. Tugas Akhir Jurusan Matematika-ITS, Surabaya, 2011.

[4] Iqbal, Muhammad. Dasar Pengolahan Citra menggunakan MATLAB. IPB, Bogor, 2009.

[5] AT&T Laboratories Cambridge, The Database of Faces, <URL:http://www.cl.cam.ac.uk/research/dtg/ attarchive/facedatabase.html>

Dalam dokumen Pengolahan Citra Digital Menggunakan Matlab (Halaman 28-40)

Dokumen terkait