Praktikum Pengolahan Citra Pertemuan 8 – Konvolusi dan Image Filtering
Prinsip Filter Dalam Image Processing Gambar selalu berada pada frekwensi rendah, hal ini karena setiap titik pada gambar mempunyai banyak kemiripan warna dengan titik-titik tetangganya. Bila suatu gambar menunjukkan frekwensi tinggi maka pada gambar tersebut banyak titik yang nilai gray-scalenya (warna) yang berbeda jauh dengan titik-titik tetangganya. Frekwensi rendah Frekwensi Tinggi
Prinsip Filter Dalam Image Processing Untuk membuang titik yang berbeda dengan titik-titik tetangganya (proses reduksi noise) maka dilakukan Low- Pass Filter (LPF), suatu bentuk filter yang mengambil data pada frekwensi rendah dan membuang data pada frekwensi tinggi Untuk mempertahankan titik yang berbeda dengan titik-titik tetangganya (proses deteksi tepi) maka dilakukan High-Pass Filter (HPF), suatu bentuk filter yang mengambil data pada frekwensi tinggi dan membuang data pada frekwensi rendah. Untuk mempertahankan titik yang dekat dengan titik- titik tetangganya, dan titik yang berbeda dengan titik- titik tetangganya (sharperness) maka dilakukan Band Pass Filter, yang berguna mempertahankan frekwensi rendah dan tinggi yang tidak terlalu rendah dan tinggi.
Prinsip Filter Dalam Image Processing Hasil gambar yang difilter Y dari gambar asal X dan filter dengan kernel H dapat dihitung dengan: Konvolusi
Konvolusi Konvolusi dari H dan X didefinisikan dengan: Dimana (x,y) adalah posisi filter dan (Tx,Ty) adalah titik yang difilter
Proses Konvolusi H = X =
Contoh Konvolusi
Petunjuk Praktikum Buatlah form dengan tiga buah button, dua buah pictureBox dan sebuah OpenFileDialog. Aturlah form seperti gambar berikut.
Petunjuk Praktikum Ubah text pada Button1 menjadi “Load”, Button2 menjadi “GrayScale”, Button3 menjadi “Histogram Equalization”. Aturlah picture box dengan mode StretchImage. Kemudian tambahkan dua object bitmap. Bitmap objBitmap1; Bitmap objBitmap2;
Petunjuk Praktikum Double klik pada button1 dan tambahkan program berikut. Program tersebut bertujuan untuk melakukan load file image dari komputer. DialogResult d = openFileDialog1.ShowDialog(); if(d == DialogResult.OK) { objBitmap1 = new Bitmap(openFileDialog1.FileName); pictureBox1.Image = objBitmap1; }
Petunjuk Praktikum Pada button2 kita tambahkan code untuk konvolusi dengan kernel 4 node. Dengan matrix sebagai berikut: H= 0 0,2 0 0,2 0,2 0,2 0 0,2 0
Petunjuk Praktikum Double klik pada button2 dan tambahkan program berikut. float[] a=new float[5]; a[0] = (float)0.2; a[1] = (float)0.2; a[2] = (float)0.2; a[3] = (float)0.2; a[4] = (float)0.2; objBitmap2 = new Bitmap(objBitmap1); for(int x=1;x<objBitmap1.Width-1;x++) for (int y = 1; y < objBitmap1.Height - 1; y++) { Color w1 = objBitmap1.GetPixel(x-1,y); Color w2 = objBitmap1.GetPixel(x+1, y); Color w3 = objBitmap1.GetPixel(x, y-1); Color w4 = objBitmap1.GetPixel(x, y+1); Color w = objBitmap1.GetPixel(x, y);
Petunjuk Praktikum Lanjutan dari program pada button 2 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 xg = (w.R + w.G + w.B) / 3; int xb = (int)(a[0] * xg); xb = (int)(xb + a[1] * x1 + a[2] * x2 + a[3] * x3 + a[4] * x4); if (xb < 0) xb = 0; if (xb > 255) xb = 255; Color wb = Color.FromArgb(xb,xb,xb); objBitmap2.SetPixel(x,y,wb); } pictureBox2.Image = objBitmap2;
Petunjuk Praktikum Pada button3 kita tambahkan code untuk konvolusi dengan kernel 8 node. Dengan matrix sebagai berikut: H= 0,1 0,1 0,1 0,1 0,2 0,1 0,1 0,1 0,1
Petunjuk Praktikum Double klik pada button3 dan tambahkan program berikut. float[] a = new float[10]; a[1] = (float)0.1; a[2] = (float)0.1; a[3] = (float)0.1; a[4] = (float)0.1; a[5] = (float)0.2; a[6] = (float)0.1; a[7] = (float)0.1; a[8] = (float)0.1; a[9] = (float)0.1; objBitmap2 = new Bitmap(objBitmap1); for (int x = 1; x < objBitmap1.Width - 1; x++) for (int y = 1; y < objBitmap1.Height - 1; y++) {
Petunjuk Praktikum Lanjutan program pada button3. 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 + 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;
Petunjuk Praktikum Lanjutan program pada button3. 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)(a[1] * x1 + a[2] * x2 + a[3] * x3); xb = (int)(xb + a[4] * x4 + a[5] * x5 + a[6] * x6); xb = (int)(xb + a[7] * x7 + a[8] * x8 + a[9] * x9); if (xb < 0) xb = 0; if (xb > 255) xb = 255; Color wb = Color.FromArgb(xb, xb, xb); objBitmap2.SetPixel(x, y, wb); } pictureBox2.Image = objBitmap2;
Capture Program
Tugas Ubah matrik kernel 4 node dengan matrik berikut