BAB IV IMPLEMENTASI DAN PEMBAHASAN PROGRAM
C. Pengujian Program
2. Pengaktifan program
Saat menekan tombol “Buka File Citra”, maka akan keluar tampilan
untuk memilih citra mana yang akan dibuka, dan citra yang dibuka harus
bertipe *.BMP.
Gambar 4.18 Tampilan Buka File Citra
Listing untuk membuka file citra adalah sebagai berikut:
%==============================================% ....
[nama_file, nama_path]=uigetfile(... {'*.bmp','File Citra(*.bmp)'},... 'Buka File Citra');
if ~isequal(nama_file,0) fullpath=strcat(nama_path,nama_file); lasterr(''); citra=imread(fullpath); .... %==============================================%
“Uigetfile” digunakan menampilkan antarmuka untuk membuka file, dan tipe citra yang dibuka ditentukan pula dari script ini.
b. Tampilan citra asli
Setelah menentukan citra yang akan dibuka, maka program akan
menampilkan citra tersebut ke tampilan citra asli.
Gambar 4.19 Citra asli
Listing untuk menampilkan file citra adalah sebagai berikut:
%==============================================% ....
[citra, res_citra, nama_file, info]=buka_citra; axes1 = axes('position',[0.120 0.37 0.25 0.446]); imshow(citra);
....
[citra, res_citra, nama_file, info]=buka_citra; digunakan untuk memanggil
function buka_citra. Sedangkan axes1 digunakan untuk membuat suatu
axes untuk menampilkan citra yang dibuka dan kemudian menentukan dimana citra tersebut nantinya akan ditampilkan, dan imshow digunakan untuk menampilkan citra tersebut.
c. Tampilan citra hasil transformasi
Tampilan hasil transformasi ini akan menampilkan citra yang telah
mengalami proses transformasi.
Gambar 4.20 Tampilan citra transformasi
Tampilan citra transformasi ini akan muncul setelah user menekan
tombol “Transformasi”, yang sebelumnya memilih metode yang akan
digunakan. Dalam contoh di atas, metode yang digunakan adalah dengan
Listing untuk menampilkan menghitung nilai transformasi (DCT): %==============================================% .... j1=0:blok-1; j2=0:blok-1; [J1,J2]=meshgrid(j1,j2); C=cos(((2.*J1+1).*J2*pi)/(blok*2)); D=C'; citra=double(citra)./(blok/2); ukuran=size(citra,1); nblok=ukuran/blok; brsklm=1:blok; [baris,kolom]=meshgrid(0:(nblok-1), 0:(nblok-1)); baris=baris(:); kolom=kolom(:); citra_transform = zeros(size(citra)); for k=1:length(baris) x=citra(baris(k)*blok+brsklm,kolom(k)*blok+brsklm); D1=x*D; D2=C*D1; D2(:,1)=D2(:,1).*(1/sqrt(2)); D2(1,:)=D2(1,:).*(1/sqrt(2)); citra_transform(baris(k)*blok+brsklm,kolom(k)*blok+brsklm)=D2(brsklm, brsklm); end;.... %==============================================%
Dalam listing program di atas, membutuhkan sebuah masukan berupa nilai dari variable blok. Nilai tersebut didapat dari function lain, dimana
function tersebut membaca popup menu saat user menentukan blok yang akan dipakai.
Output dari listing program tersebut adalah citra_transform yang nantinya akan ditampilkan sebagai citra hasil transformasi.
d. Tampilan citra hasil rekonstruksi, nilai pixel serta penghitungan error
Tampilan citra hasil rekonstruksi ini akan menampilkan citra yang
telah mengalami proses transformasi, dan kemudian direkonstruksi
(dikenai fungsi invers) untuk mendapatkan citra seperti semula.
Gambar 4.21 Tampilan citra setelah rekonstruksi tanpa di kuantisasi
Gambar di atas menunjukkan hasil rekonstruksi citra sebelum dikenai
proses kuantisasi. Tampak bahwa citra hasil rekonstruksi, dan nilai matriks
yang ditampilkan dalam grid citra asli dan grid citra rekonstruksi terlihat sama. Hal ini juga tampak pada error yang ditampilkan. Pada MSE terlihat nilai 0 (nol) dan pada PSNR juga tidak terdefinisi yang ditunjukkan
Namun setelah dikuantisasi dengan nilai tertentu, citra hasil
rekonstruksi maupun nilai matriks yang ditampilkan dalam grid akan menjadi berbeda. Citra rekonstruksi akan tampak lebih buruk, tergantung
dari nilai kuantisasi yang dimasukkan. Semakin besar nilai kuantisasi,
maka akan semakin buruk hasil citra yang didapat.
Gambar di bawah ini adalah hasil setelah dikuantisasi dengan nilai
kuantisasi 100. Ini berarti nilai yang berada di antara -100 sampai dengan
100 akan dikuantisasi menjadi nol 0 (nol).
Gambar 4.22 Tampilan citra setelah rekonstruksi setelah dikuantisasi
Dalam tampilan di atas juga terlihat bahwa setelah mengalami proses
kuantisasi dengan nilai 100, terdapat nilai error MSE=460,97 dan PSNR=21,49 dB. Semakin banyak error, maka nilai MSE semakin tinggi dan nilai PSNR semakin rendah. Demikian pula sebaliknya, semakin
sedikit error, maka nilai MSE semakin rendah dan nilai PSNR semakin tinggi.
e. Tampilan report
Report digunakan untuk melihat laporan secara keseluruhan dari data- data yang dihasilkan. Dari tampilan report ini, user dapat melihat dengan lebih ringkas data-data yang telah diproses dan output-nya.
Gambar 4.23 Tampilan report
Dalam tampilan ini pula terdapat beberapa informasi yang belum
terdapat pada tampilan program utama, yaitu besar data setelah
transformasi, selisih data antara data asli dengan data setelah transformasi,
Besar data setelah mengalami proses transformasi dan kuantisasi
dengan nilai 100 dalam kasus tersebut di atas terlihat sangat jauh
berkurang, tetapi nilai MSE yang didapat juga cukup besar. Jika dilihat
dari kualitas citra setelah direkonstruksi juga terlihat buruk. Hal ini
disebabkan oleh nilai kuantisasi yang terlalu besar.
Dalam kasus ini, user dapat menentukan seberapa toleransi kualitas hasil citra rekonstruksi yang diinginkan. Setelah itu, user dapat melihat dari hasil report. Berapa nilai kuantisasi, besar data transformasi, selisih data, dan rasio kompresi yang masih dapat ditoleransi, serta hasil error
yang didapat.
f. Tampilan pertolongan program (help) dan informasi program
Tampilan ini berisi tentang cara penggunaan program.
Gambar 4.24 Tampilan petunjuk penggunaan program
Tampilan informasi program adalah tampilan yang berisi tentang
Gambar 4.25 Tampilan informasi program
Listing untuk menampilkan “Help”, dan “About”:
%==============================================% .... h1 = uimenu('Parent',h0,'Label','Help','Tag','uimenu3'); h2 = uimenu('Parent',h1,'Callback','pertolongan','Label','Help','Tag','help','Enable','on'); h2 = uimenu('Parent',h1,'Callback','about','Label','About','Tag','about','Enable','on'); ... %==============================================%
g. Tampilan pesan kesalahan
Progam ini juga akan menampilkan berbagai pesan kesalahan apabila
user salah dalam mengoperasikan program. Berbagai pesan kesalahan ini antara lain:
Gambar 4.26 Tampilan pesan error
Pesan ini akan tampil jika ukuran blok yang dipilih oleh user lebih besar daripada ukuran citra masukan. Misalnya ukuran citra masukan
adalah 64x64 pixel, sedangkan ukuran blok yang dipilih adalah 128x128, maka pesan ini akan muncul, hal ini disebabkan karena citra dengan
resolusi 64x64 pixel tidak dapat dibagi menjadi blok 128x128.
h. Tampilan peringatan
a. Peringatan dalam memasukkan blok matriks
User juga akan mendapat peringatan jika ada input yang salah. Peringatan kesalahan tersebut adalah sebagai berikut:
Peringatan ini akan muncul jika user memilih metode kuantisasi “Blok
Matriks” dan kemudian menekan tombol “Tansformasi”, tetapi belum
memilih blok matriks pada popup menu.
b. Peringatan dalam memasukkan baris dan kolom
Jika user salah dalam memasukkan baris dan kolom yang digunakan untuk melihat blok matriks, ataupun salah satu baris atau kolom atau
keduanya dalam keadaan kosong, dan user menekan tombol “Tampil” maka akan muncul peringatan seperti gambar 4.28 di bawah ini:
Gambar 4.28 Tampilan peringatan 2
Di atas kotak untuk input angka baris dan kolom tercantum batas maksimal user dapat memasukkan nilai. Jika user memasukkan sebuah nilai yang melebihi batas maksimal tersebut maka peringatan ini akan