Anda di halaman 1dari 24

LAPORAN PRAKTIKUM

PENGOLAHAN CITRA DIGITAL NO JOB 7

Nama Nim Kelas

: Andy Hafiandy : 3201016062 :5B

TEKNIK INFORMATIKA TEKNIK ELEKTRO POLITEKNIK NEGERI PONTIANAK 2012

Tujuan 1. Membangkitkan noise pada citra. 2. Mereduksi noise pada citra.

Teori Dasar Noise gaussian merupakan model noise yang mengikuti distribusi normal standard dengan rata-rata nol dan standard deviasi 1. Efek dari gaussian noise ini, pada gambar muncul titik-titik berwarna yang jumlahnya sama dengan prosentase noise. Noise speckle merupakan model noise yang memberikan warna hitam pada titik yang terkena noise. Sedangkan noise salt & pepper seperti halnya taburan garam, akan memberikan warna putih pada titik yang terkena noise. Pada beberapa pengolahan citra, terkadang untuk menguji suatu algoritma untuk dapat mereduksi noise, maka noise dihasilkan dari proses pembangkitan noise. Untuk membangkitkan noise digunakan suatu bilangan acak sebagai pengganti noise yang dihasilkan. Noise pada citra dibedakan menjadi beberapa macam yaitu : 1. GaussianNoise Gaussian dapat dibangkitkan dengan cara membangkitkan bilangan acak [0,1] dengan distribusi gaussian. Kemudian untuk titik-titik yang terkena noise, nilai fungsi citra ditambahkan dengan nilai noise yang ada, atau dirumuskan dengan: ( Ket : a : nilai bilangan acak berdistribusi uniform dari noise. p : presentase noise. y(i,j) : nilai citra terkena noise. x(i,j) : nilai citra sebelum kena noise. Untuk membangkitkan bilangan acak berdistribusi gaussian, tidak dapat langsung menggunakan fungsi rnd, tetapi diperlukan suatu metode yang digunakan untuk mengubah distribusi bilangan acak ke dalam fungsi f tertentu. Dalam buku ini digunakan metode rejection untuk memudahkan dalam alur pembuatan programnya. Metode rejection dikembangkan dengan cara membangkitkan dua bilangan acak (x,y) dan ditolak bila y > f(x). ) ( )

2. Noise Uniform Noise Uniform seperti halnya noise gausssian dapat dibangkitkan dengan cara membangkitkan bilangan acak [0,1] dengan distribusi uniform. Kemudian untuk titik-titik yang terkena noise, nilai fungsi citra ditambahkan dengan nilai noise yang ada, atau dirumuskan dengan : ( Ket : a : nilai bilangan acak berdistribusi uniform dari noise. p : presentase noise. y(i,j) : nilai citra terkena noise. x(i,j) : nilai citra sebelum kena noise. Noise uniform ini merupakan noise sintesis yang sebenarnya dalam penerapannya jarang digunakan, tetapi secara pemrograman pembangkitan noise uniform ini merupakan jenis pembangkitan noise yang paling mudah. 3. Reduksi noise menggunakan Filter Rata-Rata Ada berbagai macam teknik untuk mengurangi (reduksi) noise, salah satunya menggunakan filter rata-rata. Dalam pengertian noise sebagai suatu nilai yang berbeda dengan semua tetangganya maka dapat dikatakan noise merupakan nilai-nilai yang berada pada frekwensi tinggi, untuk mengurangi noise digunakan Low Pass Filter (LPF). Salah satu dari bentuk LPF adalah filter rata-rata. Filter rata-rata merupakan filter H dalam bentuk matrik yang berukuran mxn, dan nilainya adalah sama untuk setiap elemen, dan karena bersifat LPF maka jumlah seluruh elemen adalah satu, dan dituliskan dengan : ( ) ) ( )

Filter rata-rata berukuran 3x3 yaitu : [ ] atau ditulis [ ]

Filter rata-rata berukuran 5x5 yaitu :

Peningkatan ukuran filter memang akan semakain banyak mengurangi filter tetapi terjadi proses blur yang tidak dapat dihindari, hall ini menyebabkan nilai SNR juga akan semakin rendah. 4. Reduksi Noise menggunakan Filter Gaussian Filter lain yang banyak digunakan dalam mereduksi noise selain filter rata-rata adalah filter gaussian. Filter gaussian ini sebenarnya hampir sama dengan filter rata-rata hanya ada nilai bobot yang tidak rata seperti pada filter rata-rata, tetapi mengikuti fungsi gaussian sebagai berikut : ( Ket : s : sebaran dari fungsi Gaussian (mx, my) : titik tengah dari fungsi Gaussian Berdasarkan rumus dari fungsi gaussian di atas untuk ukuran 3x3 akan diperoleh matrik kernel filter gaussian : [ ] atau [ ] )
(( ) ( ) )

Kernel filter gaussian untuk ukuran 5x5 adalah :

[ Kernel filter gaussian untuk ukuran 7x7 adalah :

Berikut ini hasil dari program filter gaussian di atas dengan ukuran kernel yang diubah-ubah, yaitu 3x3, 5x5 dan 7x7. Hall ini dapat dilakukan dengan mengubah nilai Nfilter yang ada pada even form_load dengan nilai 3, 5 atau 7 secara manual, dan kemudian jalankan programnya. Perhatikan bagaimana hasil dari masing-masing ukuran filter gaussian dan bandingkan dengan dengan hasil dari filter rata-rata.

Prosedur Percobaan I. Membangkitkan Noise dengan algoritma rata-rata 1. Buatlah project baru dan tambahkan komponen pada form sehingga tampak seperti gambar berikut ini :

2. Tulislah kode program untuk form1, DivListBox1, DirListBox1, dan FileListBox1 dengan kode berikut : Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub File1_Click() Picture1.Picture = LoadPicture(File1.Path + "\" + File1.FileName) End Sub Private Sub Form_Load() File1.Pattern = "*.bmp;*.jpg;*.jpeg;*.gif;*.tif" End Sub 3. Tambahkan kode berikut pada CommandButton1 dengan kode berikut ini : Private Sub Command1_Click() probNoise = Val(Text1)

For i = 1 To Picture1.ScaleWidth Step 15 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture1.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) wx = Int((r + g + b) / 3) Picture1.PSet (i, j), RGB(wx, wx, wx) 'Pembangkitan Noise sw = Rnd wx = Abs(wx + 256 * sw * probNoise) If wx > 255 Then wx = 255 Picture2.PSet (i, j), RGB(wx, wx, wx) Next j Next i End Sub 4. Eksekusi Program, pilih citra, isi probabilitas noise pada Text1 dengan 0,1 kemudian click CommandButton1. Amati (print) citra hasil. 5. Ubahlah probabilitas noise menjadi 0,2 , 0,3 , 0,4 , 0,5 , 0,6 , dan 0,7 print hasil citra.

II.

Membangkitkan Noise dengan algoritma Gaussian 1. Tulislah kode program untuk membangkitkan noise dengan algoritma Gaussian berikut ini pada tombol CommandButton2. Private Sub Command2_Click() probNoise = Val(Text1) For i = 1 To Picture1.ScaleWidth Step 15 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture1.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) wx = Int((r + g + b) / 3) Picture1.PSet (i, j), RGB(wx, wx, wx)

'Pembangkitan Noise Gaussian 'Menggunakan metode Rejection sw = 0 While sw = 0 x = 2 * Rnd - 1 y = Rnd If y < Exp(-x ^ 2) Then sw = x End If Wend wx = Abs(wx + sw * 127 * probNoise) If wx > 255 Then wx = 255 Picture2.PSet (i, j), RGB(wx, wx, wx) Next j Next i End Sub 2. Eksekusi program dan print hasil citra.

III. Membangkitkan Noise pada citra dengan algoritma Salt and Papper. 1. Tulislah kode program untuk membangkitkan noise dengan algoritma Salt and Papper berikut ini pada tombol CommandButton3. Private Sub Command3_Click() probNoise = Val(Text1) For i = 1 To Picture1.ScaleWidth Step 15 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture1.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) wx = Int((r + g + b) / 3) Picture1.PSet (i, j), RGB(wx, wx, wx) 'Pembangkitan Noise If sw < probNoise Then wx = 255 Picture2.PSet (i, j), RGB(wx, wx, wx)

Next j Next i End Sub 2. Eksekusi program dan print hasil citra.

IV. Membangkitkan Noise dengan algoritma Speckle 1. Tulislah kode program untuk membangkitkan noise dengan algoritma Speckle berikut ini pada tombol CommandButton4. Private Sub Command4_Click() probNoise = Val(Text1) For i = 1 To Picture1.ScaleWidth Step 15 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture1.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) wx = Int((r + g + b) / 3) Picture1.PSet (i, j), RGB(wx, wx, wx) 'Pembangkitan Noise sw = Rnd If sw < probNoise Then wx = 0 Picture2.PSet (i, j), RGB(wx, wx, wx) Next j Next i End Sub 2. Eksekusi program dan cetak hasil eksekusi.

V.

Reduksi noise dengan algoritma rata-rata, kernel 3x3 1. Buatlah project baru dengan nama reduksi, tambahkan komponen pada form seperti yang terlihat pada gambar berikut.

2. Tulislah kode program untuk form1, DivListBox1, DirListBox1, dan FileListBox1 dengan kode berikut : Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub File1_Click() Picture1.Picture = LoadPicture(File1.Path + "\" + File1.FileName) End Sub Private Sub Form_Load() File1.Pattern = "*.bmp;*.jpg;*.jpeg;*.gif;*.tif" End Sub 3. Tambahkan kode program kernel berikut ini pada form1 Randomize Timer For i = 1 To 3 For j = 1 To 3 h(i, j) = 1 / 9 Next j Next i

4. Tulis kode berikut ini pada CommandButton1. Private Sub Command1_Click() probNoise = Val(Text1) dx = 0 sx = 0 n1 = 0 For i = 1 To Picture1.ScaleWidth Step 15 n1 = n1 + 1 n2 = 0 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture1.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) wx = Int((r + g + b) / 3) n2 = n2 + 1 wt(n1, n2) = wx Picture1.PSet (i, j), RGB(wx, wx, wx) 'Pembangkitan Noise Gaussian 'Menggunakan Metode Rejection sw = 0 While sw = 0 x = 2 * Rnd - 1 y = Rnd If y < Exp(-x ^ 2) Then sw = x End If Wend wx1 = Abs(wx + sw * 255 * probNoise) If wx1 > 255 Then wx1 = 255 Picture2.PSet (i, j), RGB(wx1, wx1, wx1) nx = nx + Abs(wx1 - wx) sx = sx + Abs(wx) Next j Next i

snr = 10 * Log(sx / nx) / Log(10) Label5.Caption = snr End Sub 5. Untuk menfilter citra tempatkan kode program berikut ini pada CommandButton2. Private Sub Command2_Click() Dim xt(400, 400) As Integer 'RGB to Gray n1 = 0 For i = 1 To Picture1.ScaleWidth Step 15 n1 = n1 + 1 n2 = 0 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture2.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) n2 = n2 + 1 wx = Int((r + g + b) / 3) xt(n1, n2) = wx Next j Next i 'Proses Filtering dengan Konvolusi nx = 0 sx = 0 For i = 1 To n1 For j = 1 To n2 z=0 For u1 = -1 To 1 For u2 = -1 To 1 z = z + h(u1 + 2, u2 + 2) * xt(i + u1, j + u2) Next u2 Next u1 Picture3.PSet ((i - 1) * 15 + 1, (j - 1) * 15 + 1), RGB(z, z, z) nx = nx + Abs(z - wt(i, j))

sx = sx + Abs(wt(i, j)) Next j Next i snr = 10 * Log(sx / nx) / Log(10) Label3.Caption = snr End Sub 6. Tambahkan deklarasi variable berikut pada permulaan program. Dim wt(400, 400) As Integer Dim h(3, 3) As Single 7. Eksekusi Program dan print hasil eksekusi. VI. Reduksi noise dengan algoritma rata-rata, kernel 5x5 1. Tulislah kode program untuk membangkitkan noise pada citra pada tombol CommandButton3. Private Sub Command3_Click() probNoise = Val(Text2) dx = 0 sx = 0 n1 = 0 For i = 1 To Picture1.ScaleWidth Step 15 n1 = n1 + 1 n2 = 0 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture1.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) wx = Int((r + g + b) / 3) n2 = n2 + 1 wt(n1, n2) = wx Picture1.PSet (i, j), RGB(wx, wx, wx) 'Pembangkitan Noise Gaussian 'Menggunakan Metode Rejection sw = 0

While sw = 0 x = 2 * Rnd - 1 y = Rnd If y < Exp(-x ^ 2) Then sw = x End If Wend wx1 = Abs(wx + sw * 255 * probNoise) If wx1 > 255 Then wx1 = 255 Picture2.PSet (i, j), RGB(wx1, wx1, wx1) nx = nx + Abs(wx1 - wx) sx = sx + Abs(wx) Next j Next i snr = 10 * Log(sx / nx) / Log(10) Label2.Caption = snr End Sub 2. Tambahkan kode program berikut ini pada Form1 Randomize Timer For i = 1 To Nfilter For j = 1 To Nfilter h(i, j) = 1 / (Nfilter ^ 2) Next j Next i 3. Definisikan variable global berikut pada awal program Dim wt(400, 400) As Integer Dim h(3, 3) As Single Dim Nfilter As Integer 4. Tulislah program untuk mereduksi noise dengan kernel 5x5 pada CommandButton4. Private Sub Command4_Click() Dim xt(400, 400) As Integer 'RGB to Gray n1 = 0 For i = 1 To Picture1.ScaleWidth Step 15 n1 = n1 + 1

n2 = 0 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture2.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) n2 = n2 + 1 wx = Int((r + g + b) / 3) xt(n1, n2) = wx Next j Next i 'Proses Filtering dengan Konvolusi nx = 0 sx = 0 For i = 1 To n1 For j = 1 To n2 z=0 For u1 = -1 To 1 For u2 = -1 To 1 z = z + h(u1 + 2, u2 + 2) * xt(i + u1, j + u2) Next u2 Next u1 Picture3.PSet ((i - 1) * 15 + 1, (j - 1) * 15 + 1), RGB(z, z, z) nx = nx + Abs(z - wt(i, j)) sx = sx + Abs(wt(i, j)) Next j Next i snr = 10 * Log(sx / nx) / Log(10) Label3.Caption = snr End Sub 5. Eksekusi program dan print citra hasil eksekusi.

VII. Reduksi noise dengan algoritma Gaussian 1. Buatlah project baru dan tambahkan komponen pada form seperti yang terlihat pada gambar berikut.

2. Tulislah kode program untuk form1, DivListBox1, DirListBox1, dan FileListBox1 dengan kode berikut : Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub File1_Click() Picture1.Picture = LoadPicture(File1.Path + "\" + File1.FileName) End Sub Private Sub Form_Load() File1.Pattern = "*.bmp;*.jpg;*.jpeg;*.gif;*.tif" End Sub 3. Tulislah kode berikut ini pada CommandButton1, untuk membangkitkan Noise Private Sub Command1_Click() probNoise = Val(Text1) dx = 0

sx = 0 n1 = 0 For i = 1 To Picture1.ScaleWidth Step 15 n1 = n1 + 1 n2 = 0 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture1.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) wx = Int((r + g + b) / 3) n2 = n2 + 1 wt(n1, n2) = wx Picture1.PSet (i, j), RGB(wx, wx, wx) 'Pembangkitan Noise Gaussian 'Menggunakan metode Rejection sw = 0 While sw = 0 x = 2 * Rnd - 1 y = Rnd If y < Exp(-x ^ 2) Then sw = x End If Wend wx1 = Abs(wx + sw * 255 * probNoise) If wx1 > 255 Then wx1 = 255 Picture2.PSet (i, j), RGB(wx1, wx1, wx1) nx = nx + Abs(wx1 - wx) sx = sx + Abs(wx) Next j Next i snr = (10 * Log(sx / nx)) / Log(10) Label2.Caption = snr End Sub 4. Tambahkan kode berikut ini pada CommandButton2 untuk reduksi noise.

Private Sub Command2_Click() Dim xt(400, 400) As Integer 'RGB to Gray n1 = 0 For i = 1 To Picture1.ScaleWidth Step 15 n1 = n1 + 1 n2 = 0 For j = 1 To Picture1.ScaleHeight Step 15 warna = Picture2.Point(i, j) r = warna And RGB(255, 0, 0) g = Int((warna And RGB(0, 255, 0)) / 256) b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256) n2 = n2 + 1 wx = Int((r + g + b) / 3) xt(n1, n2) = wx Next j Next i 'Proses Filter dengan konvolusi nx = 0 sx = 0 For i = 1 To n1 For j = 1 To n2 z=0 For u1 = -1 To 1 For u2 = -1 To 1 z = z + h(u1 + 2, u2 + 2) * xt(i + u1, j + u2) Next u2 Next u1 Picture3.PSet ((i - 1) * 15 + 1, (j - 1) * 15 + 1), RGB(z, z, z) nx = nx + Abs(z - wt(i, j)) sx = sx + Abs(wt(i, j)) Next j Next i snr = 10 * Log(sx / nx) / Log(10)

Label3.Caption = snr End Sub 5. Ubahlah prosedur form1_Load menjadi seperti kode berikut ini Private Sub Form_Load() File1.Pattern = "*.bmp;*.jpg;*.jpeg;*.gif;*.tif" Randomize Timer Nfilter = 3 s = 0.5 m = Int(Nfilter / 2) + 1 sh = 0 For i = 1 To Nfilter t1 = (i - m) / (m - 1) For j = 1 To Nfilter t2 = (j - m) / (m - 1) h(i, j) = Exp(-(t1 ^ 2 + t2 ^ 2) / (2 * s ^ 2)) / (s ^ 2 * 3.14 ^ 0.5) sh = sh + h(i, j) Next j Next i For i = 1 To Nfilter For j = 1 To Nfilter h(i, j) = h(i, j) / sh Next j Next i End Sub 6. Deklarasikan variable global berikut di awal program. Dim wt(400, 400) As Integer Dim h(5, 5) As Single Dim Nfilter As Integer 7. Eksekusi program dan cetak hasil eksekusi.

TUGAS 1. Pada percobaan I IV bandingkan noise yang dihasilkan. Apa perbedaan masing-masing algoritma? 2. Bandingkan hasil percobaan V dan VI. Jelaskan analisa saudara! 3. Pada percobaan VII, ubahlah ukuran kernel 5x5 dan bandingkan hasil eksekusi. Jelaskan analisa saudara! Jawab 1. Gaussian Semakin besar nilai prosentasenya, maka semakin banyak titik-titik sehingga membuat kabur citra yang dihasilkan.

0.2

0.3

0.4

0.5

0.7

Noise Uniform

0.2

0.3

0.4

0.5

0.7

Salt And Pepper

0.2

0.3

0.4

0.5 0.7 Pada gambar dari hasil noise Salt and Pepper terlihat banyak titik-titik putih, karena noise Salt and Pepper akan memberikan warna putih pada titik yang terkena noise. Ini terlihat seperti taburan garam. Semakin besar nilai prosentasenya, maka semakin banyak titik-titik putih yang terdapat pada citra yang akan dihasilkan. Speckle

0.2

0.3

0.4

0.5 0.7 Pada gambar noise Speckel lebih banyak titik-titik hitam, karena noise Speckle memberikan warna hitam pada titik yang terkena noise. Semakin besar nilai prosentasenya, maka semakin banyak titik-titik hitam sehingga membuat gelap pada citra yang akan dihasilkan.

2. Pada gambar di atas bahwa Reduksi Noise menggunakan filter rata-rata terdapat titik-titik yang kemudian dilakukan blur sehingga hasilnya akan menjadi sedikit lebih buram. Bila dilakukan perbandingan antara reduksi noise menggunakan filter rata kernel 3x3 dengan 5x5, maka akan lebih buram. Semakin besar nilai kernelnya, maka semakin besar tingkat blurnya.

Hasil Running Kernel 3x3

Hasil Running Kernel 5x5

3. Pada gambar di atas bahwa metode Reduksi Noise menggunakan Filter Gaussian ini hampir sama dengan Reduksi Noise menggunakan Filter Rata-Rata. Hanya saja metode ini tidak menghasilkan gambar yang di blur. Ini karena metode ini ada nilai bobot yang tidak rata seperti pada filter rata-rata.

Reduksi Noise Gaussian Kernel 5X5

Anda mungkin juga menyukai