Program Noise Reduction Dengan 3 Filter Dengan Microsoft Visual Studio 2010

Program Noise Reduction Dengan 3 Filter Dengan Microsoft Visual Studio 2010

Noise Reduction




Noise reduction adalah proses untuk mengurangi noise menggunakan Low Pass
Filter (LPF). Ada 3 filer yang bisa digunakan untuk mengurangi noise pada gambar,
yaitu filter rata-rata, filter gaussian dan filter median.
Hal yang perlu kita ingat pada kernel filter untuk noise reduction adalah: filter yang
digunakan adalah LPF dengan sifat-sifat kernel sebagai berikut:
1. Filter rata-rata
Filter rata-rata adalah filter yang nilai-nilai kernelnya seragam sesuai dengan jumlah
titik kernelnya. Contoh kernel filter rata-rata 3x3 adalah:

2. Filter Gaussian
Filter Gaussian sebenarnya mirip dengan filter rata-rata, adalah filter yang nilai-nilai
kernelnya seragam sesuai dengan jumlah titik kernelnya dengan memberikan
pembobot lebih pada titik tengahnya. Contoh kernel filter Gaussian 3x3 adalah:
3. Filter Median
Filter Median adalah filter non linier untuk mengurangi noise. Dalam proses ini, kita
mengambil nilai-nilai pada titik (x,y) dan 8 tetangganya. Setelah itu dari nilai-nilai
tersebut dicari median (titik-tengahnya). Nilai median ini yang akan mengisi pada
titik (x,y) yang baru. Hasilnya memang sangat bagus, namun prosesnya lambat
karena perhitungan median menggunakan proses sorting.

Oke langsung saja kita Praktekan contoh program tersebut

Langkah-langkah berikut adalah pembuatan program untuk mereduksi noise.
(1) Buka Visual Studio .Net 2010. Buka project “Image9” dengan
File-->Project-->Open Project.
(2) Setelah keluar form baru dari project yang dibuat, tambahkan 3 komponen
button dan 1 buah picturebox
(3) Pada Button6, ubah text menjadi “Filter Rata-rata”. Pada Button7, ubah text
menjadi “Filter Gaussian”. Pada Button8, ubah text menjadi “Filter Median”.
Pada Picturebox2, atur size modenya menjadi StrecthImage.
(4) Tambahkan obyek Bitmap di Class Form1, yaitu objBitmap2.


Sorce Code 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Image10
{
    public partial class Form1 : Form
    {
        Bitmap objBitmap;
        Bitmap objBitmap1;
        Bitmap objBitmap2;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult d = openFileDialog1.ShowDialog();
            if (d == DialogResult.OK)
            {
                objBitmap = new Bitmap(openFileDialog1.FileName);
                pictureBox1.Image = objBitmap;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int r = w.R;
                    int g = w.G;
                    int b = w.B;
                    int xg = (int)((r + g + b) / 3);
                    Color wb = Color.FromArgb(xg, xg, xg);
                    objBitmap.SetPixel(x, y, wb);
                }
            pictureBox1.Image = objBitmap;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            objBitmap1 = new Bitmap(objBitmap);
            int a = Convert.ToInt16(textBox1.Text);
            Random r = new Random();
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int xg = w.R;
                    int xb = xg;
                    int nr = r.Next(0, 100);
                    if (nr < a)
                    {
                        int ns = r.Next(0, 256) - 128;
                        xb = (int)(xg + ns);
                        if (xb < 0) xb = -xb;
                        if (xb > 255) xb = 255;
                    }
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap1.SetPixel(x, y, wb);
                }
            pictureBox2.Image = objBitmap1;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            objBitmap1 = new Bitmap(objBitmap);
            int a = Convert.ToInt16(textBox1.Text);
            Random r = new Random();
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int xg = w.R;
                    int xb = xg;
                    int nr = r.Next(0, 100);
                    if (nr < a) xb = 0;
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap1.SetPixel(x, y, wb);
                }
            pictureBox2.Image = objBitmap1;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            objBitmap1 = new Bitmap(objBitmap);
            int a = Convert.ToInt16(textBox1.Text);
            Random r = new Random();
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int xg = w.R;
                    int xb = xg;
                    int nr = r.Next(0, 100);
                    if (nr < a) xb = 255;
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap1.SetPixel(x, y, wb);
                }
            pictureBox2.Image = objBitmap1;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            objBitmap2 = new Bitmap(objBitmap1);
            for(int x =1; x < objBitmap.Width - 1; x++)
                for (int y = 1; y < objBitmap.Height - 1; y++)
                {
                    Color w1 = objBitmap1.GetPixel(x - 1, y - 1);
                    Color w2 = objBitmap1.GetPixel(x - 1, y);
                    Color w3 = objBitmap1.GetPixel(x - 1, y + 1);
                    Color w4 = objBitmap1.GetPixel(x, y-1);
                    Color w5 = objBitmap1.GetPixel(x, y);
                    Color w6 = objBitmap1.GetPixel(x, y + 1);
                    Color w7 = objBitmap1.GetPixel(x + 1, y - 1);
                    Color w8 = objBitmap1.GetPixel(x + 1, y);
                    Color w9 = objBitmap1.GetPixel(x + 1, y + 1);
                    int x1 = w1.R;
                    int x2 = w2.R;
                    int x3 = w3.R;
                    int x4 = w4.R;
                    int x5 = w5.R;
                    int x6 = w6.R;
                    int x7 = w7.R;
                    int x8 = w8.R;
                    int x9 = w9.R;
                    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);
                    objBitmap2.SetPixel(x, y, wb);
                }
            pictureBox3.Image = objBitmap2;
        }

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

        private void button8_Click(object sender, EventArgs e)
        {
            int[] xt = new int[10];
            objBitmap2 = new Bitmap(objBitmap1);
            for (int x =1; x < objBitmap.Width - 1; x++)
                for (int y = 1; y < objBitmap.Height - 1; y++)
                {
                    Color w1 = objBitmap1.GetPixel(x - 1, y - 1);
                    Color w2 = objBitmap1.GetPixel(x - 1, y);
                    Color w3 = objBitmap1.GetPixel(x - 1, y + 1);
                    Color w4 = objBitmap1.GetPixel(x, y - 1);
                    Color w5 = objBitmap1.GetPixel(x, y);
                    Color w6 = objBitmap1.GetPixel(x, y + 1);
                    Color w7 = objBitmap1.GetPixel(x + 1, y - 1);
                    Color w8 = objBitmap1.GetPixel(x + 1, y);
                    Color w9 = objBitmap1.GetPixel(x + 1, y + 1);
                    xt[1] = w1.R;
                    xt[2] = w2.R;
                    xt[3] = w3.R;
                    xt[4] = w4.R;
                    xt[5] = w5.R;
                    xt[6] = w6.R;
                    xt[7] = w7.R;
                    xt[8] = w8.R;
                    xt[9] = w9.R;
                    for (int i=1; i < 9; i++)
                        for (int j = 1; 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];
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap2.SetPixel(x, y, wb);
                }
            pictureBox3.Image = objBitmap2;
        }
    }
}


feedback
(1) Tuliskan semua kode program dan jelaskan bagian-bagian yang dianggap
penting.
(2) Tambahkan 5%, 10% atau 20% noise gaussian. Kemudian lakukan reduksi noise
dengan filter rata-rata. Apa yang bisa dilihat dari hasil filter tersebut?
(3) Tambahkan 5%, 10% atau 20% noise speckle. Kemudian lakukan reduksi noise
dengan filter rata-rata. Apa yang bisa dilihat dari hasil filter tersebut?
(4) Tambahkan 5%, 10% atau 20% noise salt & papper. Kemudian lakukan reduksi
noise dengan filter rata-rata. Apa yang bisa dilihat dari hasil filter tersebut?
(5) Tambahkan 5%, 10% atau 20% noise gaussian. Kemudian lakukan reduksi noise
dengan filter gaussian. Apa yang bisa dilihat dari hasil filter tersebut?
(6) Tambahkan 5%, 10% atau 20% noise speckle. Kemudian lakukan reduksi noise
dengan filter gaussian. Apa yang bisa dilihat dari hasil filter tersebut?
(7) Tambahkan 5%, 10% atau 20% noise salt & papper. Kemudian lakukan reduksi
noise dengan filter gaussian. Apa yang bisa dilihat dari hasil filter tersebut?
(8) Tambahkan 5%, 10% atau 20% noise gaussian. Kemudian lakukan reduksi noise
dengan filter median. Apa yang bisa dilihat dari hasil filter tersebut?
(9) Tambahkan 5%, 10% atau 20% noise speckle. Kemudian lakukan reduksi noise
dengan filter median. Apa yang bisa dilihat dari hasil filter tersebut?
(10) Tambahkan 5%, 10% atau 20% noise salt & papper. Kemudian lakukan
reduksi noise dengan filter median. Apa yang bisa dilihat dari hasil filter
tersebut?

Jawaban

soal1
  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Image10
{
    public partial class Form1 : Form
    {
        Bitmap objBitmap;
        Bitmap objBitmap1;
        Bitmap objBitmap2;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult d = openFileDialog1.ShowDialog();
            if (d == DialogResult.OK)
            {
                objBitmap = new Bitmap(openFileDialog1.FileName);
                pictureBox1.Image = objBitmap;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int r = w.R;
                    int g = w.G;
                    int b = w.B;
                    int xg = (int)((r + g + b) / 3);
                    Color wb = Color.FromArgb(xg, xg, xg);
                    objBitmap.SetPixel(x, y, wb);
                }
            pictureBox1.Image = objBitmap;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            objBitmap1 = new Bitmap(objBitmap);
            int a = Convert.ToInt16(textBox1.Text);
            Random r = new Random();
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int xg = w.R;
                    int xb = xg;
                    int nr = r.Next(0, 100);
                    if (nr < a)
                    {
                        int ns = r.Next(0, 256) - 128;
                        xb = (int)(xg + ns);
                        if (xb < 0) xb = -xb;
                        if (xb > 255) xb = 255;
                    }
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap1.SetPixel(x, y, wb);
                }
            pictureBox2.Image = objBitmap1;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            objBitmap1 = new Bitmap(objBitmap);
            int a = Convert.ToInt16(textBox1.Text);
            Random r = new Random();
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int xg = w.R;
                    int xb = xg;
                    int nr = r.Next(0, 100);
                    if (nr < a) xb = 0;
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap1.SetPixel(x, y, wb);
                }
            pictureBox2.Image = objBitmap1;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            objBitmap1 = new Bitmap(objBitmap);
            int a = Convert.ToInt16(textBox1.Text);
            Random r = new Random();
            for (int x = 0; x < objBitmap.Width; x++)
                for (int y = 0; y < objBitmap.Height; y++)
                {
                    Color w = objBitmap.GetPixel(x, y);
                    int xg = w.R;
                    int xb = xg;
                    int nr = r.Next(0, 100);
                    if (nr < a) xb = 255;
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap1.SetPixel(x, y, wb);
                }
            pictureBox2.Image = objBitmap1;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            objBitmap2 = new Bitmap(objBitmap1);
            for(int x =1; x < objBitmap.Width - 1; x++)
                for (int y = 1; y < objBitmap.Height - 1; y++)
                {
                    Color w1 = objBitmap1.GetPixel(x - 1, y - 1);
                    Color w2 = objBitmap1.GetPixel(x - 1, y);
                    Color w3 = objBitmap1.GetPixel(x - 1, y + 1);
                    Color w4 = objBitmap1.GetPixel(x, y-1);
                    Color w5 = objBitmap1.GetPixel(x, y);
                    Color w6 = objBitmap1.GetPixel(x, y + 1);
                    Color w7 = objBitmap1.GetPixel(x + 1, y - 1);
                    Color w8 = objBitmap1.GetPixel(x + 1, y);
                    Color w9 = objBitmap1.GetPixel(x + 1, y + 1);
                    int x1 = w1.R;
                    int x2 = w2.R;
                    int x3 = w3.R;
                    int x4 = w4.R;
                    int x5 = w5.R;
                    int x6 = w6.R;
                    int x7 = w7.R;
                    int x8 = w8.R;
                    int x9 = w9.R;
                    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);
                    objBitmap2.SetPixel(x, y, wb);
                }
            pictureBox3.Image = objBitmap2;
        }

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

        private void button8_Click(object sender, EventArgs e)
        {
            int[] xt = new int[10];
            objBitmap2 = new Bitmap(objBitmap1);
            for (int x =1; x < objBitmap.Width - 1; x++)
                for (int y = 1; y < objBitmap.Height - 1; y++)
                {
                    Color w1 = objBitmap1.GetPixel(x - 1, y - 1);
                    Color w2 = objBitmap1.GetPixel(x - 1, y);
                    Color w3 = objBitmap1.GetPixel(x - 1, y + 1);
                    Color w4 = objBitmap1.GetPixel(x, y - 1);
                    Color w5 = objBitmap1.GetPixel(x, y);
                    Color w6 = objBitmap1.GetPixel(x, y + 1);
                    Color w7 = objBitmap1.GetPixel(x + 1, y - 1);
                    Color w8 = objBitmap1.GetPixel(x + 1, y);
                    Color w9 = objBitmap1.GetPixel(x + 1, y + 1);
                    xt[1] = w1.R;
                    xt[2] = w2.R;
                    xt[3] = w3.R;
                    xt[4] = w4.R;
                    xt[5] = w5.R;
                    xt[6] = w6.R;
                    xt[7] = w7.R;
                    xt[8] = w8.R;
                    xt[9] = w9.R;
                    for (int i=1; i < 9; i++)
                        for (int j = 1; 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];
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap2.SetPixel(x, y, wb);
                }
            pictureBox3.Image = objBitmap2;
        }
    }
}
bagian yang di anggap penting :
---- 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);
                    objBitmap2.SetPixel(x, y, wb);

---  int xb = (int)((x1 + x2 + x3 + x4 + 4 * x5 + x6 + x7 + x8 + x9) / 13);
                    if (xb < 0) xb = 0;
                    if (xb > 255) xb = 255;
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap2.SetPixel(x, y, wb);
--- for (int i=1; i < 9; i++)
                        for (int j = 1; 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];
                    Color wb = Color.FromArgb(xb, xb, xb);
                    objBitmap2.SetPixel(x, y, wb);
dari ketiga kode di atas menurut saya penting karena disitu lah pembeda antara filter rata-rata,Gausian dan Median
soal 2
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter rata-rata hampir sama dengan hasil dari Noise Guassian
soal 3
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter rata-rata hampir sama dengan hasil dari Noise Speckel
soal 4
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter rata-rata hampir sama dengan hasil dari Noise Salt n Paper
soal 5
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter Gausian memiliki perbedaan hasil dengan hasil Noise Guassian yaitu lebih terlihat ada nya pengurangan noise reduction pada image
soal 6
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter Gausian memiliki perbedaan hasil dengan hasil Noise Speckle yaitu lebih terlihat gelap noise reduction pada image
soal 7
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter Gausian memiliki perbedaan hasil dengan hasil Noise Salt n Paper yaitu lebih terlihat gelap noise reduction pada image
soal 8
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter Median memiliki hasil yaitu menghilangkan Noise Reduction pada Image
soal 9
  jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter Median memiliki hasil yaitu menghilangkan Noise Reduction pada image akan tetapi pada nilai 10% dan 20% masih terdapat noise reduction sedikit
soal 10
 jadi hasil dari nilai probabilitas noise 5%,10% dan 20% untuk filter Median memiliki hasil yaitu menghilangkan Noise Reduction pada image akan tetapi pada nilai 10% dan 20% masih terdapat noise reduction sedikit

Terima Kasih Sudah Berkunjung 

You may like these posts