Pemfilteran Citra dalam MATLAB

Fungsi filter2dalam Matlab melakukan pemfilteran linear, dengan sintaks :

                        filter2(filter, citra, format)

dan hasilnya adalah suatu matriks bertipe double. Parameter format bersifat opsional, yang menjelaskan bagaimana menangani tepi :

·         filter2(filter, citra, ‘same’) adalah default yang menghasilkan suatu matriks berukuran sama dengan matriks citra asli. Perintah ini menggunakan penyisipan nol.

>> x=uint8(10*magic(5))
x =
  170  240   10   80  150
  230   50   70  140  160
   40   60  130  200  220
  100  120  190  210   30
  110  180  250   20   90
>> a=ones(3,3)/9
a =
    0.1111    0.1111    0.1111
    0.1111    0.1111    0.1111
    0.1111    0.1111    0.1111
>> filter2(a,x,’same’)
ans =
   76.6667   85.5556   65.5556   67.7778   58.8889
   87.7778  111.1111  108.8889  128.8889  105.5556
   66.6667  110.0000  130.0000  150.0000  106.6667
   67.7778  131.1111  151.1111  148.8889   85.5556
   56.6667  105.5556  107.7778   87.7778   38.8889

·         filter2(filter, citra, ‘valid’) merupakan mask hanya pada piksel-piksel sebelah dalam. Hasilnya akan berukuran lebih kecil dari citra asli

>> filter2(a,x,’valid’)
ans =
  111.1111  108.8889  128.8889
131.11110.0000  150.0000
  131.1111  151.1111  148.8889.
Hasil format ‘same’ di atas bisa di dapatkan dengan menyisipkan nol-nol dan menggunakan format ‘valid’ :

>> x2=zeros(7,7);
>> x2(2:6,2:6)=x
x2 =
     0     0     0     0     0     0     0
     0   170   240    10    80   150     0
     0   230    50    70   140   160     0
     0    40    60   130   200   220     0
     0   100   120   190   210    30     0
     0   110   180   250    20    90     0
     0     0     0     0     0     0     0
>> filter2(a,x2,’valid’)
ans =
   76.6667   85.5556   65.5556   67.7778   58.8889
   87.7778  111.1111  108.8889  128.8889  105.5556
   66.6667  110.0000  130.0000  150.0000  106.6667
   67.7778  131.1111  151.1111  148.8889   85.5556
   56.6667  105.5556  107.7778   87.7778   38.8889

·         filter2(filter, citra, ‘full’) memberikan keluaran yang berukuran lebih besar dari citra asli; hal ini dilakukan dengan menyisipkan nol-nol, dan menerapkan filter pada semua tempat di dalam dan di sekitar citra tempat mask beririsan dengan matriks citra :

>> filter2(a,x,’full’)
ans =
   18.8889   45.5556   46.6667   36.6667   26.6667   25.5556   16.6667
   44.4444   76.6667   85.5556   65.5556   67.7778   58.8889   34.4444
   48.8889   87.7778  111.1111  108.8889  128.8889  105.5556   58.8889
   41.1111   66.6667  110.0000  130.0000  150.0000  106.6667   45.5556
   27.7778   67.7778  131.1111  151.1111  148.8889   85.5556   37.7778
   23.3333   56.6667  105.5556  107.7778   87.7778   38.8889   13.3333
   12.2222   32.2222   60.0000   50.0000   40.0000   12.2222   10.0000

Anda dapat pula menciptakan filter sendiri menggunakan fungsi fspecial; Fungsi ini memiliki banyak opsi yang mempermudah pembuatan suatu filter. Jika anda ingin menciptakan suatu filter perata-rata, anda bisa memakai opsi ‘average’ sebagai berikut :

>> fspecial(‘average’,[5,7])
ans =
    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286
    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286
    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286
    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286
    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286    0.0286

Atau secara sederhana, anda bisa menggunakan :

>> fspecial(‘average’,11)
ans =
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083
    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083    0.0083

Yang menghasilkan suatu matriks berukuran 11 x 11. Jika jumlah vector di abaikan, maka keluarannya berukuran 3 x 3 :

>> fspecial(‘average’)
ans =
    0.1111    0.1111    0.1111
    0.1111    0.1111    0.1111
    0.1111    0.1111    0.1111

Sebagai contoh, filter perata-rata 3 x 3 diterapkan pada suatu citra sebagai berikut :

>> b=imread(‘peppers.png’);
>> f1=fspecial(‘average’,5);
>> c=rgb2gray(b);
>> cf1=filter2(f1,c);
>> figure,imshow(b),figure,imshow(cf1/255)

Hasil yang diperoleh ditampilkan pada gambar di bawah. Perhatikan bahwa filter perata-rata mengaburkan tepi citra; tepi di beberapa area menjadi kurang tegas daripada yang asli. Citra dapat pula dibuat menjadi lebih kabur menggunakan filter perata-rata yang berukuran lebih besar.

Pemfilteran Citra dalam MATLAB 1
Perhatikan pula bahwa penyisipan nol-nol pada tepi mengakibatkan border atau batas hitam yang tampak mengitari citra. Hal ini semakin kelihatan bila digunakan filter perata-rata yang berukuran lebih besar. Jika artifak tersebut tidak diinginkan; misalnya menyebabkan kecerahan rata-rata berubah, maka akan lebih tepat menggunakan opsi ‘valid’.

Citra yang dihasilkan bisa jadi tampak lebih buruk dari citra asli. Akan tetapi, penerapan filter pengabur seperti itu bisa dimanfaatkan untuk mengurangi detail citra yang berguna bagi operasi-operasi pengenalan objek suatu mesin otonom.

4 Comments

  1. Efendi Setiawan November 16, 2015
  2. Faiq Nukha November 16, 2015
  3. Anonymous November 16, 2015
  4. Faiq Nukha November 16, 2015

Leave a Reply