You are on page 1of 12

Laporan Resmi

Pengolahan Citra
Noise & Filter Noise
Hendri Antomy | 7411040023


HendriZhazha

1
A. Source Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Noise
{
public partial class Form1 : Form
{
Bitmap gbrAsli, gbrHasil;
public Form1()
{
InitializeComponent();
}

private void btnLoad_Click(object sender, EventArgs e)
{
DialogResult d = openFileDialog1.ShowDialog();
if (d == DialogResult.OK)
{
gbrAsli = new Bitmap(openFileDialog1.FileName);
for (int x = 0; x < gbrAsli.Width; x++)
for (int y = 0; y < gbrAsli.Height; y++)
{
Color w = gbrAsli.GetPixel(x, y);
int xg = (int)((w.R + w.G + w.B) / 3);
Color new_w = Color.FromArgb(xg, xg, xg);
gbrAsli.SetPixel(x, y, new_w);
}
pictureAsli.Image = gbrAsli;
}

}

private void btnGauss_Click(object sender, EventArgs e)
{
gbrHasil = new Bitmap(gbrAsli);
int counter = 0;
int progress = 0;
int percentage = int.Parse(txtProb.Text);
Random r = new Random();
for (int x = 0; x < gbrAsli.Width; x++)
{
for (int y = 0; y < gbrAsli.Height; y++)
{
counter++;
Color w = gbrAsli.GetPixel(x, y);
int xg = w.R;
int nr = r.Next(0, 100);
if (nr < percentage)


HendriZhazha

2
{
int ns = r.Next(0, 256) - 128;
xg = (int)(xg + ns);
if (xg < 0) xg = 0;
if (xg > 255) xg = 255;
}
Color baru = Color.FromArgb(xg,xg,xg);
gbrHasil.SetPixel(x, y, baru);
progress = (int)((counter / (gbrAsli.Width * gbrHasil.Height))*100);
progressBar.Value = progress;
labelProg.Text = progress.ToString();

}
}
pictureHasil.Image = gbrHasil;
labelHasil.Text = "Gaussian Noise";

}

private void btnSpeckle_Click(object sender, EventArgs e)
{
gbrHasil = new Bitmap(gbrAsli);
int percentage = int.Parse(txtProb.Text);
Random r = new Random();
for (int x = 0; x < gbrAsli.Width; x++)
{
for (int y = 0; y < gbrAsli.Height; y++)
{
Color w = gbrAsli.GetPixel(x, y);
int xg = w.R;
int nr = r.Next(0, 100);
if (nr < percentage)
{
xg = 0;
}
Color baru = Color.FromArgb(xg, xg, xg);
gbrHasil.SetPixel(x, y, baru);

}
}
pictureHasil.Image = gbrHasil;
labelHasil.Text = "Speckle Noise";
}

private void btnSaltPepper_Click(object sender, EventArgs e)
{
gbrHasil = new Bitmap(gbrAsli);
int percentage = int.Parse(txtProb.Text);
Random r = new Random();
for (int x = 0; x < gbrAsli.Width; x++)
{
for (int y = 0; y < gbrAsli.Height; y++)
{
Color w = gbrAsli.GetPixel(x, y);
int xg = w.R;
int nr = r.Next(0, 100);
if (nr < percentage)


HendriZhazha

3
{
int bw = r.Next(0, 2);
if(bw == 0) xg = 0;
if(bw == 1) xg = 255;
}
Color baru = Color.FromArgb(xg, xg, xg);
gbrHasil.SetPixel(x, y, baru);

}
}
pictureHasil.Image = gbrHasil;
labelHasil.Text = "Salt And Pepper Noise";
}

private void trackbar_Scroll(object sender, EventArgs e)
{
int val = trackbar.Value;
txtProb.Text = val.ToString();
}

private void progressBar_Click(object sender, EventArgs e)
{

}

private void btnAverage_Click(object sender, EventArgs e)
{
Bitmap objBitmap3 = new Bitmap(gbrHasil);
for (int x = 1; x < gbrHasil.Width - 1; x++)
for (int y = 1; y < gbrHasil.Height - 1; y++)
{
Color w1 = objBitmap3.GetPixel(x - 1, y - 1);
Color w2 = objBitmap3.GetPixel(x - 1, y);
Color w3 = objBitmap3.GetPixel(x - 1, y + 1);
Color w4 = objBitmap3.GetPixel(x, y - 1);
Color w5 = objBitmap3.GetPixel(x, y);
Color w6 = objBitmap3.GetPixel(x, y + 1);
Color w7 = objBitmap3.GetPixel(x + 1, y - 1);
Color w8 = objBitmap3.GetPixel(x + 1, y);
Color w9 = objBitmap3.GetPixel(x + 1, y + 1);
int x1 = (w1.R + w1.G + w1.B) / 3;
int x2 = (w2.R + w2.G + w2.B) / 3;
int x3 = (w3.R + w3.G + w3.B) / 3;
int x4 = (w4.R + w4.G + w4.B) / 3;
int x5 = (w5.R + w5.G + w5.B) / 3;
int x6 = (w6.R + w6.G + w6.B) / 3;
int x7 = (w7.R + w7.G + w7.B) / 3;
int x8 = (w8.R + w8.G + w8.B) / 3;
int x9 = (w9.R + w9.G + w9.B) / 3;
int xb = (int)((x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9) / 9);
if (xb < 0) xb = 0;
if (xb > 255) xb = 255;
Color wb = Color.FromArgb(xb, xb, xb);
objBitmap3.SetPixel(x, y, wb);
}
pictureFilter.Image = objBitmap3;
}


HendriZhazha

4

private void buttonGauss_Click(object sender, EventArgs e)
{
Bitmap objBitmap3 = new Bitmap(gbrHasil);
for (int x = 1; x < gbrHasil.Width - 1; x++)
for (int y = 1; y < gbrHasil.Height - 1; y++)
{
Color w1 = objBitmap3.GetPixel(x - 1, y - 1);
Color w2 = objBitmap3.GetPixel(x - 1, y);
Color w3 = objBitmap3.GetPixel(x - 1, y + 1);
Color w4 = objBitmap3.GetPixel(x, y - 1);
Color w5 = objBitmap3.GetPixel(x, y);
Color w6 = objBitmap3.GetPixel(x, y + 1);
Color w7 = objBitmap3.GetPixel(x + 1, y - 1);
Color w8 = objBitmap3.GetPixel(x + 1, y);
Color w9 = objBitmap3.GetPixel(x + 1, y + 1);
int x1 = (w1.R + w1.G + w1.B) / 3;
int x2 = (w2.R + w2.G + w2.B) / 3;
int x3 = (w3.R + w3.G + w3.B) / 3;
int x4 = (w4.R + w4.G + w4.B) / 3;
int x5 = (w5.R + w5.G + w5.B) / 3;
int x6 = (w6.R + w6.G + w6.B) / 3;
int x7 = (w7.R + w7.G + w7.B) / 3;
int x8 = (w8.R + w8.G + w8.B) / 3;
int x9 = (w9.R + w9.G + w9.B) / 3;
int xb = (int)((x1 + x2 + x3 + x4 + (x5 * 4) + x6 + x7 + x8 + x9) /
12);
if (xb < 0) xb = 0;
if (xb > 255) xb = 255;
Color wb = Color.FromArgb(xb, xb, xb);
objBitmap3.SetPixel(x, y, wb);
}
pictureFilter.Image = objBitmap3;
}

private void btnMedian_Click(object sender, EventArgs e)
{
int[] xt = new int[10];
Bitmap objBitmap3 = new Bitmap(gbrHasil);
for (int x = 1; x < gbrHasil.Width - 1; x++)
for (int y = 1; y < gbrHasil.Height - 1; y++)
{
Color w1 = objBitmap3.GetPixel(x - 1, y - 1);
Color w2 = objBitmap3.GetPixel(x - 1, y);
Color w3 = objBitmap3.GetPixel(x - 1, y + 1);
Color w4 = objBitmap3.GetPixel(x, y - 1);
Color w5 = objBitmap3.GetPixel(x, y);
Color w6 = objBitmap3.GetPixel(x, y + 1);
Color w7 = objBitmap3.GetPixel(x + 1, y - 1);
Color w8 = objBitmap3.GetPixel(x + 1, y);
Color w9 = objBitmap3.GetPixel(x + 1, y + 1);
xt[1] = (w1.R + w1.G + w1.B) / 3;
xt[2] = (w2.R + w2.G + w2.B) / 3;
xt[3] = (w3.R + w3.G + w3.B) / 3;
xt[4] = (w4.R + w4.G + w4.B) / 3;
xt[5] = (w5.R + w5.G + w5.B) / 3;
xt[6] = (w6.R + w6.G + w6.B) / 3;


HendriZhazha

5
xt[7] = (w7.R + w7.G + w7.B) / 3;
xt[8] = (w8.R + w8.G + w8.B) / 3;
xt[9] = (w9.R + w9.G + w9.B) / 3;
for (int i = 1; i < 9; i++)
{
for (int j = i; j < 9; j++)
{
if (xt[j] > xt[j + 1])
{
int a = xt[j];
xt[j] = xt[j + 1];
xt[j + 1] = a;
}
}
}
int xb = xt[5];
if (xb < 0) xb = 0;
if (xb > 255) xb = 255;
Color wb = Color.FromArgb(xb, xb, xb);
objBitmap3.SetPixel(x, y, wb);
}
pictureFilter.Image = objBitmap3;
}
}
}
















HendriZhazha

6
B. Percobaan Dan Analisa
1. Gaussian Noise
Gaussian Filter

AverageFilter



HendriZhazha

7
Median Filter


Analisa : Gaussian noise merupakan sebuah noise yang berupa titik berwarna pada gambar dan
menimbulkan efek seperti bintik-bintik. Noise ini muncul akibat pemakaian sensor yang terlalu sensitive
, sehingga warna yang seharusnya seragam malah menjadi tidak seragam dan bahkan memunculkan
noise. Kisaran noise Gaussian nilainya berubah me njadi xb=xg+ns, dimana ns berkisar -128 s/d 128.
Hasil Gaussian noise pada gambar menjadikan gambar kelinci muncul bintik-bintik, noisenya lebih
lembut dan terkesan tersebar secara merata. Untuk mengurangi noise maka menggunakan low pass
filter (LPF) yakni filter rata-rata, filter Gaussian dan filter median. Dari hasil diatas dapat dilihat bahwa
hasil proses filter terbaik adalah dengan menggunakan mendian filter. Gambar hampir nyaris menjadi
sama dengan gambar sebelum diberikan noise. Sedangkan untuk filter Gaussian, hasil proses filternya
masih terlihat adanya bintik bintik yang diakibatkan Gaussian noise walaupun sudah cukup berkurang.
Untuk average filter, hasil proses filter menunjukkan gambar menjadi sedikit lebih blur dari gambar
aslinya.









HendriZhazha

8
2. Speckle Noise
Gaussian Filter

AverageFilter



HendriZhazha

9
Median Filter


Analisa : noise speckle merupakan noise yang berupa titik-titik hitam pada gambar. Noise ini muncul
akibat dari adanya sensor-sensor yang mati. Sebuah titik(x,y) yang terkena noise speckle nilainya
berubah menjadi nol, sehingga titik itu tampak hitam. Terlihat pada gambar kelinci terdapat titik hitam
yang merata pada area gambar. Untuk mengurangi noise maka menggunakan low pass filter (LPF) yakni
filter rata-rata, filter Gaussian dan filter median. Hasil dari proses filter menunjukkan bahwa filter
median memiliki hasil proses filter yang terbaik dibanding dengan kedua filter lainnya. Karena speckle
noise ini berupa bintik bintik hitam sehingga nilai warna pixel pada noise tersebut adalah 0, maka
ketika dilakukan proses filtering menggunakan median filter, hasilnya warna pixel yang bernilai 0
tersebut tidak akan berada ditengah. Akibatnya warna pixel yang mati tersebut tidak akan diambil ketika
dilakukan proses median filter. Sehingga gambar yang dihasilkan akan menjadi lebih halus. Untuk proses
filter gaussian dan average filter, hasilnya hampir sama. Namun, hasil yang lebih baik terdapat pada
filter gaussian dimana pembobot nilai tengahnya tidak terlalu besar sehingga warna yang dihasilkan dari
proses filtering menjadi sedikit lebih cerah.








HendriZhazha

10
3. Salt & Pepper Noise
Gaussian Filter

AverageFilter



HendriZhazha

11
Median Filter


Analisa : Noise salt & pepper berupa titik-titik putih dan hitam pada gambar. Noise ini muncul akibat dari
adanya debu atau media lain yang menyebabkan lensa kotor. Sehingga ini merupakan kebalikan dari
speckel yang black spot digantikan white spot. Sebuah titik (x,y) yang terkena noise salt & pepper
nilainya berubah menjadi 255. Sehingga titik itu tampak putih. Hasil dari proses filtering menunjukkan
bahwa filter median memiliki hasil yang terbaik dibanding dengan proses menggunakan filter lainnya.
Filter gaussian menjadikan noise menjadi lebih banyak. Hal ini dikarenakan pembobot nilai tengah pada
matriks filternya besar. Sedangkan untuk filter rata rata maka gambar akan menjadi lebih blur.

You might also like