BAB 4 PEMBAHASAN 4.1 Realisasi GUI Program - PERANCANGAN TAPIS BUTTERWORTH UNTUK MERESTORASI CITRA DIGITAL - Repository UNRAM
BAB 4 PEMBAHASAN
4.1 Realisasi GUI Program
Berikut adalah realisasi tampilan antarmuka utama dari program
PERANCANGAN TAPIS BUTTERWORTH UNTUK MERESTORASI CITRA
DIGITAL yang dibuat pada tugas akhir ini.Gambar 4.1 Tampilan antarmuka utama programPada tampilan utama program terdapat empat buah kontrol Axes yang digunakan
untuk menampilkan citra masukan yang dibaca, citra hasil pengaburan dan penambahan
derau, citra hasil penapisan Butterworth, error citra, dan grafik hasil evaluasi kinerja
tapis Butterworth. Terdapat juga sepuluh buah tombol yang mereferesentasikan tiap
proses yang terdapat pada program dalam melakukan proses restorasi citra
menggunakan tapis Butterworth. Tombol-tombol tersebut adalah tombol Buka Citra,
tombol Pengaburan, tombol Derau, tombol Rotasi, tombol Intensitas, tombol RESET,
tombol EVALUASI BUTTERWORTH LOWPASS, EVALUASI BUTTERWORTH
BANDPASS, EVALUASI BUTTERWORTH HIGHPASS, EVALUASI BUTTERWORTH
BANDSTOP. Selain itu terdapat juga empat buah kontrol Button Group yang masing-
masing memiliki tujuh buah kontrol Radio Button. Keempat kontrol Button Group
tersebut mereferesentasikan operasi-operasi penapisan pada empat bidang frekuensi.
Sedangkan kontrol-kontrol Radio Button yang terdapat di dalamnya mereferesentasikan
besar frekuensi cut-off yang digunakan.Selain antarmuka utama, program juga memiliki antarmuka tabel dan grafik
evaluasi kinerja tapis Butterworth. Berikut adalah tampilan antramuka tabel dan grafik
evaluasi yang dimaksud:Gambar 4.2 Tampilan antarmuka tabel dan grafik evaluasiPada antramuka tabel dan grafik evaluasi kinerja terdapat sebuah kontrol Table
yang digunakan untuk menampilkan nilai dari parameter-parameter evaluasi yang
digunakan. Selain itu terdapat juga sebuah kontrol Axes yang digunakan untuk
menampilkan grafik dari parameter evaluasi RMSE, PSNR, PFE, dan MAE. Terdapat
juga empat buah kontrol Push Button yang digunakan untuk menampilkan grafik dari
parameter evaluasi RMSE, PSR, PFE, dan MAE.Untuk lebih jelasnya, berikut adalah penjelasan detail terkait kontrol-kontrol yang terdapat pada program.
4.1.1 Kontrol Tombol Buka Citra
Tombol ini digunakan untuk melakukan pembacaan citra masukan yang akan
diproses dengan memilih sendiri citra melalui jendela Open File yang ditamilkan. Hasil
pembacaan citra masukan akan ditampilkan pada sebuah kontrol Axes seperti yang
terlihat pada gambar berikut ini.Gambar 4.3 Kontrol tombol Buka CitraBerikut adalah perintah-perintah yang terdapat pada Callback kontrol tombol Buka Citra: 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)
set(handles.tombolDerau, 'Enable' , 'off' ); set(handles.tombolKabur, 'Enable' , 'on' ); set(handles.tombolRotasi, 'Enable' , 'off' ); set(handles.tombolIntensitas, 'Enable' , 'off' ); set(handles.tombolReset, 'Enable' , 'on' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'off' ); [namafile namapath]=uigetfile( '*.jpg;*.bmp;*.jpeg;*.png;*.tif;' , 'Pilih Sebuah
Citra' );
namacitra=[namapath namafile];
if (size(namacitra,3) == 3)
namacitra = rgb2gray(namacitra);
end
axes(handles.axes1) imshow(namacitra); title( 'Citra Semula' );
global
I I = getimage(handles.axes1);
Fungsi Callback tombol Buka Citra mengaktifkan kontrol tombol Pengaburan
dan tombol RESET, serta menonaktifkan kontrol tombol Derau, tombol Rotasi, tombol
Skala Intensitas dan tombol EVALUASI BUTTERWORTH LOWPASS menggunakan
perintah berikut ini.set(handles.tombolDerau, 'Enable' , 'off' ); set(handles.tombolKabur, 'Enable' , 'on' ); set(handles.tombolRotasi, 'Enable' , 'off' ); set(handles.tombolIntensitas, 'Enable' , 'off' ); set(handles.tombolReset, 'Enable' , 'on' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'off' );
Fungsi MATLAB uigetfile digunakan untuk menampilkan jendela Open File
guna memilih citra yang akan diproses. Fungsi uigetfile memiliki dua buah keluaran
yaitu namafile yang digunakan untuk menyimpan nama file dari citra yang dibaca, dan
lokasi absolut atau path dari citra tersebut. Setelah pemilihan citra, program melakukan
pengecekan apakah citra yang dibaca memiliki 3 kanal atau tidak dengan menggunakan
if statement . if (size(namacitra,3) == 3)namacitra = rgb2gray(namacitra);
end Apabila citra yang dibaca memiliki tiga kanal maka proses konversi ke
grayscale akan dilakukan dengan menggunakan fungsi MATLAB rgb2gray .
Selanjutnya hasil pembacaan citra akan ditampilkan pada kontrol axes dengan
menggunakan perintah berikut ini.axes(handles.axes1) imshow(namacitra); title( 'Citra Semula' );
imshow axes1
Fungsi digunakan untuk menampilkan citra pada kontrol . Fungsi
ini melewatkan sebuah argument berupa citra yang dibaca. Hasil pembacaan citra
kemudian disimpan pada sebuah variabel global I dengan menggunakan perintah
berikut ini. globalI I = getimage(handles.axes1);
Fungsi MATLAB getimage digunakan untuk mengambil atau membaca kembali citra yang telah dibaca dan ditampilkan pada kontrol axes1.
4.1.2 Kontrol Tombol Pengaburan
Tombol ini digunakan untuk melakukan operasi pengaburan citra masukan yang axes1
sudah dibaca dan ditampilkan pada . Proses pengaburan dilakukan guna menguji
kinerja tapis dalam melakukan restorasi.Gambar 4.4 Kontrol tombol PengaburanProses pengaburan melibatkan dua buah kontrol yaitu Push Button dan Pop-Up
Menu . Kontrol Pop-Up Menu menyediakan pilihan metode pengaburan yang bisa
digunakan. Adapun pilihan metode pengaburan yang bisa digunakan yaitu Tidak Ada,
Rerata, Motion, Disk, dan Gaussian.
Berikut adalah Callback tombol Pengaburan yang terdapat pada program.
function tombolKabur_Callback(hObject, eventdata, handles) % hObject handle to tombolKabur (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)set(handles.tombolDerau, 'Enable' , 'on' ); set(handles.tombolKabur, 'Enable' , 'off' ); set(handles.tombolRotasi, 'Enable' , 'off' ); set(handles.tombolIntensitas, 'Enable' , 'off' ); set(handles.tombolReset, 'Enable' , 'on' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiHighPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'on' ); I = getimage(handles.axes1); I=getimage(handles.axes1); [baris, kolom, banyakKanal] = size(I);
if banyakKanal ==1 imggray=I;
else
imggray=rgb2gray(I);
end
I = imggray;
switch get(handles.popupmenu7, 'Value' ) case
1 kabur = I; set(handles.tombolKabur, 'Enable' , 'on' );
case
2 H = fspecial( 'average' ,11); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
case
3 H = fspecial( 'motion' ,20,45); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
case
4 H = fspecial( 'disk' ,10); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
case
5 H = fspecial( 'gaussian' ,[11 11], 10); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
end
axes(handles.axes3) imshow(uint8(kabur)); title( 'Citra Hasil Pengaburan' )
Fungsi callback tombol Pengaburan melakukan pengaktifan terhadap beberapa
tombol yaitu tombol Derau, tombol RESET, tombol EVALUASI BUTTERWORTH
LOWPASS, tombol EVALUASI BUTTERWORTH BANDPASS, tombol EVALUASI
BUTTERWORTH HIGHPASS, dan tombol EVALUASI BUTTERWORTH
BANDSTOP. Selain itu dilakukan juga penonaktifan terhadap tombol Pengaburan,
tombol Rotasi, dan tombol Skala Intensitas. Berikut adalah perintah yang digunakan
untuk melakukan pengaktifan dan penonaktifan tombol-tombol tersebut.set(handles.tombolDerau, 'Enable' , 'on' ); set(handles.tombolKabur, 'Enable' , 'off' ); set(handles.tombolRotasi, 'Enable' , 'off' ); set(handles.tombolIntensitas, 'Enable' , 'off' ); set(handles.tombolReset, 'Enable' , 'on' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiHighPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'on' );
Proses selanjutnya yaitu pembacaan citra masukan yang telah dibaca dan
ditampilkan pada axes1 . Proses pembacaan citra dilakukan dengan menggunakan
fungsi MATLAB getimage yang kemudian disimpan pada variabel I . Selanjutnya dilakukan pengecekan ukuran citra dengan menggunkan fungsi MATLAB size .I=getimage(handles.axes1); [baris, kolom, banyakKanal] = size(I);
size Fungsi melewatkan argument berupa citra yang akan dilihat ukurannya dan baris
mengembalikan tiga buah output yaitu variabel yang menyimpan jumlah baris,
kolom banyakKanalvariabel yang menyimpan jumlah kolom, dan variabel yang
menyimpan banyak kanal dari citra yang dibaca. Apabila citra masukan yang dibaca
memiliki kanal 3 (citra RGB) maka akan dilakukan proses konversi citra dari RGB ke
grayscale dengan menggunakan fungsi MATLBA rgb2gray . if banyakKanal ==1imggray=I;
else
imggray=rgb2gray(I);
end
I = imggray;
Proses pengaburan dilakukan berdasarkan jenis pengaburan yang dipilih melalui
kontrol Pop-Up Menu. Proses pengaburan melibatkan statement switch-case untuk
menentukan jenis pengaburan yang dipilih. Statement switch memiliki kondisi yang
akan mengembalikan indeks dari pilihan yang terdapat pada kontrol Pop-Up Menu. switch get(handles.popupmenu7, 'Value' ) case1 kabur = I; set(handles.tombolKabur, 'Enable' , 'on' );
case
2 H = fspecial( 'average' ,11); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
case
3 H = fspecial( 'motion' ,20,45); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
case
4 H = fspecial( 'disk' ,10); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
case
5 H = fspecial( 'gaussian' ,[11 11], 10); kabur = imfilter(I,H, 'replicate' ); set(handles.tombolKabur, 'Enable' , 'on' );
end
Apabila jenis pengaburan yang dipilih adalah Tidak Ada maka statement yang
akan dieksekusi adalah statement yang terdapat pada case 1. Pada Case 1 tidak terjadi
pengaburan, dimana citra yang tersimpan pada variabel kabur adalah citra asli yang
tersimpan pada variabel I. Apabila jenis pengaburan yan dipilih adalah Rerata maka
statemen yang akan dieksekusi adalah statemen pada case 2. Pada case dua dilakukan
pembangkitan tapis rerata berukuran 11x11 dengan menggunakan fungsi MATLAB
fspecial dan disimpan pada variabel H. Selanjutnya dilakukan penapisan dengan
menggunakan fungsi MATLAB imfilter untuk membuat citra menjadi kabur. Hasil
pengaburan selanjutnya disimpan pada variabel kabur. Adapun jika jenis pengaburan
yang dipilih adalah Motion maka statemen yang dieksekusi adalah statemen yang
terdapat pada case 3. Begitu juga jika jenis pengaburan yang dipilih adalah Disk maka
statement yang dieksekusi adalah statemen yang terdapat pada case 3. Dan pada saat
pengaburan yang dipilih adalah Gaussian maka statemen yang dieksekusi adalah
statement pada case 4.Hasil pengaburan selanjutnya ditampilkan pada axes3 dengan menggunakan perintah berikut ini.
axes(handles.axes3) imshow(uint8(kabur)); title( 'Citra Hasil Pengaburan' )
4.1.3 Kontrol tombol Derau
Kontrol ini digunakan untuk menambahkan derau terhadap citra asli yang sudah
dikaburkan. Penambahan derau hanya bisa dilakukan setelah tombol pengaburan
ditekan. Proses penambahan derau dilakukan guna menguji kinerja atau keandalan dari
tapis yang digunakan.Gambar 4.5 Kontrol tombol DerauProses penambahan derau melibatkan tiga kontrol utama yaitu Push Button, Pop-Up Menu
, dan Edit Text. Kontrol Pop-Up Menu menyediakan pilihan jenis derau
yang akan disisipkan pada citra yang telah dikaburkan. Adapun kontrol Edit Text
digunakan untuk menentukan/memasukkan nilai variansi dari derau yang ingin
ditambahkan. Adapun jenis-jenis derau yang tersedia pada kontrol Pop-Up Menu
tersebut adalah Gaussian, Poisson, Salt & Pepper, dan Speckle.Berikut adalah fungsi callback yang terdapat pada tombol Derau pada program ini. function tombolDerau_Callback(hObject, eventdata, handles) % hObject handle to tombolDerau (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
set(handles.tombolDerau, 'Enable' , 'off' ); set(handles.tombolKabur, 'Enable' , 'off' ); set(handles.tombolRotasi, 'Enable' , 'on' ); set(handles.tombolIntensitas, 'Enable' , 'on' ); set(handles.tombolReset, 'Enable' , 'on' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiHighPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'on' ); I_kabur = getimage(handles.axes3);
% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi, 'String' ));
switch get(handles.popupmenu8, 'Value' ) case
1 derau = imnoise(I_kabur, 'gaussian' , 0,variansi);
case
2 derau = imnoise(I_kabur, 'poisson' ); case
3 derau = imnoise(I_kabur, 'salt & pepper' ,variansi);
case
4 derau = imnoise(I_kabur, 'speckle' ,variansi);
end
axes(handles.axes3) imshow(uint8(derau)); title( 'Citra Pengaburan dan Derau' )
Seperti halnya pada callback kontrol tombol Pengaburan, pada callback tombol
ini dilakukan pengaktifan terhadap tombol Rotasi, tombol Skala Intensitas, tombol
RESET, tombol EVALUASI BUTTERWORTH LOWPASS, tombol EVALUASI
BUTTERWORD BANDPASS, tombol EVALUSASI BUTTERWORTH HIGHPASS,
dan tombol EVALUASI BUTTERWORTH BANDSTOP. Selain itu dilakukan juga
penonaktifpan terhadap tombol Pengaburan, dan tombol Derau. Berikut adalah perintah-
perintah yang digunakan melakukan hal tersebut.set(handles.tombolDerau, 'Enable' , 'off' ); set(handles.tombolKabur, 'Enable' , 'off' ); set(handles.tombolRotasi, 'Enable' , 'on' ); set(handles.tombolIntensitas, 'Enable' , 'on' ); set(handles.tombolReset, 'Enable' , 'on' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiHighPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'on' );
Selanjutnya dilakukan pengambilan nilai variansi dari derau yang dimasukkan melalui kontrol Edit Text dengan menggunakan perintah berikut ini.
variansi = str2double(get(handles.editVariansi, 'String' ));
editVariansi Nilai variansi yang dimasukkan melalui kontrol Edit Text dengan
menggunakan fungsi get . Nilai yang dimasukkan pada Edit Text merupakan data string
sehingga dilakukan proses konversi tipe dari string ke double dengan menggunakan
str2doublefungsi MATLAB . Nilai variansi yang dimasukkan disimpan pada variable
variansi.Proses penambahan derau melibatkan statemen switch-case untuk menentukan jenis derau yang digunakan berdasarkan yang dipilih melalui kontrol Pop-Up Menu. switch get(handles.popupmenu8, 'Value' ) case
1 derau = imnoise(I_kabur, 'gaussian' , 0,variansi);
case
2 derau = imnoise(I_kabur, 'poisson' );
case
3 derau = imnoise(I_kabur, 'salt & pepper' ,variansi);
case
4 derau = imnoise(I_kabur, 'speckle' ,variansi);
end Apabila jenis pengaburan yang dipilih adalah Gaussian, maka statemen yang case 1
dieksekusi adalah statement yang terdapat pada . Proses penyisipan derau
dilakukan dengan menggunakan fungsi MATLAB imnoise. Begitu seterusnya untuk
statemen-statemen yang terdapat pada case 2 , case 3 dan case 4 akan dieksekusi jika
jenis derau yang dipilih secara berturut-turut adalah Poisson, Salt & Pepper, dan
Speckle . Citra yang sudah ditambahkan derau disimpan pada variabel derau . Citra hasil
penambahan derau akan ditampilkan pada axes3 dengan menggunakan fungsi
MATLAB imshow .4.1.4 Kontrol tombol Rotasi
Tombol ini digunakan untuk melakukan rotasi terhadap citra hasil pengaburan
dan berderau. Proses rotasi dilakukan guna menguji kinerja dari tapis dalam melakukan
penekanan derau (proses restorasi).Gambar 4.6 Kontrol tombol RotasiProses rotasi melibatkan dua kontrol utama yaitu Push Button dan Edit Text
yang digunakan untuk menentukan besar sudut rotasi dari citra hasil pengaburan dan
penambahan derau. Berikut adalah fungsi callback yang digunakan untuk melakukan
proses rotasi citra. function tombolRotasi_Callback(hObject, eventdata, handles) % hObject handle to tombolRotasi (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)I_derau = getimage(handles.axes3);
% Mendefinisikan sudut
sudut = str2double(get(handles.editSudut, 'String' )); derau =imrotate(I_derau,sudut); axes(handles.axes3) imshow(derau); title( 'Citra Hasil Rotasi' );
Proses rotasi dilakukan dengan mengambil citra hasil pengaburan dan berderau yang ditampilkan pada axes3 dengan menggunakan fungsi MATLAB getimage.
I_derau = getimage(handles.axes3);
getimage Citra yang telah dibaca menggunakan fungsi MATLAB disimpan
pada variabel I_derau . Setelah pembacaan citra, dilakukan pengambilan nilai variansi
yang dimasukkan melalui kontrol Edit Text dengan menggunakan perintah berikut ini.% Mendefinisikan sudut
sudut = str2double(get(handles.editSudut, 'String' ));
Nilai sudut yang dimasukkan melalui editSudut diambil dengan menggunakan
fungsi get dan dikonversi menjadi tipe data double menggunakan fungsi MATLAB
str2doubleI_derau . Proses rotasi terhadap citra yang tersimpan pada variabel imrotate dilakukan dengan menggunakan fungsi MATLAB .
derau =imrotate(I_derau,sudut); axes(handles.axes3) imshow(derau); title( 'Citra Hasil Rotasi' );
I_derau Fungsi imrotate melewatkan dua buah parameter yaitu selaku citra sudut
yang akan dirotasi dan yang merupakan besar sudut rotasi perputaran citra. Hasil
derau axes 3 rotasi citra disimpan pada variabel yang kemudian ditampilkan padaimshow
dengan menggunakan fungsi MATLAB .4.1.5 Kontrol tombol Skala Intensitas
Kontrol ini digunakan untuk melakukan penskalaan intensitas dari piksel-piksel
pada citra yang telah dikaburkan dan ditambahkan derau. Proses penskalaan intesitas ini
ditujukan guna menguji kinerja dari tapis dalam melakukan restorasi citra.Gambar 4.7 Kontrol tombol Skala Intensitas
Proses penskalaan intensitas citra melibatkan dua buah kontrol utama yaitu Push Button
dan Edit Text yang digunakan untuk menentukan faktor penskalaan yang digunakan.
Berikut adalah fungsi callback tombol Skala Intensitas pada program. function tombolIntensitas_Callback(hObject, eventdata, handles) % hObject handle to tombolIntensitas (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)I_kabur1 = getimage(handles.axes3);
% Mendefinisikan faktor
faktor = str2double(get(handles.editFaktor, 'String' )); derau2 =I_kabur1/faktor; axes(handles.axes3) imshow(derau2); title( 'Citra 2' );
Proses penskalaan intensitas citra dilakukan dengan mengambil nilai faktor yang ditentukan pada Edit Text dengan menggunakan perintah berikut ini.
% Mendefinisikan faktor
faktor = str2double(get(handles.editFaktor, 'String' ));
Nilai faktor yang dimasukkan pada Edit Text editFaktor diambil menggunakan
fungsi get dan dikonversi menjadi tipe data double menggunakan fungsi MATLAB
str2double . Hasil konversi nilai faktor penskalaan disimpan pada variabel faktor.
Proses penskalaan dilakukan dengan membagi tiap intensitas piksel pada citra dengan
faktor yang telah dimasukkan.derau2 =I_kabur1/faktor; axes(handles.axes3) imshow(derau2); title( 'Citra 2' );
Hasil penskalaan citra disimpan pada variabel derau2 dan ditampilan pada axes3 menggunakan fungsi MATLAB imshow .
4.1.6 Kontrol Penapisan Frekuensi Cut-Off Butterworth Lowpass
Kontrol ini digunakan untuk melakukan operasi penapisan Butterworth pada
bidang frekuensi lowpass. Proses ini melibatkan tujuh buah kontrol Radio Button yang
dikelompokkan menggunakan kontrol Button Group. Setiap kontrol Radio Button
mereferesentasikan besar frekuensi cut-off yang digunakan. Pada kasus ini frekuensi cut-
off yang digunakan adalah 50 Hz, 100 Hz, 150 Hz, 200 Hz, 250 Hz, 500 Hz, 1000 Hz.
Gambar 4.8 Kontrol penafisan frekuansi cut-off Butterworth lowpassPada bidang pelewatan Butterworth Lowpass Filter disana menggunakan
frekuensi cut-off 50 Hz, 100 Hz, 150 Hz, 200 Hz, 250 Hz, 500 Hz dan 1000 Hz,
masing-masing frekuensi cut-off ditentukan secara manual dan memiliki rentang 50 Hz
dari setiap frekuensi cut-off. Kecuali, frekuensi cut-off 250 Hz, 500 Hz dan 1000 Hz.Berikut adalah fungsi callback yang digunakan untuk melakukan penapisan Butterworth pada bidang frekuensi lowpass. function uipanel21_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel21 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) %Semula = getimage(handles.axes1);
set(handles.tombolEvaluasiHighPass, 'Enable' , 'off' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'off' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'off' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'on' ); I=getimage(handles.axes1); [baris, kolom, banyakKanal] = size(I);
if banyakKanal ==1
Semula=I;
else
Semula=rgb2gray(I);
end
oimg1=getimage(handles.axes3);
switch get(eventdata.NewValue, 'Tag' ) case 'rad50'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 50 Hz' ; [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,50,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad100'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 100 Hz' ; [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,100,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad150'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 150 Hz' ; [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,150,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad200'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 200 Hz' [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,200,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad250'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 250 Hz' [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,250,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad500'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 500 Hz' [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,500,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad1000'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 1000 Hz' [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,1000,4); axes(handles.axes2) imshow(hasil);title(judul)
end %citra error
[m,n]=size(Semula); hasil = imresize(hasil,[m n]);
% Normalisasi dari double ke uint8 %hasil = 255*hasil;
imd = double(Semula)-double(hasil); axes(handles.axes4); imshow(imd,[]); title( 'Citra Error' ); figure, subplot(2,2,1) imshow(I,[]); title( 'Citra Masukan' ) subplot(2,2,2) imshow(fftI,[]) title( 'Citra Pada Domain Frekuensi' ) subplot(2,2,3) imshow(filterKeluaran,[]) title( 'Citra Tapis Butterworth' ) subplot(2,2,4) imshow(hasil,[]) title( 'Citra Tertapis' )
Proses penafisan Butterworth pada bidang frekuensi lowpass dimulai dengan
mengaktifkan tombol EVALUASI BUTTERWORTH LOWPASS dan menonaktifkan
tombol EVALUASI BUTTERWORTH BANDPASS, tombol EVALUASI
BUTTERWORTH HIGHPASS, dan tombol EVALUASI BUTTERWORTH
BANDSTOP.set(handles.tombolEvaluasiHighPass, 'Enable' , 'off' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'off' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'off' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'on' );
Langkah selanjutnya adalah melakukan pembacaan citra asli dan citra hasil
pengaburan dan berderau yang terdapat pada axes1 dan axes3 dengan menggunakan
perintah berikut ini.I=getimage(handles.axes1); [baris, kolom, banyakKanal] = size(I);
if banyakKanal ==1
Semula=I;
else
Semula=rgb2gray(I);
end
oimg1=getimage(handles.axes3);
Hasil pembacaa citra masukan asli dilakukan dengan menggunakan fungsi
MATLAB getimage dan disimpan pada variabel I. Apabila citra asli memiliki tiga
kanal maka akan dilakukan proses konvesi dari RGB menjadi citra grayscale
menggunakan fungsi MATLAB rgb2gray . Adapun citra hasil pengaburan dan berderau
disimpan pada variabel oimg1. Pengambilan citra asli dilakukan untuk menghitung
error citra hasil penapisan terhadap citra asli.Proses penapisan pada bidang frekuensi lowpass melibatkan statement switch-
case untuk menentukan besar frekuensi cut-off berdasarkan pilihan yang ditentukan.
Setiap case mereferesentasikan nilai freuensi cut-off yang terdapat pada Button Group switch get(eventdata.NewValue, 'Tag' ) case 'rad50'judul= 'Hasil Butterworth Lowpass Frek Cut-off 50 Hz' ; [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,50,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad100'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 100 Hz' ; [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,100,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad150'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 150 Hz' ; [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,150,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad200'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 200 Hz' [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,200,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad250'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 250 Hz'
[fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,250,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad500'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 500 Hz' [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,500,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rad1000'
judul= 'Hasil Butterworth Lowpass Frek Cut-off 1000 Hz' [fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,1000,4); axes(handles.axes2) imshow(hasil);title(judul)
end Apabila frekuensi cut-off yang dipilih adalah 50 Hz maka statemen yang
dieksekusi adalah statement yang terdapat pada case ‘rad50’. Dan Begitu seterusnya
untuk frekuensi-frekuensi cut-off lainnya yang diwakili oleh tiap case. Proses penfisan
Butterworth dilakukan menggunakan fungsi butterworthlpf. function [fftI, filterKeluaran,citra_tertapis] =butterworthlpf(I,d0,n)
% Tapis Lowpass Butterworth % % I = Citra masukan % d0 = Frekuensi cutoff rendah % d1 = Frekuensi cutoff tinggi % n = orde tapis % % Kegunaan BUTTERWORTHBPF(I,DO,D1,N) % Contoh % ima = imread('grass.jpg'); % ima = rgb2gray(ima); % filtered_image = butterworthbpf(ima,30,120,4);
f = double(I); [nx ny] = size(f); f = uint8(f); fftI = fft2(f,2*nx-1,2*ny-1); fftI = fftshift(fftI);
% Menginisialisasi tapis.
filter1 = ones(2*nx-1,2*ny-1); filter2 = ones(2*nx-1,2*ny-1); filter3 = ones(2*nx-1,2*ny-1);
for i = 1:2*nx-1 for j =1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Menciptakan Tapis Butterworth %filter1(i,j)= 1/(1 + (dist/d1)^(2*n));
filter2(i,j) = 1/(1 + (dist/d0)^(2*n));
%filter3(i,j)= 1.0 - filter2(i,j); %filter3(i,j) = filter1(i,j).*filter3(i,j); end end
% Memperbarui citra dengan frekuensi-frekuensi yang dilewatkan
citra_tertapis = filter2.*fftI; citra_tertapis = ifftshift(citra_tertapis); citra_tertapis = ifft2(citra_tertapis,2*nx-1,2*ny-1); citra_tertapis = real(citra_tertapis(1:nx,1:ny)); citra_tertapis = uint8(citra_tertapis); fftI = 20*log(fftI); filterKeluaran = 20*log(filter2);
Fungsi butterworthlpf melewatkan tiga buah parameter/argumen yaitu citra
yang akan ditapis, frekuensi cut-off dan jumlah orde dari proses penafisan. Fungsi ini
memiliki tiga output yaitu nilai FFT dari citra, tapis keluaran dan citra hasil penapisan.
fftI, filterKeluaran, hasil] = butterworthlpf(oimg1,50,4); axes(handles.axes2) imshow(hasil);title(judul)
Citra hasil penafisan disimpan pada variabel hasil dan ditampilkan pada axes2
imshow
dengan menggunakan fungsi MATLAB .4.1.7 Kontrol Penapisan Frekuensi Cut-Off Butterworth Bandpass
Kontrol ini digunakan untuk melakukan operasi penapisan Butterworth pada
bidang frekuensi bandpass. Proses ini melibatkan tujuh buah kontrol Radio Button yang
dikelompokkan menggunakan kontrol Button Group. Setiap kontrol Radio Button
mereferesentasikan besar frekuensi cut-off yang digunakan. Pada kasus ini frekuensi
cut-off yang digunakan adalah 5|100 Hz, 100|200 Hz, 150|250 Hz, 200|350 Hz, 250|400 Hz, 500|700 Hz, 1000|1500 Hz. Gambar 4.9 Kontrol penafisan frekuansi cut-off Butterworth bandpassPada bidang pelewatan Butterworth Bandpass Filter disana menggunakan
frekuensi cut-off 5|100 Hz, 100|200 Hz, 150|250 Hz, 200|350 Hz, 250|400 Hz, 500|700
Hz dan 1000|1500 Hz, masing-masing frekuensi cut-off ditentukan secara manual
frekuensi cut-off bawah dan atasnya. Contoh, frekuensi cut-off 5|100 Hz merupakan
frekuensi cut-off dengan frekuensi cut-off bawah 5 Hz dan frekuensi cut-off atas 100
Hz.Berikut adalah fungsi callback yang digunakan untuk melakukan penapisan Butterworth pada bidang frekuensi bandpass. function uipanel25_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel25 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA)
set(handles.tombolEvaluasiLowPass, 'Enable' , 'off' ); set(handles.tombolEvaluasiHighPass, 'Enable' , 'off' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'off' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'on' ); I=getimage(handles.axes1); [baris, kolom, banyakKanal] = size(I);
if banyakKanal ==1
Semula=I;
else
Semula=rgb2gray(I);
end oimg1=getimage(handles.axes3);
switch get(eventdata.NewValue, 'Tag' ) case 'rb5'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 5|100 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,5,100,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rb100'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 100|200 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,100,200,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb150'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 150|250 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,150,250,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb200'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 200|350 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,200,350,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb250'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 250|400 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,250,400,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb500'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 400|700 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,400,700,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb1000'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 1000|1500 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,1000,1500,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
end %citra error
[m,n]=size(Semula); hasil = imresize(hasil,[m n]);
% Normalisasi dari double ke uint8
imd = double(Semula)-double(hasil); axes(handles.axes4); imshow(imd,[]); title( 'Citra Error' ); figure, subplot(2,2,1) imshow(I,[]); title( 'Citra Masukan' ) subplot(2,2,2) imshow(fftI,[]) title( 'Citra Pada Domain Frekuensi' ) subplot(2,2,3) imshow(filterKeluaran,[]) title( 'Citra Tapis Butterworth' ) subplot(2,2,4) imshow(uint8(hasil),[]) title( 'Citra Tertapis' )
switch-
Proses penapisan pada bidang frekuensi bandpass melibatkan statemen
case untuk menentukan besar frekuensi cut-off berdasarkan pilihan yang ditentukan.
Setiap case mereferesentasikan nilai freuensi cut-off yang terdapat pada Button Group switch get(eventdata.NewValue, 'Tag' ) case 'rb5'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 5|100 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,5,100,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rb100'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 100|200 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,100,200,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb150'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 150|250 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,150,250,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb200'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 200|350 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,200,350,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb250'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 250|400 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,250,400,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
case 'rb500'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 400|700 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,400,700,4); axes(handles.axes2) imshow(uint8(hasil));title(judul) case 'rb1000'
judul= 'Hasil Butterworth Bandpass Frek Cut-off 1000|1500 Hz' [fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,1000,1500,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)
end Apabila frekuensi cut-off yang dipilih adalah 50|100 Hz maka statemen yang
dieksekusi adalah statement yang terdapat pada case ‘rad50’. Dan Begitu seterusnya
untuk frekuensi-frekuensi cut-off lainnya yang diwakili oleh tiap case. Proses penfisan
Butterworth pada bidang frekuensi bandpass dilakukan menggunakan fungsi
butterworthbpf. function [fftI, filterKeluaran,citra_tertapis] =butterworthbpf(I,d0,d1,n)
% Tapis Bandpass Butterworth % % I = Citra masukan % d0 = Frekuensi cutoff rendah % d1 = Frekuensi cutoff tinggi % n = orde tapis % % Kegunaan BUTTERWORTHBPF(I,DO,D1,N) % Contoh % ima = imread('grass.jpg'); % ima = rgb2gray(ima); % filtered_image = butterworthbpf(ima,30,120,4);
f = double(I); [nx ny] = size(f); f = uint8(f); fftI = fft2(f,2*nx-1,2*ny-1); fftI = fftshift(fftI);
% Menginisialisasi tapis.
filter1 = ones(2*nx-1,2*ny-1); filter2 = ones(2*nx-1,2*ny-1); filter3 = ones(2*nx-1,2*ny-1);
for i = 1:2*nx-1 for j =1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Menciptakan Tapis Butterworth
filter1(i,j)= 1/(1 + (dist/d1)^(2*n)); filter2(i,j) = 1/(1 + (dist/d0)^(2*n)); filter3(i,j)= 1.0 - filter2(i,j); filter3(i,j) = filter1(i,j).*filter3(i,j);
end end % Memperbarui citra dengan frekuensi-frekuensi yang dilewatkan
citra_tertapis = filter3.*fftI; citra_tertapis = ifftshift(citra_tertapis); citra_tertapis = ifft2(citra_tertapis,2*nx-1,2*ny-1); citra_tertapis = real(citra_tertapis(1:nx,1:ny)); citra_tertapis = uint8(citra_tertapis); fftI = 20*log(fftI); filterKeluaran = 20*log(filter3);
butterworthbpf Fungsi melewatkan empat buah parameter/argumen yaitu citra
yang akan ditapis, frekuensi cut-off awal, frekuensi cut-off akhir dan jumlah orde dari
proses penafisan. Fungsi ini memiliki tiga output yaitu nilai FFT dari citra, tapis
keluaran dan citra hasil penapisan.[fftI, filterKeluaran,hasil] = butterworthbpf(oimg1,5,100,4); axes(handles.axes2) imshow(hasil);title(judul)
Citra hasil penafisan disimpan pada variabel hasil dan ditampilkan pada axes2 dengan menggunakan fungsi MATLAB imshow .
4.1.8 Kontrol Penapisan Frekuensi Cut-Off Butterworth Highpass
Kontrol ini digunakan untuk melakukan operasi penapisan Butterworth pada
bidang frekuensi highpass. Proses ini melibatkan tujuh buah kontrol Radio Button yang
dikelompokkan menggunakan kontrol Button Group. Setiap kontrol Radio Button
mereferesentasikan besar frekuensi cut-off yang digunakan. Pada kasus ini frekuensi
cut-off yang digunakan adalah 50 Hz, 100 Hz, 150 Hz, 200 Hz, 250 Hz, 500 Hz, 1000
Hz. Gambar 4.10 Kontrol penafisan frekuansi cut-off Butterworth highpass Pada bidang pelewatan Butterworth Highpass Filter disana menggunakanfrekuensi cut-off 50 Hz, 100 Hz, 150 Hz, 200 Hz, 250 Hz, 500 Hz dan 1000 Hz,
masing-masing frekuensi cut-off ditentukan secara manual dan memiliki rentang 50 Hz
dari setiap frekuensi cut-off. Kecuali, frekuensi cut-off 250 Hz, 500 Hz dan 1000 Hz.Berikut adalah fungsi callback yang digunakan untuk melakukan penapisan Butterworth pada bidang frekuensi highpass. function uipanel31_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel31
% eventdata structure with the following fields (see UIBUTTONGROUP)
% EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) %Semula = getimage(handles.axes1);set(handles.tombolEvaluasiHighPass, 'Enable' , 'on' ); set(handles.tombolEvaluasiBandStop, 'Enable' , 'off' ); set(handles.tombolEvaluasiBandPass, 'Enable' , 'off' ); set(handles.tombolEvaluasiLowPass, 'Enable' , 'off' ); I=getimage(handles.axes1); [baris, kolom, banyakKanal] = size(I);
if banyakKanal ==1
Semula=I;
else
Semula=rgb2gray(I);
end
oimg1=getimage(handles.axes3);
switch get(eventdata.NewValue, 'Tag' ) case 'rm50'
judul= 'Hasil Butterworth HighPass Frek Cut-off 50 Hz' ; [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,50,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rm100'
judul= 'Hasil Butterworth HighPass Frek Cut-off 100 Hz' ; [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,100,4); axes(handles.axes2) imshow(hasil);title(judul)
case 'rm150'
judul= 'Hasil Butterworth HighPass Frek Cut-off 150 Hz' ; [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,150,4); axes(handles.axes2) imshow(hasil);title(judul)