Jumat, 30 Desember 2011

METODE NOISING UNTUK PELEMBUTAN CITRA (SMOOTHING) & HISTOGRAM

PENJELASAN UMUM

Tugas pencitraan 4IA11:

kelompok:

tika ayu anggraini (51408020)

nur handayani (50408732)

1. Algoritma

Pada pembuatan projek MatLab ini, membuat metode noising untuk pelembutan citra dan dikonversikan ke dalam Histogram. Pada tampilan projek membutuhkan rancangan GUI-nya yaitu :

· Satu tampilan awal (win1),

· Menggunakan tiga frame untuk head, isi, dan bagian untuk command.

· Bagian untuk menampilkan tiga gambar menggunakan axes.

· Pilihan pop-up untuk memilih metode (yang akan dibahas), dan

· Tombol-tombol untuk mengoperasikan projek tersebut

1.1. Rancangan Tampilan Awal

Pada rancangan ini, buat M-files terlebih dahulu dan masukkan perintahnya, sebagai berikut.

clc;

clear all;

% all initial size

formcolor=[0.8 0.8 0.5];

framecolor=[0.9 0.9 0.64];

fontcolor=[0 0 0];

t_tom = 22;

l_tom = 80;

Untuk perintah di atas, berfungsi untuk menentukan warna form dan warna frame dari tampilan projek tersebut. Selanjutnya, untuk mengatur posisi dari jendela (windows) gunakan perintah ‘position’ dan memakai koordinat posisi ’40 40 550 360’. Cantumkan nama judul dari projek tersebut, di dalam projek ini menamakan “Efek Noising Untuk Smoothing & Histogram” karena akan membuat sutau objek yang berwarna awal terlalu kasar dan dengan menggunakan metode noising akan terlihat lebih halus. Karena masih mengatur posisi maka Toolbar dan MenuBar masih ‘none’

win1 = figure('Color',formcolor, ...

'Unit','points',...

'PaperUnits','points', ...

'Position',[40 40 550 360], ...

'ToolBar','none',...

'Menubar','none',...

'NumberTitle','off',...

'Name','Efek Noising untuk Smoothing & Histogram');

Selanjutnya akan memakai tiga frame, yaitu frame 0, frame 1 dan frame 3. Frame 0 merupakan fungsi dari frame dasar dari pembentukan tampilan. Untuk frame1, akan terdapat axes 1, 2 & 3 serta stext (untuk menaruh sebuah teks) yang terdri dari 8 stext.

Untuk frame semua struktur samatetapi yang membedakan adalah position yang menggunakan perintah

frame1 = uicontrol('Parent',win1, ...

'Units','points', ...

'ListboxTop',0, ...

'Position',[10 10 530 100], ...

'Style','frame', ...

'backgroundcolor',framecolor, ...

'Tag','Frame1');

Pada axes 1, yang berfungsi untuk menampilkan gambar awal dari suatu objek yang terpilih, warna dari axes 1 tersebut adalah putih karena command tersebut tidak terlihat bila di-run (visible : off) dan berada pada posisi tengah-kiri yang koordinatnya ’40 238 195 190’ pada aturan matriks. Untuk koordinat warna x,y,z tidak diperhitungkan maka diberi nilai ‘0’.

axes1 = axes('Parent',win1, ...

'unit','pixels',...

'Box','on', ...

'CameraUpVector',[0 1 0], ...

'Color',[1 1 1], ...

'Position',[40 238 195 190], ...

'Tag','Axes1', ...

'XColor',[0 0 0], ...

'YColor',[0 0 0], ...

'ZColor',[0 0 0],...

'visible','off');

Pada axes 2, yang berfungsi untuk menampilkan objek kedua yang memberi efek noise, warna dari axes 2 sama dengan axes 1 karena tidak terlihat dan pada command (visible : off), berada pada posisi tengah yang koordinatnya ‘270 238 195 190’ pada aturan matriks.

axes2 = axes('Parent',win1, ...

'Units','pixels', ...

'CameraUpVector',[0 1 0], ...

'Color',[1 1 1], ...

'Position',[270 238 195 190], ...

'Tag','Axes2', ...

'XColor',[0 0 0], ...

'YColor',[0 0 0], ...

'ZColor',[0 0 0],...

'visible','off');

Pada axes 3, yang berfungsi untuk menampilkan objek ketiga yang gambar awal telah digabung dengan efek noise, objek tersebut berada di tengah kanan yang koordinatnya ‘500 238 195 190’ pada aturan matriks.

axes3 = axes('Parent',win1, ...

'Units','pixels', ...

'CameraUpVector',[0 1 0], ...

'Color',[1 1 1], ...

'Position',[500 238 195 190], ...

'Tag','Axes3', ...

'XColor',[0 0 0], ...

'YColor',[0 0 0], ...

'ZColor',[0 0 0],...

'visible','off');

Untuk bagian head, diberi command stext agar memberi petunjuk pada ketiga axes. Pada stext1, nama stext tersebut adalah ‘Gambar Awal’ untuk axes1 yang berada pada posisi atas-kiri yang posisi koordinatnya ’80 330 74.25 24.25’ pada aturan matriks dan memiliki aturan (style : text).

stext2 = uicontrol('Parent',win1, ...

'Units','points', ...

'backgroundcolor',framecolor,...

'ListboxTop',0, ...

'Position',[80 330 74.25 14.25], ...

'String','Gambar Awal', ...

'Fontsize',10,...

'Foregroundcolor',fontcolor,...

'Style','text');

Untuk stext2, nama stext tersebut adalah ‘Dengan Noise’ untuk axes2 yang berada posisi tengah-atas yang posisi koordinatnya ‘240 330 74.25 14.25’ pada aturan matriks dan sama seperti stext1 dan stext3.

stext3 = uicontrol('Parent',win1, ...

'Units','points', ...

'backgroundcolor',framecolor,...

'ListboxTop',0, ...

'Position',[240 330 74.25 14.25], ...

'String','Dengan Noise', ...

'Fontsize',10,...

'Foregroundcolor',fontcolor,...

'Style','text');

Untuk stext3, nama stext tersebut adalah ‘Noise dihilangkan’ untuk axes3 yang berada posisi kanan-atas yang posisi koordinatnya ‘410 330 100 14.25’ pada aturan matriks.

stext4 = uicontrol('Parent',win1, ...

'Units','points', ...

'backgroundcolor',framecolor,...

'ListboxTop',0, ...

'Position',[410 330 100 14.25], ...

'String','Noise dihilangkan', ...

'Fontsize',10,...

'Foregroundcolor',fontcolor,...

'Style','text');

Pada fungsi yang lainnya dan masih di dalam lingkup stext, pada stext4 akan memberi petunjuk pada nilai rasio pada noise yang diukur dari kepadatan warna gambar yang telah diambil. Teks ini berada di posisi di bawah axes yang pertama. Untuk stext4 tersebut diberi nama ‘Rasio Sinyal Noise’ dan berada di posisi koordinat ’52.5 120 120 14.25’ pada aturan matriks.

stext5 = uicontrol('Parent',win1, ...

'Units','points', ...

'BackgroundColor',formcolor, ...

'ListboxTop',0, ...

'Position',[52.5 120 120 14.25], ...

'String','Rasio Sinyal Noise', ...

'Style','text');

Untuk stext selanjutnya yaitu stext8 digunakan untuk nilai derajat tepi dari Rasio Sinyal Noise yang berdasarkan perhitungan dari tingkat level noise. Stext5 ini diberi nama ‘Nilai Treshold dan berada di posisi dibawah axes3. Untuk stext5 ini berada pada posisi koordinat ‘280 120 100 14.25’ pada aturan matriks.

stext8 = uicontrol('Parent',win1, ...

'Units','points', ...

'BackgroundColor',formcolor, ...

'ListboxTop',0, ...

'Position',[280 120 100 14.25], ...

'String','Nilai Treshold', ...

'Style','text');

Pada selanjutnya membuat frame untuk menaruh bagian-bagian metode dari noising, seperti wavelet, tingkat level noise, pilihan noise. Posisi frame tersebut berada di bawah, yang posisi koordinatnya ’48 70.5 233.25 28.5’ pada aturan matriks.

frame3 = uicontrol('Parent',win1, ...

'Units','points', ...

'ListboxTop',0, ...

'Position',[48 70.5 233.25 28.5], ...

'BackgroundColor',formcolor, ...

'Style','frame', ...

'Tag','Frame3');

Pada masing-masing stext tersebut mempunyai tampilan popup yaitu :

§ Pilihan Wavelet (Douebechies, Coiflets, Symlet)

§ Pilihan Noise (Gaussian, Laplacian)

§ Tingkat Level Noise (10,20,30,50)

§ Nilai Treshold (Halus, Kasar)

Pada tombol-tombol navigasi mempunyai lima tombol untuk menoperasikan projek ini, yaitu :

§ Browsing Gambar

§ Tambahkan Noise

§ Hilangkan Noise

§ Histogram

§ Keluar

Pada tombol Browsing Gambar mempunyai koordinat posisi ‘30 30 l_tom t_tom’berdasarkan posisi yang ditempatkan dan warna background dari tombol tersebut ‘0.752941176470588 0.752941176470588 0.752941176470588’.

tom_getImg = uicontrol('Parent',win1, ...

'style','pushbutton',...

'Units','points', ...

'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...

'ListboxTop',0, ...

'Position',[30 30 l_tom t_tom], ...

'String','Browsing Gambar', ...

'Tag','Pushbutton1',...

'callback','getImg');

Sama dengan tombol Browsing Gambar, tombol Keluar juga mempunyai warna background dari tombol tersebut ‘0.752941176470588 0.752941176470588 0.752941176470588’.

tom_close = uicontrol('Parent',win1, ...

'style','pushbutton',...

'Units','points', ...

'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...

'ListboxTop',0, ...

'Position',[438.75 30 l_tom t_tom], ...

'String','Keluar', ...

'Tag','Pushbutton3',...

'callback','close');

1.2. Mengubah warna asli ke citra keabuan

Pada browsing gambar, dapat mengambil gambar dari file computer tanpa ditentukan gambar yang disimpan pada projek. Tetapi gambar yang bisa di konversi ke derajat pengabuan hanya berbentuk *.bmp karena batas resolusi gambar yang mempunyai format tersebut tidak terlalu tinggi dibandingkan dengan format *.jpg sehingga mudah dikonversikan ke derajat pengabuan.

[namafile,direktori]=uigetfile('*.bmp','Buka file');

gbr1 = imread([direktori,namafile],'bmp');

Lalu dikonversikan ke derajat pengabuan, menggunakan citra truecolor yaitu RGB dengan warna gray (abu-abu) dari colormap.

colormap(gray);

gbr1 = rgb2gray(gbr1);

Setelah semua dipindahkan menjadi keabuan, akan ditampilkan pada axes yang menjadi tempat untuk penampilan objek sesuai dengan ukuran yang telah diatur sebelumnya sesuai dengan luas axes[lbr_im,pjg_im]

ori_image=imagesc(gbr1,...

'parent',axes1);

set(win1,'CurrentAxes',axes1);

[lbr_im,pjg_im]=size(gbr1)

gbr1 = double(gbr1);

set(axes1,'visible','off');%

1.3. Memberikan Efek Noise Sesuai Metode Gause dan Laplacian

Level noise menentukan kepekatan keabuan dari gambar yang akan di noise, semakin tinggi nilainya semakin pekat keabuan di gambar tersebut. Pada level noise mempunyai empat tingkatan yaitu 10, 20, 30 dan 50.

pop_ind = get(popup4,'Value');

switch pop_ind

case 1

v = 10;

case 2

v = 20;

case 3

v = 30;

case 4

v = 40;

end

epsilon = 1e-5;

infinity = 255;

gbr2 = gbr1;

1.4. Memilih Metode Gause atau Laplacian

Suatu citra dapat dipresentasikan secara numeric, maka citra harus digitalisasi, baik terhadap ruang koordinat (x,y) maupun terhadap skala keabuannya f(x,y). Proses digitalisasi koordinat (x,y) dikenal sebagai “pencuplikan citra” (image sampling, sedangkan proses digitalisai skala keabuan f(x,y) disebut sebagai “kuantisasi derajat keabuan” Gray Level Quantization.

Sebuah citra kontinu f(x,y) akan didekati oleh cuplikan-cuplikan yang seragam jaraknya dalam bentuk matrik N x N. Nilai elemen-elemen matriks menyatakan derajat keabuan citra, sedangkan posisi elemen tersebut (dalam baris dan kolom) menyatakan koordinat titik-titik (x,y) dari citra

Pada metode ini, yang digunakan adalah metode Gaussian dan Laplacian. Metode ini berpengaruh pada kualitas citra pengabuan suatu gambar.

case 1

gbr2 = gbr1 + v*randn(size(gbr1));

case 2

u = rand(size(gbr1));

u1 = u;

[he,we]=size(gbr1);

for i=1:we-1,

for j=1:he-1,

if (u(i,j) <= 0.5),

if (u(i,j) <= epsilon)

gbr2(i,j) = gbr1(i,j) - infinity;

else

gbr2(i,j) = round(gbr1(i,j) + v*log2(2.0 * u(i,j)));

end;

else

u1(i,j) = 1 - u(i,j);

if (u1(i,j) <= (0.5 * epsilon))

gbr2(i,j) = gbr1(i,j) - infinity;

else

gbr2(i,j) = round(gbr1(i,j) - v*log2(2.0 * u1(i,j)));

end;

end;

if (gbr2(i,j) < 0 )

gbr2(i,j) = 0;

end;

if (gbr2(i,j) > 255 )

gbr2(i,j) = 255;

end;

1.5. Menghitung Rasio Noise

Dalam melakukan penambahan noise atau derajat pengabuan, terdapat nilai-nilai rasio yang muncul dari efek pengabuan pada gambar setelah noise dihilangkan sesuai dengan kondisi gambar sesudahnya (gbr 1 – gbr2) = (gbr1-gbr3).

tmp1 = sum(sum(abs(gbr1-gbr2).^2));

[M,N] = size(gbr1);

RMSE = ((1/(M*N))*tmp1)^0.5;

PSNR1 = 20*log10(255/RMSE);

set(edit1,'String',PSNR1);

tmp1 = sum(sum(abs(gbr1-gbr3).^2));

[M,N] = size(gbr1);

RMSE = ((1/(M*N))*tmp1)^0.5;

PSNR2 = 20*log10(255/RMSE);

set(edit2,'String',PSNR2);

1.6. Grafik Histogram

Dalam pemberian efek noise (pengabuan), melakukan perbandingan grafik histogram antara gambar awal (gbr1) dengan gambar setelah diberi efek pengabuan (noise) (gbr3) agar terlihat halus (smoothing) yang setelah proses wavelet.

in2=figure(...

'color',[0.5 0.9 0.7],...

'Name','Perbandingan Histogram',...

'Menubar','none',...

'toolbar','none',...

'Numbertitle','off');

g1=uint8(gbr1);

g3=uint8(gbr3);

ax1=subplot(2,1,1);

imhist(g1);

title('Histogram Gambar Asli')

ax2=subplot(2,1,2);

imhist(g3);

title('Setelah Proses Wavelet de-Noising')




OUTPUT

Aplikasi ini menyediakan beberapa tombol menu pada sebuah form utama. Menu tersebut digunakan untuk mengakses :

  • Browsing Gambar
  • Tambahkan Noise
  • Hilangkan Noise
  • Histogram Keluar

Pada bagian ini untuk mengambil file gambar yang formatnya berbentuk *.bmp dan mengubahnya ke dalam efek noising agar terlihat halus (smooth)


Aplikasi menambahkan noise pada citra asli dengan level-level dan metode yang telah ditentukan oleh user. Gambar hasil penambahan noise ditampilkan pada bagian gambar dengan noise.

Aplikasi melakukan perubahan pada gambar setelah dihilangkan noise-nya dengan pilihan metode yang ditentukan. Hasil pengolahan ditampilkan pada bagian gambar setelah dihilangkan noise-nya.