TEKNIK PENGOLAHAN CITRA
Kuliah 4 – Neighborhood Processing
Indah Susilawati, S.T., M.Eng.
Program Studi Teknik Elektro Program Studi Teknik Informatika Fakultas Teknik dan Ilmu Komputer Universitas Mercu Buana Yogyakarta 2009
KULIAH 4 TEKNIK PENGOLAHAN CITRA NEIGHBOURHOOD PROCESSING Pada operasi titik, citra dimodifikasi dengan menerapkan suatu fungsi pada setiap nilai piksel. Neigbourhood processing dapat dipandang sebagai perluasan dari operasi pengolahan titik, dimana fungsi diterapkan pada sejumlah piksel yang bertetangga. Neigbourhood processing dilakukan dengan menggeser sebuah “mask” (dapat berbentuk segiempat atau bentuk lain) pada citra yang akan diolah. Dengan demikian dapat diperoleh citra baru yang piksel-pikselnya dihitung dari nilai piksel-piksel citra yang berada di bawah “mask”, lihat gambar berikut.
Kombinasi antara “mask” dan fungsi disebut filter (tapis). Jika fungsinya linear maka disebut filter linear. Sebuah filter linear dapat diimplementasikan dengan mengalikan semua elemen pada “mask” dengan elemen-elemen yang bersesuaian pada piksel yang bertetangga, dan kemudian menjumlahkan hasilnya. Misalnya “mask” yang digunakan berbentuk segiempat 3 x 5 piksel sbb.
Dan nilai-nilai piksel yang bersesuaian pada citra adalah
Kemudian dikalikan dan dijumlahkan. 1
2
∑ ∑ m (s, t) p (i + s, j + t)
s = −1 t = −2
Dengan demikian dibutuhkan tiga langkah dalam filtering, yaitu: 1. menempatkan “mask” pada piksel yang akan diproses, 2. mengalikan elemen-elemen pada “mask” dengan elemen yang bersesuaian pada piksel-piksel tetangga pada citra, 3. menjumlahkan seluruh hasil perkalian.
Ketiga langkah di atas dilakukan untuk semua piksel pada citra input. Diagram berikut mengilustrasikan proses spatial filtering tsb.
Operasi yang sejenis dengan spatial filtering adalah konvolusi. Metode yang diterapkan dalam konvolusi sama dengan yang diterapkan dalam spatial filtering, namun filter diputar 180° terlebih dahulu sebelum proses perkalian dan penjumlahan. Dengan notasi yang sama dengan yang digunakan sebelumnya, maka output konvolusi dengan “mask” 3 x 5 untuk piksel tunggal adalah 1
2
∑ ∑ m (-s,-t) p (i + s, j + t)
s = −1 t = −2
Hasil yang sama dapat diperoleh dengan
1
2
∑ ∑ m (s, t) p (i − s, j − t)
s = −1 t = −2
Pada persamaan yang terakhir, piksel citra diputar 180°; sehingga diperoleh hasil yang sama dengan persamaan sebelumnya. Konvolusi menjadi penting dalam pembahasan transformasi Fourier dan teori konvolusi. Dalam prakteknya, sebagian besar “mask” filter adalah simetris terhadap putaran (rotationally symmetric) sehingga spatial filtering dan konvolusi akan menghasilkan output yang sama.
Contoh Satu filter linear yang penting adalah dengan menggunakan “mask” 3 x 3 dan mengambil rerata dari semua nilai yang tercakup dalam “mask”. Nilai rerata ini akan menjadi nilai aras keabuan pada citra output. Operasinya dapat dijelaskan sbb.
Dimana e adalah nilai piksel pada citra input, dan rerata aras keabuan akan menjadi piksel citra output pada posisi piksel yang sama. Misalnya citra yang piksel-pikselnya sbb.
170 240
10
80 150
230
50
70 140 160
40
60 130 200 220
100 120 190 210
30
110 180 250
90
20
Maka piksel-piksel yang bertetangga pada sudut kanan atas adalah
dan reratanya adalah 111,1111 dan dapat dibulatkan menjadi 111. Selanjutnya piksel-piksel bertetangga yang kedua adalah
dan reratanya adalah 108,8889 dan dapat dibulatkan menjadi 108 atau 109. Dengan melakukan operasi yang sama untuk seluruh piksel pada citra, maka diperoleh hasil sbb.
Cara yang mudah untuk menggambarkan filter linear adalah dengan menggunakan koefisien-koefisien untuk semua nilai aras keabuan piksel dalam “mask”. Untuk filter di atas, output filter dapat dinyatakan sbb. 1 (a + b + c + d + e + f + g + h + i) 9
Sehingga filter dapat dinyatakan dengan matriks sbb.
⎡1 ⎢9 ⎢1 ⎢ ⎢9 ⎢1 ⎢⎣ 9
1 9 1 9 1 9
1⎤ 9⎥ ⎡1 1 1⎤ 1⎥ 1 ⎢ ⎥ = 1 1 1⎥ ⎥ 9⎥ 9 ⎢ ⎢⎣1 1 1⎥⎦ 1⎥ 9 ⎥⎦
Contoh Sebuah filter
⎡ 1 −2 1 ⎤ ⎢ − 2 4 − 2⎥ ⎥ ⎢ ⎢⎣ 1 − 2 1 ⎥⎦
Akan bekerja pada piksel-piksel sbb.
Batas atau tepi citra (edges of the image) merupakan suatu hal yang harus diselesaikan dalam operasi filtering, misalnya bagaimana jika sebagian “mask” berada di luar citra. Perhatikan gambar berikut.
Pendekatan untuk menyelesaikan hal ini adalah 1. Tidak mempedulikan batas atau tepi citra. Dalam hal ini, “mask” hanya diaplikasikan pada piksel-piksel pada citra dimana seluruh “mask” berada dalam citra. Pendekatan ini menghasilkan citra output yang ukurannya lebih kecil daripada citra input. Jika ukuran “mask” sangat besar, akan menyebabkan sejumlah besar informasi menjadi hilang. Pada contoh yang telah dibahas di atas, digunakan pendekatan jenis ini. 2. Tambahkan piksel-piksel dengan nilai 0 (Pad with zeroes) Dalam pendekatan ini, diasumsikan bahwa semua piksel yang berada di luar citra mempunyai nilai aras keabuan nol. Pendekatan ini menghasilkan citra output yang ukurannya sama dengan citra input, namun kadang mempunyai pengaruh pada batas-batas tepi citra.
Filtering Menggunakan Matlab
Matlab menyediakan fungsi untuk melakukan linear filtering, yaitu fungsi filter2.m dengan sintaks filter2 (filter, image, ‘shape’) Parameter “shape” bersifat opsional, digunakan untuk mendefinisikan metode atau pendekatan untuk menangani batas atau tepi citra, yaitu: •
filter2 (filter, image, ‘same’) Merupakan default Matlab; menghasilkan matriks yang sama ukurannya dengan matiks citra input. Digunakan padding dengan nilai nol.
•
filter2 (filter, image, ‘valid’) Hanya mengaplikasikan filter pada piksel-piksel “di dalam” citra saja, tidak mempedulikan piksel-piksel pada batas atau tepi citra. Ukuran citra output lebih kecil daripada citra input.
•
filter2 (filter, image, ‘full’) Menghasilkan matriks yang ukurannya lebih besar daripada matiks citra input. Digunakan padding dengan nilai nol, dan diterapkan pada semua wilayah dimana masih terdapat overlap antara citra dan filter.
Contoh
>> a = ones(3,3)/9
a= 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111
>> x = magic(5)
x= 17 24
1
8 15
23
5
7 14 16
4
6 13 20 22
10 12 19 21
3
11 18 25
9
2
>> s = filter2(a, x, 'same')
s= 7.6667
8.5556
6.5556
6.7778
5.8889
8.7778 11.1111 10.8889 12.8889 10.5556 6.6667 11.0000 13.0000 15.0000 10.6667 6.7778 13.1111 15.1111 14.8889
8.5556
5.6667 10.5556 10.7778
8.7778
3.8889
>> v = filter2(a, x, 'valid')
f= 11.1111 10.8889 12.8889 11.0000 13.0000 15.0000 13.1111 15.1111 14.8889
>> f = filter2(a, x, 'full')
f= 1.8889 4.5556
4.6667
3.6667
2.6667
2.5556 1.6667
4.4444 7.6667
8.5556
6.5556
6.7778
5.8889 3.4444
4.8889 8.7778 11.1111 10.8889 12.8889 10.5556 5.8889 4.1111 6.6667 11.0000 13.0000 15.0000 10.6667 4.5556 2.7778 6.7778 13.1111 15.1111 14.8889
8.5556 3.7778
2.3333 5.6667 10.5556 10.7778
8.7778
3.8889 1.3333
1.2222 3.2222
4.0000
1.2222 1.0000
6.0000
5.0000
Tidak ada pendekatan tunggal yang terbaik dalam hal memilih jenis filter, pemilihan harus disesuaikan dengan permasalahan yang dihadapi (problem dependent) dan hasil yang diinginkan.
Filter yang akan digunakan dapat dibuat sendiri atau dapat pula menggunakan fungsi fspecial.m; yang menyediakan beberapa pilihan filter termasuk diantaranya filter pe-rerata (average).
Contoh >> fspecial (‘average’, [5,7]) Æ membuat filter pe-rerata ukuran 5 x 7 >> fspecial (‘average’, 11) Æ membuat filter pe-rerata ukuran 11 x 11
Jenis-jenis filter yang dapat dipilih antara lain adalah 1. 'average'
averaging filter
2. 'disk'
circular averaging filter
3. 'gaussian'
Gaussian lowpass filter
4. 'laplacian'
filter approximating the 2-D Laplacian operator
5. 'log'
Laplacian of Gaussian filter
6. 'motion'
motion filter
7. 'prewitt'
Prewitt horizontal edge-emphasizing filter
8. 'sobel'
Sobel horizontal edge-emphasizing filter
9. 'unsharp'
unsharp contrast enhancement filter
Contoh clear all; clc; I = imread ('cameraman.tif'); f = fspecial ('average',[5,5]); If = filter2 (f,I); subplot (1,2,1), imshow (I) title ('citra input') subplot (1,2,2), imshow (mat2gray(If)) title ('citra output')
citra input
citra output
Filter pe-rerata akan mengaburkan citra, makin besar ukuran filter maka citra cenderung makin kabur. Dengan menggunakan filter berukuran besar maka dapat terlihat jelas pengaruh padding dengan nilai nol di sekelilling tepi atau batas citra. Perhatikan hasil filtering dengan filter pe-rerata ukuran 15 x 15 berikut.
citra input
citra output
Filter pe-rerata penting dalam permasalahan-permasalahan di mana aspek citra yang menjadi perhatian adalah bukan detail citra, misalnya pengamat hanya tertarik pada berapa jumlah objek yang ada pada citra, atau hanya tertarik pada luas daerah gelap dan daerah terang pada citra.
Separable Filter
Beberapa filter dapat diimplementasikan sebagai dua filter yang lebih sederhana secara berurutan. Misalnya, oleh karena
maka filter pe-rerata 3 x 3 dapat diimplementasikan dengan menerapkan filter 3 x 1, kemudian diikuti dengan menerapkan filter 1 x 3 pada hasil filtering yang pertama. Dengan demikian maka dikatakan bahwa filter pe-rerata dapat dibagi (separable) menjadi dua filter yang lebih kecil. Separabilitas menghasilkan penghematan waktu pengolahan. Misalkan filter n x n dapat dibagi menjadi 2 filter ukuran n x 1 dan 1 x n. Penerapan filter n x n membutuhkan sejumlah n2 perkalian dan (n2 – 1) penjumlahan untuk setiap piksel citra. Dengan menggunakan filter n x 1, hanya dibutuhkan sejumlah n perkalian dan (n – 1) penjumlahan. Karena dilakukan dua kali, jumlah total operasi yang dibutuhkan adalah 2n perkalian dan 2(n – 1) penjumlahan. Jika n cukup besar, maka penghematan waktu pengolahan bisa menjadi pertimbangan tersendiri. Semua filter pe-rerata merupakan filter yang separable. Filter yang lain yang separable adalah filter laplacian,
LPF dan HPF
Secara garis besar, frekuensi dari sebuah citra merupakan ukuran besarnya perubahan nilai aras keabuan terhadap jarak. Komponen frekuensi tinggi dicirikan dengan adanya perubahan nilai aras keabuan yang besar pada jarak yang dekat; contoh komponen frekuensi tinggi adalah tebing (edges) dan derau (noise). Komponen frekuensi rendah dicirikan dengan perubahan yang kecil pada nilai aras keabuan, termasuk di dalamnya misalnya latar belakang (background). Dengan demikian maka, HPF Æ akan melewatkan komponen frekuensi tinggi dan mengurangi atau menghilangkan komponen frekuensi rendah. LPF Æ akan melewatkan komponen frekuensi rendah dan mengurangi atau menghilangkan komponen frekuensi tinggi.
Sebagai contoh, filter pe-rerata adalah LPF karena cenderung membuat citra menjadi kabur (tebing-tebing citra menjadi hilang atau kabur). Contoh filter HPF adalah
Pada contoh filter HPF di atas, jumlah semua elemen dalam matriks adalah nol. Hal ini berarti bahwa pada bagian citra yang berfrekuensi rendah (yaitu nilai aras keabuannya hampir sama) maka hasil filtering akan mendekati nol.
Contoh
Terlihat bahwa hasil filtering mempunyai nilai yang mendekati nol. Untuk menangani hasil filtering yang nilainya di luar aras keabuan yang ada (yaitu 0 – 255) dapat digunakan pendekatan sbb. 1. Membuat nilai negatif menjadi positif. Pendekatan ini memang menyelesaikan permasalahan adanya nilai negatif pada hasil filtering tetapi tidak mengatasi masalah jika ada nilai di atas 255. Sehingga pendekatan ini hanya digunakan dalam keadaan yang khusus saja, misalnya saat hanya terdapat beberapa nilai negatif saja dan nilai tersebut dekat dengan nol. 2. Memotong nilai (Clip values) Pendekatan ini menerapkan operasi pengambangan (thresholding) pada nilai aras keabuan hasil filtering sehingga nilainya berada pada rentang 0 – 255.
3. Penyekalaan (scaling transformation) Misalkan nilai aras keabuan hasil filtering berada pada rentang gL – gH dengan gL adalah nilai terendah dan gH adalah nilai tertinggi. Maka semua nilai pada rentang
gL – gH tersebut dapat ditransformasikan ke rentang 0 – 255 menggunakan transformasi linear sbb.
Oleh karena gradien garis linear di atas adalah 255 / (gH – gL), maka persamaan garis transformasi dapat dinyatakan sbb.
Contoh
clear all; clc; I = imread ('cameraman.tif'); f = [1 -2 1;-2 4 -2;1 -2 1]; fI = filter2(f, I); maks = max(fI(:)) mins = min(fI(:)) fI2 = (fI - mins)/(maks - mins); fI3 = fI/60; subplot (1,3,1), imshow (I) title ('citra input') subplot (1,3,2), imshow (fI2) title ('ouput HPF terskala 1') subplot (1,3,3), imshow (fI3) title ('ouput HPF terskala 2')
% terskala 1 % terskala 2
citra input
ouput HPF terskala 1
ouput HPF terskala 2
HPF atau filter lolos tinggi sangat penting dalam deteksi tebing dan peningkatan tebing (edge detection and edge enhancement). Tebing-tebing pada citra dicirikan atau ditandai dengan perubahan yang mencolok (besar) pada nilai aras keabuannya. Contoh HPF yang lain adalah filter laplacian dan filter log.
Contoh >> f1 = fspecial ('laplacian')
f1 = 0.1667 0.6667 0.1667 0.6667 -3.3333 0.6667 0.1667 0.6667 0.1667
>> f2 = fspecial ('log')
f2 = 0.0448 0.0468 0.0564 0.0468 0.0448 0.0468 0.3167 0.7146 0.3167 0.0468 0.0564 0.7146 -4.9048 0.7146 0.0564 0.0468 0.3167 0.7146 0.3167 0.0468 0.0448 0.0468 0.0564 0.0468 0.0448
Contoh
clear all; clc; I = imread ('cameraman.tif'); f1 = fspecial('laplacian'); f2 = fspecial('log'); I1 = filter2(f1,I); I2 = filter2(f2,I); %fI/60; subplot (1,3,1), imshow (I) title ('citra input') subplot (1,3,2), imshow (I1/100) title ('ouput HPF Laplacian') subplot (1,3,3), imshow (I2/100) title ('ouput HPF Log')
citra input
ouput HPF Laplacian
ouput HPF Log