Laporan Prak Pengolahan Citra

download Laporan Prak Pengolahan Citra

of 12

description

Praktikum Pengolahan Citra. Menggunakan Bahasa C#. Semoga bermanfaat yah..... jangan dicopas semuaaaa. kalo bisa dipahami dulu gitu lo. Biar sama2 sama bisa bro. oke oke hahahahahahahahahahahahahahahahahahahahahahahahahahahahaha

Transcript of Laporan Prak Pengolahan Citra

Laporan Resmi Pengolahan Citra

Laporan Resmi Pengolahan CitraNoise & Filter NoiseHendri Antomy | 7411040023

A. Source Codeusing 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) { 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) { 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; }

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; 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; } }}

B. Percobaan Dan Analisa1. Gaussian NoiseGaussian Filter

AverageFilter

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.

2. Speckle NoiseGaussian Filter

AverageFilter

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.

3. Salt & Pepper NoiseGaussian Filter

AverageFilter

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.HendriZhazha11