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