TEKNIK PENGOLAHAN CITRA
Kuliah 4 – Pengolahan Titik (2)
Indah Susilawati, S.T., M.Eng.
Program Studi Teknik Informatika Program Studi Sistem Informasi Fakultas Teknologi Informasi Universitas Mercu Buana Yogyakarta 2013
KULIAH 4 TEKNIK PENGOLAHAN CITRA PENGOLAHAN TITIK (2)
Histogram Informasi penting mengenai isi citra digital dapat diketahui dengan membuat histogram citra. Histogram citra adalah grafik yang menggambarkan penyebaran nilai-nilai intensitas piksel dari suatu citra atau bagian tertentu di dalam citra. Dari sebuah histogram dapat diketahui frekuensi relatif kemunculan setiap nilai aras keabuan pada citra. Oleh karena derajat keabuan mempunyai 256 aras (0 – 255) maka histogram akan menyatakan jumlah kemunculan setiap nilai piksel 0 – 255. Berikut diberikan ilustrasi dengan sebuah matriks yang menggambarkan sebuah citra aras keabuan. Misalkan matriks berikut diperoleh dari pembacaan nilai piksel citra digital yang berukuran 5 x 5, maka frekuensi kemunculan setiap aras keabuan pada citra adalah sbb.
10 15 15 10 15
6 5 2 frekuensi kemunculan 5 1 6 0
10 70 70 15 15
70 75 100 100 10
65 100 100 70 70
10 100 100 65 10
untuk aras keabuan 10 untuk aras keabuan 15 untuk aras keabuan 65 untuk aras keabuan 70 untuk aras keabuan 75 untuk aras keabuan 100 untuk aras keabuan lain
Coba gambarkan histogramnya.
Matlab menyediakan fungsi untuk menggambarkan histogram sebuah citra, yaitu imhist.m. >> I = imread (’lena.jpg’); >> imhist (I)
3500 3000 2500 2000 1500 1000 500 0 0
50
100
150
200
250
>> H = imhist (I) Menampilkan frekuensi kemunculan setiap aras keabuan (0 – 255) secara berurutan. Lihat hasilnya di editor Matlab.
Scilab juga memiliki fungsi imhist untuk menampilkan histogram citra dengan sintaks: J = imhist(im) J = imhist(im, bins) J = imhist(im, bins,width,[color]])
Cobalah sintaks di atas di Scilab Console; apa perbedaannya?
Menggunakan kombinasi fungsi imhist dan fungsi plot, juga bisa diperoleh grafik yang merupakan gambaran histogram citra secara lengkap. Berikut contoh membuat grafik menggunakan fungsi plot:
clear; clc; x = 1:10; y = x^2 + 2; plot (x,y)
Modifikasilah coding di atas untuk menampilkan histogram citra hitam putih, misalnya lena.jpg. Bagaimana hasilnya?
Dari histogramnya, dapat diketahui banyak tentang kenampakan citra (secara visual) yang bersangkutan, misalnya:
Pada sebuah citra yang gelap, maka histogramnya akan mengumpul pada sisi aras keabuan rendah (sebelah kiri) kontras buruk objek untuk peningkatan citra,
Pada sebuah citra yang terang, maka histogramnya akan mengumpul pada sisi aras keabuan tinggi (sebelah kanan). Citra seperti ini sering disebut citra yang over exposure kontras buruk objek untuk peningkatan citra,
Pada sebuah citra dengan kontras yang baik, maka histogramnya akan menempati hampir seluruh aras keabuan yang ada (0 – 255). Citra lena.jpg adalah contoh citra dengan kontras yang baik karena histogramnya menempati hampir seluruh aras keabuan yang ada.
Berikut ditampilkan histogram citra lena menggunakan Matlab (Coba bandingkan dengan histogram yang anda buat sendiri menggunakan Scilab). Citra lena1.jpg berikut ini adalah citra dengan pencahayaan yang terlalu banyak (over exposure), sehingga histogramnya sempit dan bergeser ke arah kanan (aras keabuan tinggi).
7000 6000 5000 4000 3000 2000 1000
0 0
50
lena1.jpg
100
150
200
250
histogram lena1.jpg
Citra lena2.jpg berikut ini adalah citra dengan pencahayaan yang terlalu kurang (citra gelap), sehingga histogramnya sempit dan bergeser ke arah kiri (aras keabuan rendah).
4
x 10
3
2.5
2
1.5
1
0.5
0 0
lena2.jpg
50
100
150
200
250
histogram lena2.jpg
Untuk citra berwarna, histogramnya dinyatakan untuk setiap komponen RGB (Red, Blue, Green) yang membentuk setiap piksel citranya. Dengan demikian untuk setiap citra berwarna dapat dibuat tiga buah histogram.
Contoh Citra peppers.png
>> I = imread (‘peppers.png’) >> imhist (I(:,:,1)) menampilkan histogram lapis merah (red)
3000
2500
2000
1500
1000
500
0 0
50
100
150
200
250
>> imhist (I(:,:,2)) menampilkan histogram lapis hijau (green)
3500
3000
2500
2000
1500
1000
500
0 0
50
100
150
200
250
>> imhist (I(:,:,3)) menampilkan histogram lapis biru (blue) 3500 3000 2500 2000 1500 1000 500 0 0
50
100
150
200
250
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 (mengapa?). 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 95
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 sebagai berikut: Tabel 1 perubahan nilai piksel input menjadi output sesuai formula histogram stretching di atas Tabel 2 perubahan frekuensi kemunculan suatu nilai piksel tertentu, sebelum dan sesudah proses histogram stretching
Tabel 1
Tabel 2
Piksel Input (i)
Piksel Output (j)
Nilai Piksel
5 6 7 8 9
2 5 8 11 14
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Frekuensi Kemunculan Lama 15 0 0 0 0 70 110 45 70 35 0 0 0 0 0 15
Frekuensi Kemunculan Baru 15 0 70 0 0 110 0 0 45 0 0 70 0 0 35 15
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
1500 1000 500
citra output
3000 2000 1000
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. xa y (d c) c ba
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
1500 1000 500 0
citra output gamma = 1
3000
3000
2000
2000
1000
1000
0 0
100
200
citra output gamma = 0.5
0 0
100
200
0
100
200
Tulislah program untuk contrast stretching dengan Scilab untuk memperbaiki kontras citra lena1.jpg menggunakan fungsi:
xa y (d c) c ba
x adl piksel input dan y adl piksel output a adl piksel minimum citra input b adl piksel maksimum citra input c adl piksel minimum pd citra output yg diinginkan (misal c=5) d adl piksel maksimum pd citra output yg diinginkan (misal d=255) Bandingkan citra output dengan inputnya, bandingkan pula histogram citra output dan inputnya. Apa kesimpulan yang anda peroleh?
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 (hampir 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 aras keabuan lain menggunakan formula: n n 1 ... n i i 0 (L 1) n
dan kemudian dibulatkan ke nilai yang terdekat. Misalkan sebuah citra dengan kontras yang kurang bagus ditunjukkan dengan histogram 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.
nj
120 100 80 60 40 20 0 1 2 3 4 5 6 7 8 9 10 11 12131415
j
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
1500 1000 500 0 0
100
200
histogram citra output
citra output 1500 1000 500 0 0
100
200
Lookup Table (LUT) Pemrosesan titik dapat dikerjakan dengan sangat efektif menggunakan LUT. Perhatikan contoh berikut:
Hal tersebut berarti bahwa piksel bernilai 4 akan digantikan dengan 2; piksel bernilai 253 akan digantikan dengan 126; dan seterusnya. Dalam Matlab, jika T adalah LUT dan I adalah image (citra) maka LUT dapat diaplikasikan dengan perintah sederhana sbb: T (I)
Contoh >> T = uint8(floor(0:255)/2); >> I = imread(‘pout.tif’); >> I2 = T(I); >> imshow (I2);
membuat LUT