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 213
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 ( 255) maka histogram akan menyatakan jumlah kemunculan setiap nilai piksel 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. 1 1 7 65 1 15 7 75 1 1 15 7 1 1 1 1 15 1 7 65 15 15 1 7 1 frekuensi kemunculan 6 5 2 5 1 6 untuk aras keabuan 1 untuk aras keabuan 15 untuk aras keabuan 65 untuk aras keabuan 7 untuk aras keabuan 75 untuk aras keabuan 1 untuk aras keabuan lain Coba gambarkan histogramnya.
Matlab menyediakan fungsi untuk menggambarkan histogram sebuah citra, yaitu imhist.m. >> I = imread ( lena.jpg ); >> imhist (I) 35 3 25 2 15 1 5 5 1 15 2 25 >> H = imhist (I) Menampilkan frekuensi kemunculan setiap aras keabuan ( 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:1; 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 ( 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).
7 6 5 4 3 2 1 5 1 15 2 25 lena1.jpg 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). x 1 4 3 2.5 2 1.5 1.5 5 1 15 2 25 lena2.jpg 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) 3 25 2 15 1 5 5 1 15 2 25 >> imhist (I(:,:,2)) menampilkan histogram lapis hijau (green)
35 3 25 2 15 1 5 5 1 15 2 25 >> imhist (I(:,:,3)) menampilkan histogram lapis biru (blue) 35 3 25 2 15 1 5 5 1 15 2 25
Histogram Stretching (Contrast Stretching) Misalkan terdapat sebuah citra memiliki distribusi piksel-piksel sbb. Nilai Piksel Frekuensi Kemunculan 15 1 2 3 4 5 7 6 11 7 45 8 7 9 35 1 11 12 13 14 15 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 14 2 j (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 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 Frekuensi Kemunculan Lama Frekuensi Kemunculan Baru 5 2 15 15 6 5 1 7 8 2 7 8 11 3 9 14 4 5 7 11 6 11 7 45 8 7 45 9 35 1 11 7 12 13 14 35 15 15 15 dan histogram yang dihasilkan setelah transformasi adalah n j 12 1 8 6 4 2 1 2 3 4 5 6 7 8 9 11112131415 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 Contoh imadjust (im, [a, b], [c, d]) clear all; clc; I = imread('pout.tif'); K = imadjust(i,[.25.5],[.1.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 15 1 5 3 2 1
15 1 5 1 2 3 2 1 1 2 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,[.25.5],[.1.8]); L = imadjust(i,[.25.5],[.1.8],.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 =.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 =.5 15 1 5 3 2 1 3 2 1 1 2 1 2 1 2 Tulislah program untuk contrast stretching dengan Scilab untuk memperbaiki kontras citra lena1.jpg menggunakan fungsi:
x a y (d c) c b a 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, 1, 2, 3,..., L - 1 dan setiap aras keabuan i muncul sebanyak n i kali. Jika jumlah piksel dalam citra adalah n (sehingga n + n 1 + n 2 +... + n L-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: i n n 1... n n i (L 1)
dan kemudian dibulatkan ke nilai yang terdekat. Misalkan sebuah citra dengan kontras yang kurang bagus ditunjukkan dengan histogram berikut. Citra mempunyai 16 aras keabuan ( 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 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 n j 15 7 11 45 8 4 Dan histogramnya dapat digambarkan sbb.
n j 12 1 8 6 4 2 1 2 3 4 5 6 7 8 9 11112131415 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') citra input 15 histogram citra input 1 5 1 2 citra output histogram citra output 15 1 5 1 2
15 1 5 1 2 citra output histogram citra output 15 1 5 1 2 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(:255)/2); membuat LUT >> I = imread( pout.tif ); >> I2 = T(I); >> imshow (I2);