21.07.2013 Views

TEKNIK PENGOLAHAN CITRA Kuliah 2 – Point Processing

TEKNIK PENGOLAHAN CITRA Kuliah 2 – Point Processing

TEKNIK PENGOLAHAN CITRA Kuliah 2 – Point Processing

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>TEKNIK</strong> <strong>PENGOLAHAN</strong> <strong>CITRA</strong><br />

<strong>Kuliah</strong> 2 <strong>–</strong> <strong>Point</strong> <strong>Processing</strong><br />

Indah Susilawati, S.T., M.Eng.<br />

Program Studi Teknik Elektro<br />

Program Studi Teknik Informatika<br />

Fakultas Teknik dan Ilmu Komputer<br />

Universitas Mercu Buana Yogyakarta<br />

2009


KULIAH 3<br />

<strong>TEKNIK</strong> <strong>PENGOLAHAN</strong> <strong>CITRA</strong><br />

<strong>PENGOLAHAN</strong> TITIK (POINT PROCESSING)<br />

Setiap operasi pengolahan citra pada dasarnya adalah alihragam<br />

(transformasi) nilai piksel-piksel yang ada pada citra yang bersangkutan. Operasi ini<br />

dapat dibagi menjadi tiga kelas (dari yang paling rumit hingga yang paling<br />

sederhana), yaitu:<br />

1. Transformasi. Transformasi mengubah nilai piksel menjadi bentuk lain yang<br />

ekivalen. Transformasi biasanya menggunakan algoritma yang efisien dan<br />

powerfull. Misalnya adalah DFT (Discrete Fourier Transform).<br />

2. Neighbourhood processing. Untuk mengubah nilai piksel tertentu maka perlu<br />

diketahui nilai-nilai piksel tetangga (di sekitar piksel yang bersangkutan).<br />

Misalnya adalah operasi penapisan dengan tapis median (median filtering) dengan<br />

jendela 3 x 3 piksel.<br />

3. Operasi titik (<strong>Point</strong> Operations). Untuk mengubah nilai piksel tertentu maka<br />

tidak perlu diketahui nilai-nilai piksel tetangga (di sekitar piksel yang<br />

bersangkutan).<br />

Operasi titik merupakan operasi yang paling sederhana, namun juga<br />

merupakan operasi pengolahan citra yang paling sering digunakan. Operasi ini<br />

terutama sangat berguna dalam pra-pengolahan cita (image pre-processing), yaitu<br />

proses paling awal dalam pengolahan citra sebelum proses utama dilakukan.<br />

Operasi Aritmatika<br />

Operasi ini dapat dilakukan dengan fungsi sederhana<br />

y =<br />

f(x)


pada setiap nilai piksel pada citra, x adalah nilai piksel (input) dan f(x) adalah nilai<br />

piksel output. Operasi ini memetakan nilai piksel dengan domain 0 <strong>–</strong> 255 pada<br />

kodomain yang sama. Contoh fungsi seperti ini adalah penjumlahan atau<br />

pengurangan nilai piksel dengan suatu konstanta,<br />

y = x ±<br />

C<br />

atau perkalian tiap piksel dengan suatu konstanta,<br />

y = Cx<br />

Yang perlu diperhatikan dalam hal ini adalah hasil f(x) harus merupakan bilangan<br />

bulat dalam jangkauan 0 <strong>–</strong> 255. Hal ini dapat dilakukan dengan pembulatan hasilnya<br />

(jika perlu) dan kemudian melakukan clipping dengan menentukan,<br />

⎧255<br />

jika y > 255<br />

y = ⎨<br />

⎩ 0 jika y < 0<br />

Berikut adalah contoh hasil penjumlahan dan pengurangan konstanta C = 128 pada<br />

tiap piksel.<br />

y = x + 128 y = x <strong>–</strong> 128


Dari grafik, dapat disimpulkan secara garis besar bahwa menambahkan dengan suatu<br />

konstanta akan menambah terang citra, dan mengurangkan dengan suatu konstanta<br />

akan menambah gelap citra.<br />

Matlab menyediakan fungsi untuk operasi penjumlahan dan pengurangan<br />

piksel citra, yaitu imadd.m dan imsubtract.m.<br />

Contoh<br />

Untuk melihat perubahan pada citra akibat penambahan nilai setiap piksel<br />

dengan suatu konstanta dapat digunakan m file berikut.<br />

clear all;<br />

clc;<br />

I = imread('cameraman.tif');<br />

K = imadd(I,50);<br />

subplot (1,2,1),imshow (I)<br />

title ('citra input')<br />

subplot (1,2,2), imshow(K)<br />

title ('citra output')<br />

citra input citra output


Contoh<br />

Untuk melihat perubahan pada citra akibat pengurangan nilai setiap piksel<br />

dengan suatu konstanta dapat digunakan m file berikut.<br />

clear all;<br />

clc;<br />

I = imread('pout.tif');<br />

K = imsubtract(I,75);<br />

subplot (2,1,1),imshow (I)<br />

title ('citra input')<br />

subplot (2,1,2), imshow(K)<br />

title ('citra output')<br />

citra input<br />

citra output


Membuat citra menjadi lebih terang atau lebih gelap juga dapat dilakukan<br />

dengan fungsi perkalian dan/atau pembagian. Perhatikan grafik berikut.<br />

Matlab menyediakan fungsi untuk operasi perkalian dan pembagian piksel citra, yaitu<br />

immultiply.m dan imdivide.m.<br />

Contoh<br />

clear all;<br />

clc;<br />

I = imread('pout.tif');<br />

J = immultiply(I,0.5);<br />

K = imdivide (I,2);<br />

L = immultiply (I,2);<br />

subplot (2,2,1),imshow (I)<br />

title ('citra input')<br />

subplot (2,2,2), imshow(J)<br />

title ('citra x 0.5')<br />

subplot (2,2,3), imshow(K)<br />

title ('citra : 2')<br />

subplot (2,2,4), imshow(L)<br />

title ('citra x 2')


Komplemen<br />

citra input citra x 0.5<br />

citra : 2 citra x 2<br />

Komplemen dari sebuah citra aras keabuan adalah negatif dari citra tersebut<br />

(photographic negative). Fungsi untuk menghasilkan komplemen sebuah citra aras<br />

keabuan adalah<br />

y = L <strong>–</strong> x<br />

dengan L adalah aras atau level tertinggi piksel (255) dan x adalah nilai piksel citra<br />

input. Grafik berikut menggambarkan fungsi komplemen sebuah citra aras keabuan.


Matlab menyediakan fungsi untuk menghasilkan komplemen citra, yaitu<br />

imcomplement.m.<br />

Contoh<br />

clear all;<br />

clc;<br />

I = imread('cameraman.tif');<br />

K = imcomplement(I);<br />

subplot (1,2,1),imshow (I)<br />

title ('citra input')<br />

subplot (1,2,2), imshow(K)<br />

title ('citra output')<br />

citra input citra output<br />

Efek khusus yang menarik dapat diperoleh dengan melakukan komplemen<br />

sebagian saja, misalnya dengan melakukan komplemen piksel-piksel yang nilainya


kurang atau sama dengan 128 (≤ 128) saja (nilai piksel di atas 128 tidak di-<br />

komplemen-kan). Atau dilakukan sebaliknya. Grafik-grafik berikut menunjukkan<br />

fungsi efek khusus ini. Efek fungsi ini sering disebut solarisasi (solarization).<br />

Histogram Stretching (Contrast Stretching)<br />

Misalkan terdapat sebuah citra memiliki distribusi piksel-piksel sbb.<br />

Nilai Piksel Frekuensi Kemunculan<br />

0 15<br />

1 0<br />

2 0<br />

3 0<br />

4 0<br />

5 70<br />

6 110<br />

7 45<br />

8 70<br />

9 35<br />

10 0<br />

11 0<br />

12 0<br />

13 0<br />

14 0<br />

15 15


Maka histogram citra tersebut dapat digambarkan sbb.<br />

Terlihat bahwa citra tersebut memiliki kontras yang buruk. Kontras citra dapat<br />

diperbaiki dengan cara merentangkan aras keabuannya agar lebih merata, misalnya<br />

dengan menggunakan fungsi linear sebagian-sebagian (piecewise linear function)<br />

pada gambar berikut.<br />

Fungsi pada grafik di atas mempunyai efek merentangkan aras keabuan 5 <strong>–</strong> 9 ke aras<br />

keabuan 2 <strong>–</strong> 14 menurut persamaan<br />

14 − 2<br />

j =<br />

(i − 5) + 2<br />

9 − 5


Dengan i adalah piksel citra input dan j adalah piksel outputnya. Nilai piksel yang<br />

lain dapat dibiarkan saja (tidak diubah) atau dapat diubah menurut fungsi yang sesuai<br />

dengan grafik di atas. Hasilnya adalah<br />

Piksel Input (i) Piksel Output (j)<br />

5 2<br />

6 5<br />

7 8<br />

8 11<br />

9 14<br />

dan histogram yang dihasilkan setelah transformasi adalah<br />

nj<br />

120<br />

100<br />

80<br />

60<br />

40<br />

20<br />

0 1 2 3 4 5 6 7 8 9 101112131415 j<br />

Yang mengindikasikan bahwa kontras citra menjadi lebih baik (sebaran nilai piksel<br />

lebih merata).<br />

Fungsi dalam Matlab yang digunakan untuk contrast stretching adalah<br />

imadjust.m, menggunakan fungsi yang diperlihatkan pada gambar berikut.


Sintaks yang digunakan adalah<br />

Contoh<br />

imadjust (im, [a, b], [c, d])<br />

clear all;<br />

clc;<br />

I = imread('pout.tif');<br />

K = imadjust(I,[0.25 0.5],[0.1 0.8]);<br />

subplot (2,2,1),imshow (I)<br />

title ('citra input')<br />

subplot (2,2,2), imshow(K)<br />

title ('citra output')<br />

subplot (2,2,3), imhist(I)<br />

subplot (2,2,4), imhist(K)


1500<br />

1000<br />

500<br />

0<br />

citra input citra output<br />

0 100 200<br />

3000<br />

2000<br />

1000<br />

0<br />

0 100 200<br />

Fungsi imadjust.m memberikan opsi parameter gamma yang mendefinisikan<br />

bentuk fungsi di antara koordinat (a,c) dan (b,d). Jika gamma = 1 (default setting)<br />

maka digunakan pemetaan linear seperti grafik sebelumnya. Jika nilai gamma kurang<br />

dari 1 maka dihasilkan fungsi konkaf ke bawah dan jika nilai gamma lebih dari 1<br />

maka dihasilkan fungsi konkaf ke atas seperti gambar berikut.


Fungsi yang digunakan adalah sebagai berikut.<br />

Contoh<br />

1500<br />

1000<br />

500<br />

0<br />

⎛ x − a ⎞<br />

y = ⎜ ⎟(d<br />

− c) + c<br />

⎝ b − a ⎠<br />

clear all;<br />

clc;<br />

I = imread('pout.tif');<br />

K = imadjust(I,[0.25 0.5],[0.1 0.8]);<br />

L = imadjust(I,[0.25 0.5],[0.1 0.8],0.5);<br />

subplot (2,3,1),imshow (I)<br />

title ('citra input')<br />

subplot (2,3,2), imshow(K)<br />

title ('citra output gamma = 1')<br />

subplot (2,3,3), imshow(L)<br />

title ('citra output gamma = 0.5')<br />

subplot (2,3,4), imhist(I)<br />

subplot (2,3,5), imhist(K)<br />

subplot (2,3,6), imhist(L)<br />

citra input citra output gamma = 1 citra output gamma = 0.5<br />

0 100 200<br />

3000<br />

2000<br />

1000<br />

0<br />

0 100 200<br />

3000<br />

2000<br />

1000<br />

0<br />

0 100 200


Ekualisasi Histogram (Histogram Equalization)<br />

Histogram stretching memerlukan input dari pengguna (nilai a, b, c, dan d,<br />

serta gamma). Prosedur yang kadang lebih cocok adalah ekualisasi histogram yang<br />

merupakan prosedur yang otomatis secara keseluruhan. Caranya adalah dengan<br />

mengubah histogram citra histogram yang seragam atau uniform; yaitu bahwa setiap<br />

batang pada histogram mempunyai tinggi yang sama, atau dengan kata lain bahwa<br />

setiap aras keabuan pada citra memiliki frekuensi kemunculan yang sama. Dalam<br />

prakteknya hal ini tidak mungkin, namun hasil operasi ekualisasi histogram<br />

menunjukkan hasil yang sangat baik.<br />

Misalkan sebuah citra mempunyai L aras keabuan yaitu 0, 1, 2, 3, ..., L - 1 dan<br />

setiap aras keabuan i muncul sebanyak ni kali. Jika jumlah piksel dalam citra adalah n<br />

(sehingga n0 + n1 + n2 + ... + nL-1 = n), maka untuk mentransformasikan aras keabuan<br />

citra menjadi citra dengan kontras yang lebih baik, aras keabuan citra i diubah<br />

menjadi<br />

⎛ 0 + n1<br />

+ ... + n<br />

⎜<br />

⎝ n<br />

n i<br />

⎞<br />

⎟(L<br />

−1)<br />

⎠<br />

dan kemudian dibulatkan ke nilai yang terdekat. Misalkan sebuah citra dengan<br />

kontras yang kurang bagus ditunjukkan dengan histgram berikut. Citra mempunyai<br />

16 aras keabuan (0 <strong>–</strong> 15).<br />

Distribusi frekuensi kemunculan setiap aras keabuan i ditunjukkan pada tabel berikut.


Dari histogramnya diketahui bahwa citra cenderung terang. Untuk ekualisasi<br />

histogram digunakan rumusan di atas, dan hasilnya adalah sbb.<br />

Maka dapat diperoleh<br />

Dengan distribusi awal sbb<br />

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<br />

nj 0 15 0 0 70 0 0 0 110 0 45 0 0 80 0 40<br />

Dan histogramnya dapat digambarkan sbb.<br />

Contoh<br />

Matlab menyediakan fungsi untuk ekualisasi histogram yaitu histeq.m.<br />

clear all;<br />

clc;<br />

I = imread ('pout.tif');<br />

K = histeq (I);<br />

subplot (2,2,1),imshow (I)<br />

title ('citra input')<br />

subplot (2,2,2), imhist(I)<br />

title ('histogram citra input')<br />

subplot (2,2,3), imshow(K)<br />

title ('citra output')<br />

subplot (2,2,4), imhist (K)<br />

title ('histogram citra output')


citra input<br />

citra output<br />

1500<br />

1000<br />

500<br />

0<br />

1500<br />

1000<br />

500<br />

0<br />

histogram citra input<br />

0 100 200<br />

histogram citra output<br />

0 100 200

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!