BAB 4 PEMBAHASAN 4.1 Realisasi GUI Program - PERANCANGAN TAPIS BUTTERWORTH UNTUK MERESTORASI CITRA DIGITAL - Repository UNRAM

Gratis

0
0
68
10 months ago
Preview
Full text

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 program

  Pada 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 evaluasi

  Pada 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 Citra

  Berikut 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. global

  I 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 Pengaburan

  Proses 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 banyakKanal

variabel 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 ==1

  imggray=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' ) 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

  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 Derau

  Proses 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

str2double

fungsi 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 Rotasi

  Proses 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

str2double

  I_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 pada

imshow

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 lowpass

  Pada 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 bandpass

  Pada 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 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 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)

  case 'rm200'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 200 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,200,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rm250'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 250 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,250,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rm500'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 500 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,500,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rm1000'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 1000 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(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 penapisan pada bidang frekuensi highpass 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 '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)

  case 'rm200'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 200 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,200,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rm250'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 250 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,250,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rm500'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 500 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(oimg1,500,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rm1000'

  judul= 'Hasil Butterworth HighPass Frek Cut-off 1000 Hz' [fftI, filterKeluaran, hasil] = butterworthhpf(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 pada bidang frekuensi highpass dilakukan menggunakan fungsi

butterworthhpf . function [fftI, filterKeluaran,citra_tertapis] =

  butterworthhpf(I,d1,n)

  % Tapis Highpass 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 - filter1(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);

  Fungsi butterworthhpf 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] = butterworthhpf(oimg1,50,4); axes(handles.axes2) imshow(hasil);title(judul)

  

Citra hasil penafisan disimpan pada variabel hasil dan ditampilkan pada axes2 dengan

imshow menggunakan fungsi MATLAB .

4.1.9 Kontrol Penapisan Frekuensi Cut-Off Butterworth Bandstop

  Kontrol ini digunakan untuk melakukan operasi penapisan Butterworth pada

bidang frekuensi bandstop. 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.11 Kontrol penafisan frekuansi cut-off Butterworth bandstop

  Pada bidang pelewatan Butterworth Bandstop 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 bandstop. function uipanel29_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel29 % 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' , 'on' ); set(handles.tombolEvaluasiBandPass, '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 'rt5'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 5|100 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,5,100,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rt100'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 100|200 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,100,200,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt150'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 150|250 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,150,250,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt200'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 200|350 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,200,350,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt250'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 250|400 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,250,400,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt500'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 400|700 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,400,700,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt1000'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 1000|1500 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(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' )

  Proses penapisan pada bidang frekuensi bandstop melibatkan statemen 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 'rt5'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 5|100 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,5,100,4); axes(handles.axes2) imshow(hasil);title(judul)

  case 'rt100'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 100|200 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,100,200,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt150'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 150|250 Hz' ; [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,150,250,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt200'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 200|350 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,200,350,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt250'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 250|400 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,250,400,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt500' judul= 'Hasil Butterworth Bandstop Frek Cut-off 400|700 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,400,700,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  case 'rt1000'

  judul= 'Hasil Butterworth Bandstop Frek Cut-off 1000|1500 Hz' [fftI, filterKeluaran,hasil] = butterworthbspf(oimg1,1000,1500,4); axes(handles.axes2) imshow(uint8(hasil));title(judul)

  end Apabila frekuensi cut-off yang dipilih adalah 50 Hz maka statement 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 bandstop dilakukan menggunakan fungsi

butterworthbspf . function [fftI, filterKeluaran,citra_tertapis] =

  butterworthbspf(I,d0,d1,n)

  % Tapis Band-Stop 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); filter3(i,j) = 1.0 - 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);

  Fungsi butterworthbspf 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] = butterworthhpf(oimg1,50,4); axes(handles.axes2) imshow(hasil);title(judul)

  

Citra hasil penafisan disimpan pada variabel hasil dan ditampilkan pada axes2 dengan

imshow menggunakan fungsi MATLAB .

4.1.10 Kontrol Tombol EVALUASI BUTTERWORTH LOWPASS

  Tombol ini digunakan untuk melihat kinerja tapis Butterworth lowpass terhadap

seluruh frekuensi cut-off yang ada. Parameter-parameter evaluasi yang digunakan

adalah RMSE, PFE, MAE, CORR, SNR, PSNR, MI, QI, dan SSIM.

Gambar 4.12 Kontrol tombol EVALUASI BUTTERWORTH LOWPASS

  Berikut adalah fungsi callback tombol EVALUASI BUTTERWORTH LOWPASS. function tombolEvaluasiLowPass_Callback(hObject, eventdata, handles) % hObject handle to tombolEvaluasiLowPass (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

  I=im2double(getimage(handles.axes1)); [baris, kolom, banyakKanal] = size(I);

  if banyakKanal ==1

  Semula=I;

  else

  Semula=rgb2gray(I);

  end % Frek Cut-Off 50

  oimg1=getimage(handles.axes3); [fftI1, filterKeluaran1, hasil1] = butterworthlpf(oimg1,50,4);

  % Frek Cut-Off 100

  [fftI2, filterKeluaran2, hasil2] = butterworthlpf(oimg1,100,4);

  % Frek Cut-Off 150

  [fftI3, filterKeluaran3, hasil3] = butterworthlpf(oimg1,150,4);

  % Frek Cut-Off 200

  [fftI4, filterKeluaran4, hasil4] = butterworthlpf(oimg1,200,4);

  % Frek Cut-Off 250

  [fftI5, filterKeluaran5, hasil5] = butterworthlpf(oimg1,250,4);

  % Frek Cut-Off 500

  [fftI6, filterKeluaran6, hasil6] = butterworthlpf(oimg1,500,4);

  % Frek Cut-Off 1000

  [fftI7, filterKeluaran7, hasil7] = butterworthlpf(oimg1,1000,4);

  % metrik-metrik evaluasi kualitas citra

  [m,n]=size(Semula); hasil1 = imresize(hasil1,[m n]); hasil2 = imresize(hasil2,[m n]); hasil3 = imresize(hasil3,[m n]); hasil4 = imresize(hasil4,[m n]); hasil5 = imresize(hasil5,[m n]); hasil6 = imresize(hasil6,[m n]); hasil7 = imresize(hasil7,[m n]); oimg1 = imresize(oimg1,[m n]); size(oimg1) size(Semula) size(hasil1) [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil1)); [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil2)); [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil3)); [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil4)); [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil5)); [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil6)); [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil7)); t = handles.uitable4; d1 = [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1]; d2 = [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2]; d3 = [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3]; d4 = [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4]; d5 = [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5]; d6 = [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6]; d7 = [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7]; d = [d1;d2; d3; d4; d5; d6; d7]; set(t, 'Data' ,d); set(t, 'ColumnName' ,{ 'RMSE |(Root Mean Square Error)' ; 'PFE |(Persentage Fit Error)' ; 'MAE |(Mean Absolute Error)' ; 'CORR| (Correlation)' ; ...

  'SNR |(Signal to Noise Ratio' ; 'PSNR |(Peak Signal to Noise Ratio)' ; 'MI | (Mutual Information)' ; 'QI| (Quality Index)' ; ... 'SSIM| (Measure of Structural Similarity)' ;})

  set(t, 'RowName' ,{ '50 Hz' ; '100 Hz' ; '150 Hz' ; '200 Hz' ; '250 Hz' ; '500

  Hz' ; '1000 Hz' }); %Menampilkan grafik

  z=1:9; axes(handles.axes11); plot(z',d1, z',d2, z',d3, z',d4, z',d5, z',d6, z',d7); title( 'Grafik

  Kinerja TAPIS BUTTERWORTH LOWPASS' ); grid on ;

  legend( '50 Hz' , '100 Hz' , '150 Hz' , '200 Hz' , '250 Hz' , '500 Hz' ,

  '1000 Hz' )

  set(gca, 'XTick' ,1:9) set(gca, 'XTickLabel' ,{ 'RMSE' , 'PFE' , 'MAE' , 'CORR' , 'SNR' , 'PSNR' , 'MI' , 'QI' , 'SSIM' }); save d1.mat d1 ; save d2.mat d2 ; save d3.mat d3 ; save d4.mat d4 ; save d5.mat d5 ; save d6.mat d6 ; save d7.mat d7 ;

4.1.11 Kontrol Tombol EVALUASI BUTTERWORTH BANDPASS

  Tombol ini digunakan untuk melihat kinerja tapis Butterworth bandpass

terhadap seluruh frekuensi cut-off yang ada. Parameter-parameter evaluasi yang

digunakan adalah RMSE, PFE, MAE, CORR, SNR, PSNR, MI, QI, dan SSIM.

Gambar 4.13 Kontrol tombol EVALUASI BUTTERWORTH BANDPASS

  Berikut adalah fungsi callback yang terdapat pada tombol EVALUASI BUTTERWORTH BANDPASS. function tombolEvaluasiBandPass_Callback(hObject, eventdata, handles) % hObject handle to tombolEvaluasiBandPass (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %set(handles.tombolEvaluasiLowPass,'Enable','on'); %set(handles.tombolEvaluasiBandPass,'Enable','off');

  I=im2double(getimage(handles.axes1)); [baris, kolom, banyakKanal] = size(I);

  if banyakKanal ==1

  Semula=I;

  else

  Semula=rgb2gray(I);

  end % Frek Cut-Off 5|100

  oimg1=getimage(handles.axes3); [fftI1, filterKeluaran1, hasil1] = butterworthbpf(oimg1,5,100,4);

  % Frek Cut-Off 100|200

  [fftI2, filterKeluaran2, hasil2] = butterworthbpf(oimg1,100,200,4);

  % Frek Cut-Off 150|250

  [fftI3, filterKeluaran3, hasil3] = butterworthbpf(oimg1,150,250,4);

  % Frek Cut-Off 200|350

  [fftI4, filterKeluaran4, hasil4] = butterworthbpf(oimg1,200,350,4);

  % Frek Cut-Off 250|400

  [fftI5, filterKeluaran5, hasil5] = butterworthbpf(oimg1,250,400,4);

  % Frek Cut-Off 500|700

  [fftI6, filterKeluaran6, hasil6] = butterworthbpf(oimg1,500,700,4);

  % Frek Cut-Off 1000|1500

  [fftI7, filterKeluaran7, hasil7] = butterworthbpf(oimg1,1000,1500,4);

  % metrik-metrik evaluasi kualitas citra

  [m,n]=size(Semula); hasil1 = imresize(hasil1,[m n]); hasil2 = imresize(hasil2,[m n]); hasil3 = imresize(hasil3,[m n]); hasil4 = imresize(hasil4,[m n]); hasil5 = imresize(hasil5,[m n]); hasil6 = imresize(hasil6,[m n]); hasil7 = imresize(hasil7,[m n]); oimg1 = imresize(oimg1,[m n]); size(oimg1) size(Semula) size(hasil1) [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil1)); [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil2)); [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil3)); [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil4)); [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil5)); [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil6)); [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil7)); t = handles.uitable4; d1 = [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1]; d2 = [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2]; d3 = [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3]; d4 = [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4]; d5 = [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5]; d6 = [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6]; d7 = [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7]; d = [d1;d2; d3; d4; d5; d6; d7]; set(t, 'Data' ,d); set(t, 'ColumnName' ,{ 'RMSE |(Root Mean Square Error)' ; 'PFE |(Persentage Fit Error)' ; 'MAE |(Mean Absolute Error)' ; 'CORR| (Correlation)' ; ...

  'SNR |(Signal to Noise Ratio' ; 'PSNR |(Peak Signal to Noise Ratio)' ; 'MI | (Mutual Information)' ; 'QI| (Quality Index)' ; ... 'SSIM| (Measure of Structural Similarity)' ;})

  set(t, 'RowName' ,{ '5|100 Hz' ; '100|200 Hz' ; '150|250 Hz' ; '200|350 Hz' ;

  '250|400 Hz' ; '500|700 Hz' ; '1000|1500 Hz' }); %Menampilkan grafik

  z=1:9; axes(handles.axes11); plot(z',d1, z',d2, z',d3, z',d4, z',d5, z',d6, z',d7); title( 'Grafik

  Kinerja TAPIS BUTTERWORTH BANDPASS' ); grid on ;

  legend( '5|100 Hz' , '100|200 Hz' , '150|250 Hz' , '200|350 Hz' , '250|400

  Hz' , '500|700 Hz' , '1000|1500 Hz' )

  set(gca, 'XTick' ,1:9) set(gca, 'XTickLabel' ,{ 'RMSE' , 'PFE' , 'MAE' , 'CORR' , 'SNR' , 'PSNR' , 'MI' , 'QI' , 'SSIM' }); save d1.mat d1 ; save d2.mat d2 ; save d3.mat d3 ; save d4.mat d4 ; save d5.mat d5 ; save d6.mat d6 ; save d7.mat d7 ;

4.1.12 Kontrol Tombol EVALUASI BUTTERWORTH HIGHPASS

  Tombol ini digunakan untuk melihat kinerja tapis Butterworth highpass terhadap

seluruh frekuensi cut-off yang ada. Parameter-parameter evaluasi yang digunakan

adalah RMSE, PFE, MAE, CORR, SNR, PSNR, MI, QI, dan SSIM.

Gambar 4.14 Kontrol tombol EVALUASI BUTTERWORTH HIGHPASS

  Berikut adalah fungsi callback dari tombol EVALUASI BUTTERWORTH HIGHPASS. function tombolEvaluasiHighPass_Callback(hObject, eventdata, handles) % hObject handle to tombolEvaluasiHighPass (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

  I=im2double(getimage(handles.axes1)); [baris, kolom, banyakKanal] = size(I);

  if banyakKanal ==1

  Semula=I;

  else

  Semula=rgb2gray(I);

  end % Frek Cut-Off 50

  oimg1=getimage(handles.axes3); [fftI1, filterKeluaran1, hasil1] = butterworthhpf(oimg1,50,4);

  % Frek Cut-Off 100

  [fftI2, filterKeluaran2, hasil2] = butterworthhpf(oimg1,100,4);

  % Frek Cut-Off 150

  [fftI3, filterKeluaran3, hasil3] = butterworthhpf(oimg1,150,4);

  % Frek Cut-Off 200

  [fftI4, filterKeluaran4, hasil4] = butterworthhpf(oimg1,200,4);

  % Frek Cut-Off 250

  [fftI5, filterKeluaran5, hasil5] = butterworthhpf(oimg1,250,4);

  % Frek Cut-Off 500

  [fftI6, filterKeluaran6, hasil6] = butterworthhpf(oimg1,500,4);

  % Frek Cut-Off 1000

  [fftI7, filterKeluaran7, hasil7] = butterworthhpf(oimg1,1000,4);

  % metrik-metrik evaluasi kualitas citra

  [m,n]=size(Semula); hasil1 = imresize(hasil1,[m n]); hasil2 = imresize(hasil2,[m n]); hasil3 = imresize(hasil3,[m n]); hasil4 = imresize(hasil4,[m n]); hasil5 = imresize(hasil5,[m n]); hasil6 = imresize(hasil6,[m n]); hasil7 = imresize(hasil7,[m n]); oimg1 = imresize(oimg1,[m n]); size(oimg1) size(Semula) size(hasil1) [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil1)); [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil2)); [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil3)); [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil4)); [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil5)); [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil6)); [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil7)); t = handles.uitable4; d1 = [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1]; d2 = [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2]; d3 = [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3]; d4 = [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4]; d5 = [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5]; d6 = [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6]; d7 = [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7]; d = [d1;d2; d3; d4; d5; d6; d7]; set(t, 'Data' ,d); set(t, 'ColumnName' ,{ 'RMSE |(Root Mean Square Error)' ; 'PFE |(Persentage Fit Error)' ; 'MAE |(Mean Absolute Error)' ; 'CORR| (Correlation)' ; ...

  'SNR |(Signal to Noise Ratio' ; 'PSNR |(Peak Signal to Noise Ratio)' ; 'MI | (Mutual Information)' ; 'QI| (Quality Index)' ; ... 'SSIM| (Measure of Structural Similarity)' ;})

  set(t, 'RowName' ,{ '50 Hz' ; '100 Hz' ; '150 Hz' ; '200 Hz' ; '250 Hz' ; '500

  Hz' ; '1000 Hz' }); %Menampilkan grafik

  z=1:9; axes(handles.axes11); plot(z',d1, z',d2, z',d3, z',d4, z',d5, z',d6, z',d7); title( 'Grafik

  Kinerja TAPIS BUTTERWORTH HIGHPASS' ); grid on ;

  legend( '50 Hz' , '100 Hz' , '150 Hz' , '200 Hz' , '250 Hz' , '500 Hz' ,

  '1000 Hz' )

  set(gca, 'XTick' ,1:9) set(gca, 'XTickLabel' ,{ 'RMSE' , 'PFE' , 'MAE' , 'CORR' , 'SNR' , 'PSNR' , 'MI' , 'QI' , 'SSIM' }); save d1.mat d1 ; save d2.mat d2 ; save d3.mat d3 ; save d4.mat d4 ; save d5.mat d5 ; save d6.mat d6 ; save d7.mat d7 ;

4.1.13 Kontrol Tombol EVALUASI BUTTERWORTH BANDSTOP

  Tombol ini digunakan untuk melihat kinerja tapis Butterworth bandstop

terhadap seluruh frekuensi cut-off yang ada. Parameter-parameter evaluasi yang

digunakan adalah RMSE, PFE, MAE, CORR, SNR, PSNR, MI, QI, dan SSIM.

Gambar 4.15 Kontrol tombol EVALUASI BUTTERWORTH BANDSTOP

  Berikut adalah fungsi callback dari tombol EVALUASI BUTTERWORTH BANDSTOP. function tombolEvaluasiBandStop_Callback(hObject, eventdata, handles) % hObject handle to tombolEvaluasiBandStop (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

  I=im2double(getimage(handles.axes1)); [baris, kolom, banyakKanal] = size(I);

  if banyakKanal ==1

  Semula=I;

  else

  Semula=rgb2gray(I);

  end % Frek Cut-Off 5|100

  oimg1=getimage(handles.axes3); [fftI1, filterKeluaran1, hasil1] = butterworthbspf(oimg1,5,100,4);

  % Frek Cut-Off 100|200

  [fftI2, filterKeluaran2, hasil2] = butterworthbspf(oimg1,100,200,4);

  % Frek Cut-Off 150|250

  [fftI3, filterKeluaran3, hasil3] = butterworthbspf(oimg1,150,250,4);

  % Frek Cut-Off 200|350

  [fftI4, filterKeluaran4, hasil4] = butterworthbspf(oimg1,200,350,4);

  % Frek Cut-Off 250|400

  [fftI5, filterKeluaran5, hasil5] = butterworthbspf(oimg1,250,400,4);

  % Frek Cut-Off 500|700

  [fftI6, filterKeluaran6, hasil6] = butterworthbspf(oimg1,500,700,4);

  % Frek Cut-Off 1000|1500

  [fftI7, filterKeluaran7, hasil7] = butterworthbspf(oimg1,1000,1500,4);

  % metrik-metrik evaluasi kualitas citra

  [m,n]=size(Semula); hasil1 = imresize(hasil1,[m n]); hasil2 = imresize(hasil2,[m n]); hasil3 = imresize(hasil3,[m n]); hasil4 = imresize(hasil4,[m n]); hasil5 = imresize(hasil5,[m n]); hasil6 = imresize(hasil6,[m n]); hasil7 = imresize(hasil7,[m n]); oimg1 = imresize(oimg1,[m n]); size(oimg1) size(Semula) size(hasil1) [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil1)); [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil2)); [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil3)); [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil4)); [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil5)); [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil6)); [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7] = pereval(double(Semula),double(oimg1),double(oimg1),double(hasil7)); t = handles.uitable4; d1 = [RMSE1,PFE1,MAE1,CORR1,SNR1,PSNR1,MI1,QI1,SSIM1]; d2 = [RMSE2,PFE2,MAE2,CORR2,SNR2,PSNR2,MI2,QI2,SSIM2]; d3 = [RMSE3,PFE3,MAE3,CORR3,SNR3,PSNR3,MI3,QI3,SSIM3]; d4 = [RMSE4,PFE4,MAE4,CORR4,SNR4,PSNR4,MI4,QI4,SSIM4]; d5 = [RMSE5,PFE5,MAE5,CORR5,SNR5,PSNR5,MI5,QI5,SSIM5]; d6 = [RMSE6,PFE6,MAE6,CORR6,SNR6,PSNR6,MI6,QI6,SSIM6]; d7 = [RMSE7,PFE7,MAE7,CORR7,SNR7,PSNR7,MI7,QI7,SSIM7]; d = [d1;d2; d3; d4; d5; d6; d7]; set(t, 'Data' ,d); set(t, 'ColumnName' ,{ 'RMSE |(Root Mean Square Error)' ; 'PFE |(Persentage Fit Error)' ; 'MAE |(Mean Absolute Error)' ; 'CORR| (Correlation)' ; ...

  'SNR |(Signal to Noise Ratio' ; 'PSNR |(Peak Signal to Noise Ratio)' ; 'MI | (Mutual Information)' ; 'QI| (Quality Index)' ; ... 'SSIM| (Measure of Structural Similarity)' ;})

  set(t, 'RowName' ,{ '5|100 Hz' ; '100|200 Hz' ; '150|250 Hz' ; '200|350 Hz' ;

  '250|400 Hz' ; '500|700 Hz' ; '1000|1500 Hz' }); %Menampilkan grafik

  z=1:9; axes(handles.axes11); plot(z',d1, z',d2, z',d3, z',d4, z',d5, z',d6, z',d7); title( 'Grafik

  Kinerja TAPIS BUTTERWORTH BANDSTOP' ); grid on ;

  legend( '5|100 Hz' , '100|200 Hz' , '150|250 Hz' , '200|350 Hz' , '250|400

  Hz' , '500|700 Hz' , '1000|1500 Hz' )

  set(gca, 'XTick' ,1:9) set(gca, 'XTickLabel' ,{ 'RMSE' , 'PFE' , 'MAE' , 'CORR' , 'SNR' , 'PSNR' , 'MI' , 'QI' , 'SSIM' }); save d1.mat d1 ; save d2.mat d2 ; save d3.mat d3 ; save d4.mat d4 ; save d5.mat d5 ; save d6.mat d6 ; save d7.mat d7 ;

4.2 Pengujian Program Restorasi Citra Tapis Butterworth

4.2.1 Penapisan Butterworth Bidang Frekuensi Lowpass

  Berikut adalah proses penapisan Butterworth lowpass terhadap citra

mandrill.png dengan frekuensi cut-off 50 Hz. Pada ujicoba ini, citra diberikan derau

Gaussian dengan variansi 0.01.

Gambar 4.16 Hasil penapisan Butterworth frekuensi cut-off lowpass 50 Hz

  Berdasarkan hasil pengujian yang dilakukan, terlihat bahwa tapis Butterworth

lowpass dengan frekuensi cut-off 50 Hz menghasilkan citra hasil penapisan dengan

derau tereduksi. Hal tersebut dapat dilihat dari citra hasil yang diperoleh, dimana derau

pada citra hasil penapisan memiliki variansi yang rendah dan citra hasil penapisan

mendekati citra aslinya. Citra hasil penapisan mengalami pengaburan akibat

terbuangnya semua koefisien frekuensi citra >50 Hz, yang berkontribusi pada citra

error.

Gambar 4.17 adalah gambar yang memperlihatkan citra uji berderau dalam domain frekuensi dan citra tapis Butterworth lowpass 50 Hz, serta citra hasil penapisan.

  

Dapat dilihat bagaimana tampilan citra pada domain frekuensi dan citra dari tapis

Butterworth lowpass dengan frekuensi cutoff 50 Hz.

  Citra berderau pada domain frekuensi, yang ada di sebelah kanan atas gambar,

memiliki koefisien-koefisien yang tersebar pada seluruh bidang frekuensi, dengan

sejumlah koefisien bernilai besar terkonsentrasi di titik tengah (atau di bidang frekuensi

rendah). Citra tapis, di sebelah kiri bawah gambar, menunjukkan sebuah lingkaran putih

dengan jari-jari dalam 50 Hz.

  Gambar 4.17 Citra pada domain frekuensi dan citra tapis Butterworth lowpass 50 Hz

  

(a) (b)

(c) (d)

  (e) (f)

Gambar 4.18 Hasil penafisan Butterworth lowpass frekuensi cut-off (a) 100 Hz, (b)

  

150 Hz, (c) 200 Hz, (d) 250 Hz, (e) 500 Hz, (f) 1000 Hz Seperti terlihat pada Gambar 4.18, citra hasil penapisan lowpass dengan

frekuensi 100 Hz, 150 Hz, dan 200 Hz memiliki efek pengaburan akibat dibuangnya

koefisien-koefisien frekuensi citra yang lebih besar dari frekuensi cutoffnya. Tetapi,

derau dapat direduksi secara signifikan pada ketiga hasil penapisan tersebut. Apa yang

terjadi pada penapisan lowpass dengan frekuensi cutoff 250 Hz, 500 Hz, dan 1000 Hz

berbeda dari lainnya. Pada hasil penapisan pada ketiga frekuensi cutoff ini, citra hasil

penapisan sedikit lebih tajam, meskipun derau tampak lebih jelas.

  Berikut adalah tabel dan grafik evaluasi yang memperlihatkan kinerja tapis Butterworth lowpas s untuk tiap frekuensi cut-off.

Gambar 4.19 Tabel dan grafik evaluasi kinerja tapis Butterworth lowpass

  Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth pada Gambar

4.19 terlihat bahwa frekuensi cut-off 50 Hz memiliki nilai RMSE paling kecil dengan

nilai 131.6718, kemudian diikuti oleh frekuensi cut-off 100 Hz dengan RMSE 132.0758.

Nilai RMSE yang paling besar diperoleh pada frekuensi cut-off 100 Hz dengan nilai

134.7541. Semakin besar nilai frekuensi cut-off maka nilai RMSE yang diperoleh akan

semakin besar, meskipun dengan selisih kenaikan yang cukup kecil.

4.2.2 Penapisan Butterworth Bidang Frekuensi Bandpass

Gambar 4.20 adalah proses penapisan Butterworth bandpass terhadap citra mandrill.png dengan frekuensi cut-off 5|100 Hz. Pada ujicoba ini, citra diberikan derau

  Gaussian dengan variansi 0.01.

  Berdasarkan hasil pengujian yang dilakukan, terlihat bahwa tapis Butterworth

bandpass dengan frekuensi cutoff 5|100 Hz menghasilkan citra hasil penapisan dengan

nilai-nilai piksel yang didominasi dengan nilai rendah, yang mengakibatkan gelapnya

citra hasil penapisan. Citra hasil penapisan mengalami penggelapan akibat terbuangnya

semua koefisien frekuensi citra <5 Hz dan >100 Hz, yang berkontribusi pada citra error.

Citra error tampak memuat informasi citra akibat terbuangnya semua koefisien

frekuensi citra <5 Hz dan >100 Hz.

Gambar 4.20 Hasil penapisan Butterworth frekuensi cutoff bandpass 5|100 HzGambar 4.21 Citra pada domain frekuensi dan citra tapis Butterworth bandpass dengan

  

frekuensi cutoff 5|100 Hz

Gambar 4.21 adalah gambar yang memperlihatkan citra uji berderau dalam domain frekuensi dan citra tapis Butterworth bandpass dengan frekuensi cutoff 5|100

  

Hz, serta citra hasil penapisan. Dapat dilihat bagaimana tampilan citra pada domain

frekuensi dan citra dari tapis Butterworth bandpass dengan frekuensi cutoff 5|100 Hz.

  

Citra berderau pada domain frekuensi, yang ada di sebelah kanan atas gambar, memiliki

koefisien-koefisien yang tersebar pada seluruh bidang frekuensi, dengan sejumlah

koefisien bernilai besar terkonsentrasi di titik tengah (atau di bidang frekuensi rendah).

Citra tapis, di sebelah kiri bawah gambar, menunjukkan sebuah lingkaran putih dengan

jari-jari dalam 5 Hz dan jari-jari luar 100 Hz. Citra tertapis didominasi warna gelap,

akibat terbuangnya semua koefisien frekuensi citra <5 Hz dan >100 Hz.

  

(a) (b)

(c) (d)

  

(e) (f)

Gambar 4.22

  Hasil penafisan Butterworth bandpass frekuensi cutoff (a) 100|200 Hz,

(b) 150|250 Hz, (c) 200|350 Hz, (d) 250|400 Hz, (e) 500|700 Hz, (f) 1000|1500 Hz Seperti terlihat pada Gambar 4.22, citra hasil penapisan bandpass dengan

frekuensi 100|200 Hz, 150|250 Hz, dan 200|350 Hz memiliki efek seperti deteksi tepi,

dimana piksel-piksel terang tampak pada tepi objek. Hal ini diakibatkan oleh

dibuangnya koefisien-koefisien frekuensi citra yang lebih kecil dari frekuensi cutoff

bawah dan yang lebih besar dari frekuensi cutoff atas. Apa yang terjadi pada penapisan

bandpass dengan frekuensi cutoff 250|400 Hz, 500|700 Hz, dan 1000|1500 Hz lebih

buruk dari sebelulmnya. Pada hasil penapisan pada ketiga frekuensi cutoff ini, citra hasil

penapisan tampak tidak memuat informasi apapun, kecuali hanya piksel-piksel terang

pada posisi yang acak.

  Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth pada Gambar

4.23 terlihat bahwa frekuensi cut-off 1000|1500 Hz justru memiliki nilai RMSE paling

kecil dengan nilai 0.5342, kemudian diikuti oleh frekuensi cutoff 500|700 Hz dengan

RMSE 6.3448. Nilai RMSE yang paling besar diperoleh pada frekuensi cutoff 5|100 Hz

dengan nilai 31.1234. Semakin besar nilai frekuensi cutoff maka nilai RMSE yang

diperoleh membentuk gelombang sinusoidal yang termodulasi dengan eksponensial

menyusut.

Gambar 4.23 Tabel dan grafik evaluasi kinerja tapis Butterworth bandpass

4.2.3 Penapisan Butterworth Bidang Frekuensi Highpass

Gambar 4.24 adalah penapisan Butterworth highpass terhadap citra mandrill.png dengan frekuensi cut-off 50 Hz. Pada uji coba ini, citra diberikan derau Gaussian

  dengan variansi 0.01.

Gambar 4.24 Hasil penapisan Butterworth frekuensi cutoff highpass 50 Hz

  Berdasarkan hasil pengujian yang dilakukan, terlihat bahwa tapis Butterworth

highpass dengan frekuensi cutoff 50 Hz menghasilkan citra hasil penapisan yang

didominasi oleh piksel-piksel berwarna gelap, dengan piksel-piksel berwarna terang di

tepi-tepi objek. Hal ini diakibatkan oleh dibuangnya semua koefisien frekuensi yang

lebih kecil dari frekuensi cutoff (<50 Hz). Akibatnya, citra error justru memuat sebagian

besar informasi citra, semua koefisien frekuensi >=50 Hz berkontribusi pada citra error

tersebut. Kehadiran derau tampak nyata pada citra error, meskipun derau pada citra

error tidak lebih nyata daripada citra uji berderau.

  Gambar 4.25 Citra pada domain frekuensi dan citra tapis Butterworth highpass dengan

frekuensi cutoff 50 Hz

Gambar 4.25 merupakan gambar yang memperlihatkan citra uji berderau dalam

  

domain frekuensi dan citra tapis Butterworth bandpass dengan frekuensi cutoff 50 Hz,

serta citra hasil penapisan. Dapat dilihat bagaimana tampilan citra pada domain

frekuensi dan citra dari tapis Butterworth highpass dengan frekuensi cutoff 50 Hz.

  Citra berderau pada domain frekuensi, yang ada di sebelah kanan atas gambar,

memiliki koefisien-koefisien yang tersebar pada seluruh bidang frekuensi, dengan

sejumlah koefisien bernilai besar terkonsentrasi di titik tengah (atau di bidang frekuensi

rendah). Citra tapis, di sebelah kiri bawah gambar, menunjukkan sebuah lingkaran

hitam dengan jari-jari dalam 50 Hz. Citra tertapis didominasi warna gelap, akibat

terbuangnya semua koefisien frekuensi citra <50 Hz, yang menyebabkan tampilan

seperti mekanisme deteksi tepi. Piksel-piksel putih pada tepi-tepi objek tampak tidak

kontinyu.

  

(a) (b)

(c) (d)

  

(e) (f)

Gambar 4.26 Hasil penapisan Butterworth highpass frekuensi cutoff (a) 100 Hz, (b)

  

150 Hz, (c) 200 Hz, (d) 250 Hz, (e) 500 Hz, (f) 1000 Hz

Pada Gambar 4.26, semua citra tertapis didominasi warna gelap, akibat

terbuangnya semua koefisien frekuensi citra yang lebih kecil dari frekuensi cutoff-nya,

  

yang menyebabkan tampilan seperti mekanisme deteksi tepi. Piksel-piksel putih pada

tepi-tepi objek tampak tidak kontinyu. Dapat diperhatikan bahwa semakin besar

frekuensi cutoff yang diberikan, citra hasil penapisan memiliki piksel-piksel putih yang

semakin tidak kontinyu dan citra tersebut semakin didominasi oleh warna gelap. Dapat

diperhatikan pula bahwa citra tapis memiliki lingkaran hitam dengan radius yang lebih

besar seiring dengan bertambahnya frekuensi cutoff.

  Gambar 4.27 Tabel dan grafik RMSE untuk penapisan Butterworth highpass untuk

sejumlah frekuensi cutoff.

  Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth pada Gambar

4.27 terlihat bahwa frekuensi cut-off 1000 Hz justru memiliki nilai RMSE paling kecil

dengan nilai 0.5342, kemudian diikuti oleh frekuensi cutoff 500 Hz dengan RMSE

7.5741. Nilai RMSE yang paling besar diperoleh pada frekuensi cutoff 50 Hz dengan

nilai 26.6142. Semakin besar nilai frekuensi cutoff maka nilai RMSE yang diperoleh

menyusut secara hampir linier.

4.2.4 Penapisan Butterworth Bidang Frekuensi Bandstop

Gambar 4.28 adalah penapisan Butterworth bandstop terhadap citra mandrill.png dengan frekuensi cutoff 5|100 Hz. Pada uji coba ini, citra diberikan derau

  Gaussian dengan variansi 0.01.

  Gambar 4.28 Hasil penapisan Butterworth bandstop dengan frekuensi cutoff 5|100 Hz Berdasarkan hasil pengujian yang dilakukan, terlihat bahwa tapis Butterworth

bandpass dengan frekuensi cutoff 5|100 Hz menghasilkan citra hasil penapisan yang

didominasi oleh piksel-piksel berwarna gelap, dengan piksel-piksel berwarna terang

tersebar secara terpola mengikuti tekstur objek pada citra. Hasil ini diakibatkan oleh

dibuangnya semua koefisien frekuensi antara 5 Hz sampai 100 Hz. Akibatnya, citra

error justru memuat sebagian besar informasi citra, dimana semua koefisien frekuensi

citra <50 Hz dan >100 Hz berkontribusi pada citra error tersebut. Kehadiran derau

tampak sangat nyata pada citra error.

Gambar 4.29 merupakan gambar yang memperlihatkan citra uji berderau dalam

  

domain frekuensi dan citra tapis Butterworth bandstop dengan frekuensi cutoff 5|100

Hz, serta citra hasil penapisan. Dapat dilihat bagaimana tampilan citra pada domain

frekuensi dan citra dari tapis Butterworth bandstop dengan frekuensi cutoff 5|100 Hz.

  Gambar 4.29 Citra pada domain frekuensi dan citra tapis Butterworth bandstop dengan

frekuensi cutoff 5|100 Hz

  Citra berderau pada domain frekuensi, yang ada di sebelah kanan atas gambar,

memiliki koefisien-koefisien yang tersebar pada seluruh bidang frekuensi, dengan

sejumlah koefisien bernilai besar terkonsentrasi di titik tengah (atau di bidang frekuensi

rendah). Citra tapis, di sebelah kiri bawah gambar, menunjukkan sebuah lingkaran

hitam dengan jari-jari dalam 5 Hz dan jari-jari luar 100 Hz. Citra tertapis didominasi

warna gelap, akibat terbuangnya semua koefisien frekuensi citra antara 5 Hz sampai 100

Hz, dengan piksel-piksel berwarna terang tersebar secara terpola mengikuti tekstur

objek pada citra. Piksel-piksel putih tersebut tampak tidak kontinyu.

  Dari Gambar 4.30, dapat diperhatikan bahwa citra tapis memiliki lingkaran

hitam dengan radius dalam dan radius luar yang lebih besar seiring dengan

bertambahnya frekuensi cutoff. Hasil penapisan dengan frekuensi cutoff 200|350 Hz,

250|400 Hz, dan 500|700 Hz tampak memiliki derau yang lebih tereduksi dibandingkan

dengan hasil penapisan dengan frekuensi cutoff lainnya. Hasil penapisan dengan

frekuensi cutoff 1000|1500 Hz tampak memiliki derau yang paling signifikan.

  

(a) (b)

(c) (d)

  

(e) (f)

Gambar 4.30 Hasil penafisan Butterworth bandstop frekuensi cutoff (a) 100|200 Hz,

  

(b) 150|250 Hz, (c) 200|350 Hz, (d) 250|400 Hz, (e) 500|700 Hz, (f) 1000|1500 Hz

Gambar 4.31 Tabel dan grafik RMSE untuk penapisan Butterworth bandstop untuk sejumlah frekuensi cutoff.

  Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth bandstop pada

Gambar 4.31 terlihat bahwa frekuensi cutoff 5|100 Hz memiliki nilai RMSE paling kecil dengan nilai 126.0731, kemudian diikuti oleh frekuensi cutoff 100|200 Hz dengan

  

RMSE 136.7436. Nilai RMSE yang paling besar diperoleh pada frekuensi cutoff

1000|1500 Hz dengan nilai 138.2939. Semakin besar nilai frekuensi cutoff maka nilai

RMSE yang diperoleh meningkat hampir linier dengan kemiringan yang cukup kecil.

4.3 Komparasi RMSE Tapis Butterworth Pada Sejumlah Citra Uji

  4.3.1 Perbandingan RMSE Tiga Citra Uji Bidang Frekuensi Lowpass Gambar 4.32 Tabel dan grafik RMSE untuk penapisan Butterworth lowpass untuk citra

uji boat

Gambar 4.33 Tabel dan grafik RMSE untuk penapisan Butterworth lowpass untuk citra

  

uji cameraman

Gambar 4.34 Tabel dan grafik RMSE untuk penapisan Butterworth lowpass untuk citra

  

uji lena

Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth lowpass dari

ketiga citra uji pada Gambar 4.32-4.34 terlihat bahwa hasil penapisan dengan frekuensi

cutoff

50 Hz selalu memiliki nilai RMSE paling kecil dan hasil penapisan dengan

  

frekuensi cutoff 1000 Hz selalu memiliki nilai RMSE paling besar. Semakin besar nilai

frekuensi cutoff maka nilai RMSE yang diperoleh meningkat hampir linier dengan

kemiringan yang cukup kecil.

  Nilai RMSE paling kecil didapatkan dari hasil penapisan dengan frekuensi cutoff

  

50 Hz pada citra lena dengan nilai 97.2053, sedangkan nilai RMSE paling besar

didapatkan dari hasil penapisan dengan frekuensi cutoff 1000 Hz pada citra boat dengan

nilai 139.5317.

4.3.2 Perbandingan RMSE Tiga Citra Uji Bidang Frekuensi Bandpass

Gambar 4.35 Tabel dan grafik RMSE untuk penapisan Butterworth bandpass untuk

  

citra uji boat

Gambar 4.36 Tabel dan grafik RMSE untuk penapisan Butterworth bandpass untuk

  

citra uji cameraman

  Gambar 4.37 Tabel dan grafik RMSE untuk penapisan Butterworth bandpass untuk

citra uji lena

  Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth bandpass dari

ketiga citra uji pada Gambar 4.35-4.37 terlihat bahwa hasil penapisan dengan frekuensi

cutoff 1000|1500 Hz selalu memiliki nilai RMSE paling kecil dan hasil penapisan

dengan frekuensi cutoff 5|100 Hz selalu memiliki nilai RMSE paling besar. Semakin

besar nilai frekuensi cutoff maka nilai RMSE yang menyusut secara bergelombang

seperti gelombang sinusoidal.

  Nilai RMSE paling kecil didapatkan dari hasil penapisan dengan frekuensi cutoff

1000|1500 Hz pada citra lena dengan nilai 0.3914, sedangkan nilai RMSE paling besar

didapatkan dari hasil penapisan dengan frekuensi cutoff 5|100 Hz pada citra cameraman

dengan nilai 36.4820.

4.3.3 Perbandingan RMSE Tiga Citra Uji Bidang Frekuensi Highpass

Gambar 4.38 Tabel dan grafik RMSE untuk penapisan Butterworth highpass untuk

  

citra uji boat

Gambar 4.39

  Tabel dan grafik RMSE untuk penapisan Butterworth highpass untuk

citra uji cameraman

Gambar 4.40 Tabel dan grafik RMSE untuk penapisan Butterworth highpass untuk

  

citra uji lena

Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth highpass dari

ketiga citra uji pada Gambar 4.38-4.40 terlihat bahwa hasil penapisan dengan frekuensi

cutoff 1000 Hz selalu memiliki nilai RMSE paling kecil dan hasil penapisan dengan

frekuensi cutoff

50 Hz selalu memiliki nilai RMSE paling besar. Semakin besar nilai

  

frekuensi cutoff maka nilai RMSE yang menyusut secara hampir linier dengan

kemiringan cukup kecil.

  Nilai RMSE paling kecil didapatkan dari hasil penapisan dengan frekuensi cutoff

1000 Hz pada citra lena dengan nilai 0.3912, sedangkan nilai RMSE paling besar

didapatkan dari hasil penapisan dengan frekuensi cutoff 50 Hz pada citra boat dengan

nilai 23.2547.

4.3.4 Perbandingan RMSE Tiga Citra Uji Bidang Frekuensi Bandstop

Gambar 4.41 Tabel dan grafik RMSE untuk penapisan Butterworth bandstop untuk

  

citra uji boat

Gambar 4.42 Tabel dan grafik RMSE untuk penapisan Butterworth bandstop untuk

  

citra uji cameraman

Gambar 4.43 Tabel dan grafik RMSE untuk penapisan Butterworth bandstop untuk

  

citra uji lena

Berdasarkan tabel dan grafik evaluasi kinerja tapis Butterworth bandstop dari

ketiga citra uji pada Gambar 4.41 - Gambar 4.43 terlihat bahwa hasil penapisan dengan

frekuensi cutoff 5|100 Hz selalu memiliki nilai RMSE paling kecil dan hasil penapisan

dengan frekuensi cutoff 1000|1500 Hz selalu memiliki nilai RMSE paling besar.

  

Semakin besar nilai frekuensi cutoff maka nilai RMSE yang meningkat secara hampir

linier dengan kemiringan cukup kecil.

  Nilai RMSE paling kecil didapatkan dari hasil penapisan dengan frekuensi cutoff

5|100 Hz pada citra lena dengan nilai 89.2141, sedangkan nilai RMSE paling besar

didapatkan dari hasil penapisan dengan frekuensi cutoff 1000|1500 Hz pada citra boat

dengan nilai 139.5689.

BAB 5 PENUTUP

5.1 Kesimpulan

  Dari sejumlah pengujian yang telah dilakukan, berikut adalah beberapa kesimpulan yang bisa ditarik:

  1. Citra hasil penapisan lowpass dengan frekuensi 100 Hz, memiliki efek pengaburan akibat dibuangnya koefisien-koefisien frekuensi citra yang lebih besar dari frekuensi cutoffnya

  . Pada penapisan lowpass dengan frekuensi cutoff 1000 Hz berbeda dari lainnya. Pada hasil penapisan pada ketiga frekuensi cutoff ini, citra hasil penapisan sedikit lebih tajam, meskipun derau tampak lebih jelas.

  2. Citra hasil penapisan bandpass dengan frekuensi 100|200 Hz memiliki efek seperti deteksi tepi, dimana piksel-piksel terang tampak pada tepi objek. Hal ini diakibatkan oleh dibuangnya koefisien-koefisien frekuensi citra yang lebih kecil dari frekuensi cutoff bawah dan yang lebih besar dari frekuensi cutoff atas. Pada frekuensi cutoff 1000|1500 Hz lebih buruk dari sebelumnya. Citra hasil penapisan tampak tidak memuat informasi apapun, kecuali hanya piksel-piksel terang pada posisi yang acak.

  3. Semua citra hasil penapisan highpass didominasi warna gelap, akibat terbuangnya semua koefisien frekuensi citra yang lebih kecil dari frekuensi cutoff-nya, yang menyebabkan tampilan seperti mekanisme deteksi tepi. Dapat diperhatikan bahwa semakin besar frekuensi cutoff yang diberikan, citra hasil penapisan semakin didominasi oleh warna gelap.

4. Citra tertapis bandstop didominasi warna gelap, akibat terbuangnya semua koefisien

  frekuensi citra antara 5 Hz sampai 100 Hz, dengan piksel-piksel berwarna terang tersebar secara terpola mengikuti tekstur objek pada citra. Piksel-piksel putih tersebut tampak tidak kontinyu.

  5. Komparasi penapisan lowpass pada tiga citra uji boat, cameraman, dan lena diperoleh bahwa nilai RMSE paling kecil didapatkan dari hasil penapisan dengan frekuensi cutoff

  50 Hz pada citra lena dengan nilai 97.2053, sedangkan nilai RMSE paling besar didapatkan dari hasil penapisan dengan frekuensi cutoff 1000 Hz pada citra boat dengan nilai 139.5317.

  6. Komparasi penapisan bandpass pada tiga citra uji boat, cameraman, dan lena diperoleh bahwa nilai RMSE paling kecil didapatkan dari hasil penapisan dengan frekuensi cutoff 1000|1500 Hz pada citra lena dengan nilai 0.3914, sedangkan nilai RMSE paling besar didapatkan dari hasil penapisan dengan frekuensi cutoff 5|100 Hz pada citra cameraman dengan nilai 36.4820.

  7. Komparasi penapisan highpass pada tiga citra uji boat, cameraman, dan lena diperoleh bahwa nilai RMSE paling kecil didapatkan dari hasil penapisan dengan frekuensi cutoff 1000 Hz pada citra lena dengan nilai 0.3912, sedangkan nilai RMSE paling besar didapatkan dari hasil penapisan dengan frekuensi cutoff 50 Hz pada citra boat dengan nilai 23.2547.

  8. Komparasi penapisan bandstop pada tiga citra uji boat, cameraman, dan lena diperoleh bahwa nilai RMSE paling kecil diperoleh pada frekuensi cutoff 5|100 Hz pada citra lena dengan nilai 89.2141, sedangkan nilai RMSE paling besar didapatkan dari hasil penapisan dengan frekuensi cutoff 1000|1500 Hz pada citra boat dengan nilai 139.5689.

5.2 Saran

  

Pengujian pada penelitian ini hanya difokuskan pada derau Gaussian dengan nilai

variansi derau 0.01. Untuk penelitian selanjutnya, jenis derau lain dengan pelbagai nilai

variansi derau perl dikaji lebih lanjut.

Dokumen baru

Tags

Dokumen yang terkait

BAB 4 HASIL DAN PEMBAHASAN 4.1 Hasil 4.1
0
0
10
4.1 TRANSMISI ASYNCHRONOUS DAN SYNCHRONOUS - BAB 4 TEKNIK KOMUNIKASI DATA DIGITAL
0
0
18
BAB 4 HASIL DAN PEMBAHASAN 4.1 Gambaran Tempat Penelitian - BAB 4.pdf
0
1
16
BAB IV HASIL DAN PEMBAHASAN 4.1 - BAB IV
0
0
15
BAB 4 HASIL DAN PEMBAHASAN 4.1 Solusi Schwarzchild 4.1.1 Metrik Schwarzchild - SOLUSI SCHWARZSCHILD DAN KERR UNTUK PERSAMAAN MEDAN GRAVITASI EINSTEIN Repository - UNAIR REPOSITORY
0
0
36
BAB IV HASIL DAN PEMBAHASAN 4.1 Hasil Perancangan - PERANCANGAN PERANGKAT LUNAK AUDIOMETER NADA MURNI DAN TUTUR UNTUK DIAGNOSIS PENDENGARAN Repository - UNAIR REPOSITORY
0
0
23
BAB 4 METODE PENELITIAN 4.1 Desain Penelitian - BAB 4 METODE PENELITIAN
1
1
15
BAB 4 HASIL DAN PEMBAHASAN - PERANCANGAN ROBOT PEMADAM API MENGGUNAKAN KONTROL PID - UNIB Scholar Repository
0
1
21
10 BAB 4 PERANCANGAN DAN PEMBAHASAN 4.1 Alur Pembuatan Game
0
0
40
11 BAB IV PERANCANGAN DAN PEMBAHASAN 4.1 Alur Pembuatan Game
1
1
34
BAB IV PEMBAHASAN 4.1 Hasil Penelitian - 13.31.0004 Djunita Septiani BAB IV
0
0
23
BAB 4 PEMBAHASAN - RANCANG BANGUN APLIKASI LAYANAN UNTUK ALUMNI UNIKA SOEGIJAPRANATA BERBASIS ANDROID - Unika Repository
0
1
31
BAB I PENDAHULUAN - PERANCANGAN SIMULATOR SURYA BERBASIS LABVIEW UNTUK PENGUJIAN UNJUK KERJA SISTEM FOTOVOLTAIK - Repository UNRAM
0
0
58
BAB I PENDAHULUAN - PERANCANGAN SIMULATOR SURYA BERBASIS LABVIEW UNTUK PENGUJIAN UNJUK KERJA SISTEM FOTOVOLTAIK - Repository UNRAM
0
1
58
RESTORASI CITRA DENGAN TAPIS RERATA HARMONIS MENGGUNAKAN GUI MATLAB
0
0
8
Show more