01 June 2016

Linear Filters pada Citra

Filter 2D adalah filter untuk membentuk suatu obyek menjadi lebih terang (sharp) atau gelap (blur) sesuai dengan ukuran yang diberikan.  (aku membayangkan kalau wajahku di blur, kira2 tambah manis ngga ya ....??????)
Filter berupa matrik dengan ukuran tertentu sesuai dengan keinginan.  Tetapi biasanya sudah ada format baku matrik filter untuk membuat obyek menjadi lebih terang atau gelap.
KONVOLUSI (convolution)

Misalnya diketahui citra asal adalah A sebagai berikut :

dan matrik filternya adalah :

dirotasi 180 derajat menjadi :


maka untuk filter nilai koordinat (2,4) baris ke 2 dan kolom ke 4 adalah :
  1. Rotasi filter (convolution kernel) 180 derajat terhadap center filternya. 
  2. Geser pusat dari filter ke dalam koordinat (2,4) dari gambar asli. 
  3. Kalikan nilai filter dengan nilai citra asli pada posisi koodinat yang sama dan tambahkan dengan perkalian pada koodinat setelahnya yang bersesuaian dengan filternya sampai dengan semua filter terpakai semua.
  4. 1*2+8*9+15*4+7*7+14*5+16*3+13*6+20*1+22*8=575 ==> 575/9=63.88889
  5. Sehingga nilai 14 pada citra A digantikan dengan nilai baru 63

Caranya adalah dengan menempelkan filter dengan center dari filter sama dengan titik koodinat yang hendak dicari, misalnya di (2,4) terus dilakukan perhitungan.  Coba perhatikan ilustrasi berikut :

Gambar 1. Rotasi filter dan penempatan filter pada koodinat

Cara ini dilakukan terus menerus (menggeser filter) untuk semua nilai piksel citra asli, sehingga semua nilai citra asli dihasilkan nilai baru semua.


KORELASI (Correlation)

Ini adalah bentuk lain filter tetapi tidak dengan tidak me-rotasi filternya (filter tetap).  Korelasi disebut sebagai bentuk relasi tertutup terhadap konvolusi.

Sehingga hasil ilustrasi proses korelasi tersebut dapat dilihat pada gambar.

Gambar 3.  Perhatikan filternya.  Tidak dirotasi

Sehingga hasil perhitungannya adalah :

1*8+8*1+15*6+7*3+14*5+16*7+13*4+20*9+22*2=585 ==> 585/9=65

Perhitungan ilustrasi lengkapnya sebagai berikut :
Gambar 2. Proses pergeseran dan perhitungan nilai
File excel perhitungan di atas bisa didonwload disini

Linear filtering dengan menggunakan imfilter pada matlab

clear
clear all
i=imread('kelinci-potong.jpg');
h=ones(5,5)/25;
i2=imfilter(i,h);
imshow(i),title('original image');
figure,imshow(i2),title('filtered image');


Gambar 4. Kelinci Potong.jpg
Setelah dilakukan proses imtool pada obyek kelinci potong.jpg, maka diperoleh nilai pixel pada koordinat kiri bawah terutama pada koordinat (3,298) yaitu RGB (90,105,86).  
Agar sama hasilnya ini link dari Kelinci Potong.jpg, mohon didownload.

Gambar 5. Nilai Pixel gambar asli


Bila filter yang digunakan adalah h=ones(5,5)/25; dimana filternya berukuran 5x5 dengan rata-rata (dibagi dengan 25 karena ada 25 pixel) --> perhatikan garis kuning.
Misalnya yang akan kita hitung warna merah / RED saja, maka hasilnya adalah :


Rata-rata dari matrik di atas adalah 54.04 yang dibulatkan menjadi 54 saja.

Gambar 6. Filter Image
Kita lihat pada koordinat yang sama pada gambar 7, maka warna merah bernilai 54
Demikian juga untuk nilai yang lainnya adalah hasil nilai rata-rata dari matrik 5x5 pixel gambar aslinya.

Gambar 7. Nilai pixel hasil filtering

Data Types

Pada matlab diberikan perintah sebagai berikut :

A=magic(5);
A=[17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 19 12 19 21 3 11 18 25 2 9]
h=[-1 0 1]

Dengan perintah baris kedua, maka akan diperoleh :
A =
   Columns 1 through 11
     17    24     1     8    15    23     5     7    14    16     4
   Columns 12 through 22
      6    13    20    22    19    12    19    21     3    11    18
   Columns 23 through 25
     25     2     9

Selanjutnya pada command dialog diberikan filter :

h=[-1 0 1]

Setelah dienter, maka akan tampil :
h =
    -1     0     1

Selanjutnya diberikan perintah untuk menfilter image array, sebagai berikut :

imfilter(A,h);

Maka hasilnya adalah munculnya variable jawaban ans dengan tampilan sebagai berikut :

Gambar 8.  Workspace dari imfilter(A,h);

Kalau kita edit maka akan tampil sebagai berikut :

Gambar 8. Variabel editor 1 dimensi nilai pixel

Data array asal :

17  24  1  8  15
23  5  7  14  16
4  6  13  20  22
10  12  19  21  3
11  18  25  2  9

Setelah difilter menjadi :
24           -16         -16         14           15          
-10         -16         9             9             -10        
-10         9             14           9             -10        
-10         9             9             -16         -10        
15           14           -16         -16         -2


Dengan perintah yang berbeda (Korelasi):

A=uint8(magic(5));
imfilter(A,h);         % filter dengan korelasi

Maka jawaban yang muncul adalah :

Gambar 9. Workspace 2 dimensi

Gambar10. Varibel editor 2 dimensi

Dengan konvolusi, maka akan diperoleh :

imfilter(A,h,'conv');        % filter dengan konvolusi

Hasil filter dengan convolusi adalah :

Gambar 11.  Variabel editor hasil konvolusi 2 dimensi
Pilihan pemrosesan batas tepi

Terdapat 2 cara, yaitu :
  1. Diberikan nilai tertentu yang sama  untuk pixel yang berada diluar batas
  2. Diberikan nilai = 0

Hal tersebut bias diilustrasikan sebagai berikut :

Gambar 12.  Penentuan nilai tepi dengan nilai sembarang
Misalnya  nilai tersebut adalah :

Gambar 13.  Nilai tepi yang direplikasi

Gambar 14.  Nilai tepi=0

Ketika batas diluar pixel diisi dengan angka 0, maka tepi akan kelihatan batas kotak hitam.  Perhatikan gambar 15 dan 16.

Gambar 15. Image dengan filter tepi=0
Dan yang menggunakan replication tepi, sehingga output  menjadi :

Gambar 16. Image dengan tepi replikasi

Bandingkan tepi gambarnya.

Gambar 15 dan 16 diperoleh dengan menggunakan perintah matlab :

>> I=imread('kelinci-potong.jpg');
>> h=ones(5,5)/25;
>> I2=imfilter(I,h);                         % filter dengan tepi=0
>> I3=imfilter(I,h,'replicate');          % filter dengan tepi replikasi

Demikian para pembaca budiman, sedikit sharing saya. Kalau ada salah mohon maaf, kalau ada kue mohon dibagi.....xixiixixixixi





2 comments:

  1. I love it whenever people get together and share opinions.
    Great site, keep it up!

    ReplyDelete