TEKNIK PENGOLAHAN CITRA
Kuliah 2 – Point 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 3 TEKNIK PENGOLAHAN CITRA PENGOLAHAN TITIK (POINT PROCESSING) Setiap
operasi
pengolahan
citra
pada
dasarnya
adalah
alihragam
(transformasi) nilai piksel-piksel yang ada pada citra yang bersangkutan. Operasi ini dapat dibagi menjadi tiga kelas (dari yang paling rumit hingga yang paling sederhana), yaitu: 1. Transformasi. Transformasi mengubah nilai piksel menjadi bentuk lain yang ekivalen. Transformasi biasanya menggunakan algoritma yang efisien dan powerfull. Misalnya adalah DFT (Discrete Fourier Transform). 2. Neighbourhood processing. Untuk mengubah nilai piksel tertentu maka perlu diketahui nilai-nilai piksel tetangga (di sekitar piksel yang bersangkutan). Misalnya adalah operasi penapisan dengan tapis median (median filtering) dengan jendela 3 x 3 piksel. 3. Operasi titik (Point Operations). Untuk mengubah nilai piksel tertentu maka tidak perlu diketahui nilai-nilai piksel tetangga (di sekitar piksel yang bersangkutan). Operasi titik merupakan operasi yang paling sederhana, namun juga merupakan operasi pengolahan citra yang paling sering digunakan. Operasi ini terutama sangat berguna dalam pra-pengolahan cita (image pre-processing), yaitu proses paling awal dalam pengolahan citra sebelum proses utama dilakukan.
Operasi Aritmatika Operasi ini dapat dilakukan dengan fungsi sederhana y = f(x)
pada setiap nilai piksel pada citra, x adalah nilai piksel (input) dan f(x) adalah nilai piksel output. Operasi ini memetakan nilai piksel dengan domain 0 – 255 pada kodomain yang sama. Contoh fungsi seperti ini adalah penjumlahan atau pengurangan nilai piksel dengan suatu konstanta, y=x±C
atau perkalian tiap piksel dengan suatu konstanta, y = Cx
Yang perlu diperhatikan dalam hal ini adalah hasil f(x) harus merupakan bilangan bulat dalam jangkauan 0 – 255. Hal ini dapat dilakukan dengan pembulatan hasilnya (jika perlu) dan kemudian melakukan clipping dengan menentukan, ⎧255 jika y > 255 y=⎨ ⎩ 0 jika y < 0 Berikut adalah contoh hasil penjumlahan dan pengurangan konstanta C = 128 pada tiap piksel.
y = x + 128
y = x – 128
Dari grafik, dapat disimpulkan secara garis besar bahwa menambahkan dengan suatu konstanta akan menambah terang citra, dan mengurangkan dengan suatu konstanta akan menambah gelap citra. Matlab menyediakan fungsi untuk operasi penjumlahan dan pengurangan piksel citra, yaitu imadd.m dan imsubtract.m. Contoh Untuk melihat perubahan pada citra akibat penambahan nilai setiap piksel dengan suatu konstanta dapat digunakan m file berikut.
clear all; clc; I = imread('cameraman.tif'); K = imadd(I,50); subplot (1,2,1),imshow (I) title ('citra input') subplot (1,2,2), imshow(K) title ('citra output')
citra input
citra output
Contoh Untuk melihat perubahan pada citra akibat pengurangan nilai setiap piksel dengan suatu konstanta dapat digunakan m file berikut.
clear all; clc; I = imread('pout.tif'); K = imsubtract(I,75); subplot (2,1,1),imshow (I) title ('citra input') subplot (2,1,2), imshow(K) title ('citra output')
citra input
citra output
Membuat citra menjadi lebih terang atau lebih gelap juga dapat dilakukan dengan fungsi perkalian dan/atau pembagian. Perhatikan grafik berikut.
Matlab menyediakan fungsi untuk operasi perkalian dan pembagian piksel citra, yaitu immultiply.m dan imdivide.m. Contoh clear all; clc; I = imread('pout.tif'); J = immultiply(I,0.5); K = imdivide (I,2); L = immultiply (I,2); subplot (2,2,1),imshow (I) title ('citra input') subplot (2,2,2), imshow(J) title ('citra x 0.5') subplot (2,2,3), imshow(K) title ('citra : 2') subplot (2,2,4), imshow(L) title ('citra x 2')
citra input
citra x 0.5
citra : 2
citra x 2
Komplemen Komplemen dari sebuah citra aras keabuan adalah negatif dari citra tersebut (photographic negative). Fungsi untuk menghasilkan komplemen sebuah citra aras keabuan adalah y=L–x dengan L adalah aras atau level tertinggi piksel (255) dan x adalah nilai piksel citra input. Grafik berikut menggambarkan fungsi komplemen sebuah citra aras keabuan.
Matlab
menyediakan
fungsi
untuk
menghasilkan
komplemen
citra,
yaitu
imcomplement.m. Contoh clear all; clc; I = imread('cameraman.tif'); K = imcomplement(I); subplot (1,2,1),imshow (I) title ('citra input') subplot (1,2,2), imshow(K) title ('citra output')
citra input
citra output
Efek khusus yang menarik dapat diperoleh dengan melakukan komplemen sebagian saja, misalnya dengan melakukan komplemen piksel-piksel yang nilainya
kurang atau sama dengan 128 (≤ 128) saja (nilai piksel di atas 128 tidak dikomplemen-kan). Atau dilakukan sebaliknya. Grafik-grafik berikut menunjukkan fungsi efek khusus ini. Efek fungsi ini sering disebut solarisasi (solarization).
Histogram Stretching (Contrast Stretching) Misalkan terdapat sebuah citra memiliki distribusi piksel-piksel sbb. Nilai Piksel 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Frekuensi Kemunculan 15 0 0 0 0 70 110 45 70 35 0 0 0 0 0 15
Maka histogram citra tersebut dapat digambarkan sbb.
Terlihat bahwa citra tersebut memiliki kontras yang buruk. Kontras citra dapat diperbaiki dengan cara merentangkan aras keabuannya agar lebih merata, misalnya dengan menggunakan fungsi linear sebagian-sebagian (piecewise linear function) pada gambar berikut.
Fungsi pada grafik di atas mempunyai efek merentangkan aras keabuan 5 – 9 ke aras keabuan 2 – 14 menurut persamaan j=
14 − 2 (i − 5) + 2 9−5
Dengan i adalah piksel citra input dan j adalah piksel outputnya. Nilai piksel yang lain dapat dibiarkan saja (tidak diubah) atau dapat diubah menurut fungsi yang sesuai dengan grafik di atas. Hasilnya adalah Piksel Input (i) 5 6 7 8 9
Piksel Output (j) 2 5 8 11 14
dan histogram yang dihasilkan setelah transformasi adalah nj
120 100 80 60 40 20 0 1 2 3 4 5 6 7 8 9 101112131415
j
Yang mengindikasikan bahwa kontras citra menjadi lebih baik (sebaran nilai piksel lebih merata). Fungsi dalam Matlab yang digunakan untuk contrast stretching adalah imadjust.m, menggunakan fungsi yang diperlihatkan pada gambar berikut.
Sintaks yang digunakan adalah imadjust (im, [a, b], [c, d]) Contoh clear all; clc; I = imread('pout.tif'); K = imadjust(I,[0.25 0.5],[0.1 0.8]); subplot (2,2,1),imshow (I) title ('citra input') subplot (2,2,2), imshow(K) title ('citra output') subplot (2,2,3), imhist(I) subplot (2,2,4), imhist(K)
citra input
citra output
1500
3000
1000
2000
500
1000
0
0 0
100
200
0
100
200
Fungsi imadjust.m memberikan opsi parameter gamma yang mendefinisikan bentuk fungsi di antara koordinat (a,c) dan (b,d). Jika gamma = 1 (default setting) maka digunakan pemetaan linear seperti grafik sebelumnya. Jika nilai gamma kurang dari 1 maka dihasilkan fungsi konkaf ke bawah dan jika nilai gamma lebih dari 1 maka dihasilkan fungsi konkaf ke atas seperti gambar berikut.
Fungsi yang digunakan adalah sebagai berikut. ⎛x−a⎞ y=⎜ ⎟(d − c) + c ⎝b−a⎠
Contoh
clear all; clc; I = imread('pout.tif'); K = imadjust(I,[0.25 0.5],[0.1 0.8]); L = imadjust(I,[0.25 0.5],[0.1 0.8],0.5); subplot (2,3,1),imshow (I) title ('citra input') subplot (2,3,2), imshow(K) title ('citra output gamma = 1') subplot (2,3,3), imshow(L) title ('citra output gamma = 0.5') subplot (2,3,4), imhist(I) subplot (2,3,5), imhist(K) subplot (2,3,6), imhist(L) citra input
citra output gamma = 1
citra output gamma = 0.5
1500 3000
3000
2000
2000
500
1000
1000
0
0
0
1000
0
100
200
0
100
200
0
100
200
Ekualisasi Histogram (Histogram Equalization) Histogram stretching memerlukan input dari pengguna (nilai a, b, c, dan d, serta gamma). Prosedur yang kadang lebih cocok adalah ekualisasi histogram yang merupakan prosedur yang otomatis secara keseluruhan. Caranya adalah dengan mengubah histogram citra histogram yang seragam atau uniform; yaitu bahwa setiap batang pada histogram mempunyai tinggi yang sama, atau dengan kata lain bahwa setiap aras keabuan pada citra memiliki frekuensi kemunculan yang sama. Dalam prakteknya hal ini tidak mungkin, namun hasil operasi ekualisasi histogram menunjukkan hasil yang sangat baik. Misalkan sebuah citra mempunyai L aras keabuan yaitu 0, 1, 2, 3, ..., L - 1 dan setiap aras keabuan i muncul sebanyak ni kali. Jika jumlah piksel dalam citra adalah n (sehingga n0 + n1 + n2 + ... + nL-1 = n), maka untuk mentransformasikan aras keabuan citra menjadi citra dengan kontras yang lebih baik, aras keabuan citra i diubah menjadi ⎛ n 0 + n 1 + ... + n i ⎞ ⎜ ⎟(L − 1) n ⎝ ⎠ dan kemudian dibulatkan ke nilai yang terdekat. Misalkan sebuah citra dengan kontras yang kurang bagus ditunjukkan dengan histgram berikut. Citra mempunyai 16 aras keabuan (0 – 15).
Distribusi frekuensi kemunculan setiap aras keabuan i ditunjukkan pada tabel berikut.
Dari histogramnya diketahui bahwa citra cenderung terang. Untuk ekualisasi histogram digunakan rumusan di atas, dan hasilnya adalah sbb.
Maka dapat diperoleh
Dengan distribusi awal sbb
Maka distribusi aras keabuan setelah proses ekualisasi histogram adalah
j
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nj
0
15
0
0
70
0
0
0
110 0
45
0
0
80
0
40
Dan histogramnya dapat digambarkan sbb.
Matlab menyediakan fungsi untuk ekualisasi histogram yaitu histeq.m. Contoh clear all; clc; I = imread ('pout.tif'); K = histeq (I); subplot (2,2,1),imshow (I) title ('citra input') subplot (2,2,2), imhist(I) title ('histogram citra input') subplot (2,2,3), imshow(K) title ('citra output') subplot (2,2,4), imhist (K) title ('histogram citra output')
histogram citra input
citra input 1500 1000 500 0 0
100
200
histogram citra output
citra output 1500 1000 500 0 0
100
200