TEKNIK PENGOLAHAN CITRA Kuliah 2 – Point Processing
TEKNIK PENGOLAHAN CITRA Kuliah 2 – Point Processing
TEKNIK PENGOLAHAN CITRA Kuliah 2 – Point Processing
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