2
Pemrosesan Warna
2.1
Mengkonversi Ruang Warna
|
Toolbox
MATLAB secara otomatis menggunakan ruang warna RGB (red, green, blue) dalam merepresentasikan warna.
Namun, masih ada ruang warna lain yang pada kondisi-kondisi tertentu lebih
sesuai digunakan daripada ruang warna RGB. Ruang-ruang warna tersebut adalah
NTSC, YCbCr, HSV, CMY, CMYK, dan HSI. Toolbox menyediakan fungsi-fungsi untuk
mengkonversi dari RGB menjadi NTSC, YCbCr, HSV, dan CMY, dan sebaliknya. Fungsi
untuk mengkonversi ruang warna dari RGB menjadi HSI dan sebaliknya silahkan
dikembangkan sendiri.
2.2
Ruang Warna NTSC
|
Sistem warna NTSC dipakai oleh
televisi di Amerika Serikat. Salah satu keuntungannya adalah bahwa informasi
keabuan terpisah dari data warna, sehingga sinyal yang sama dapat dipakai untuk
televisi monokrom atau warna. Dalam format NTSC, data memuat tiga komponen;
komponen luminance (Y), komponen hue (I), dan komponen saturation (Q), dimana pemilihan huruf
YIQ adalah berdasarkan konvensional. Komponen Y merepresentasikan data keabuan
dan kedua komponen lainnya merepresentasikan data warna atas suatu sinyal televisi.
Komponen YIQ dapat diperoleh dari komponen RGB menggunakan transformasi:
Perhatikan bahwa elemen-elemen pada baris pertama berjumlah 1 dan penjumlahan elemen-elemen pada dua baris lainnya adalah 0. Hal ini karena untuk suatu citra abu-abu semua komponen RGB bernilai sama, sedangkan komponen I dan Q bernilai 0. Fungsi rgb2ntsc disediakan MATLAB untuk melakukan transformasi ini, dengan sintaks:
YIQ = rgb2ntsc(RGB)
Dengan cara yang sama, komponen
RGB dapat diperoleh dari komponen YIQ menggunakan transformasi:
Fungsi
ntsc2rgb disediakan
MATLAB untuk melakukan transformasi ini, dengan sintaks:
RGB = ntsc2rgb (YIQ)
Perhatikan bahwa kedua matriks
transformasi tersebut saling berketerbalikan. Proses konversi RGB menjadi YIQ
dan kembali lagi menjadi RGB dituliskan dalam skript MATLAB berikut ini:
RGB = imread('board.tif'), imshow(RGB);
NTSC = rgb2ntsc(RGB), imshow(NTSC);
RGB2 = ntsc2rgb(NTSC), imshow(RGB2);
Gambar 2.1 Konversi RGB menjadi NTSC dan
kembali lagi menjadi RGB
2.3
Ruang Warna YCbCr
|
Ruang warna YCbCr sangat luas digunakan di dalam
video. Dalam format ini, informasi luminance
direpresentasikan oleh komponen Y, dan informasi warna disimpan pada komponen
Cb dan Cr. Komponen Cb merupakan selisih antara komponen blue dengan suatu nilai referensi, dan komponen Cr adalah selisih
antara komponen red dengan suatu
nilai referensi. Transformasi untuk mengkonversi RGB menjadi YCbCr adalah
Fungsi
konversi YCBCR = rgb2ycbcr(RGB)
disediakan MATLAB, dengan sintaks:
YCBCR = rgb2ycbcr(RGB)
Gambar 2.2 Konversi RGB menjadi YCbCr
2.4
Ruang Warna HSV
|
HSV (hue, saturation, value) merupakan salah satu sistem warna yang digunakan manusia
dalam memilih warna (cat atau tinta). Sistem ini dipandang lebih dekat daripada
sistem RGB dalam mendeskripsikan sensasi warna oleh mata manusia. Dalam
terminologi yang dianut para seniman, hue,
saturation, dan value berkaitan dengan tint,
shade, dan tone. Perhatikan ruang warna sistem HSV yang direpresentasikan pada
Gambar 2.3.
Gambar 2.3 Representasi sistem warna HSV
Perhatikan bahwa bila R, G, dan B
bernilai sama, maka warna menjadi keabuan; yaitu, intensitas putih. Warna
seperti itu, yang memuat hanya warna putih, akan memiliki nilai saturation nol. Sebaliknya, jika
nilai-nilai RGB benar-benar berbeda, maka warna yang dihasilkan akan memiliki
nilai saturation yang tinggi. Dapat diamati
bahwa jika salah satu dari nilai-nilai RGB bernilai nol, maka saturation akan 1.
yang dinormalisasi dengan 255 terlebih dahulu. Kemudian dapat didefinisikan:
Konversi ini diimplementasikan dalam MATLAB menggunakan fungsi rgb2hsv. Fungsi ini tentu saja didesain untuk suatu array berukuran m x n x 3, tetapi dalam kasus ini hanya diinginkan untuk membuktikan hasil hitungan di atas saja:
rgb2hsv([0.2 0.4 0.6])
ans =
0.5833 0.6667
0.6000
2.5
Citra Warna Dalam MATLAB
|
Karena suatu citra berwarna
memerlukan tiga item informasi terpisah untuk setiap pikselnya, suatu citra
berwarna berukuran m x n direpresentasikan dalam MATLAB oleh suatu array
berukuran m x n x 3: suatu array tiga dimensi. Array tiga dimensi ini bisa dipandang
sebagai suatu entitas tunggal yang memuat tiga matriks terpisah secara
vertikal. Gambar 2.4 menunjukkan suatu diagram yang mengillustrasikan ide
ini.
Suatu citra RGB dibaca dengan:
>> x=imread('wanita.tif');
>> size(x)
ans =
256 256
3
Setiap
komponen warna dapat diisolasi menggunakan operator titik-dua:
x(:,:,1) komponen warna
pertama (Red/merah)
x(:,:,2) komponen warna
kedua (Green/hijau)
x(:,:,3)
komponen warna ketiga (Blue/biru)
Gambar 2.4 Suatu array tiga dimensi untuk
suatu citra RGB
Ketiganya
dapat dilihat menggunakan fungsi imshow:
figure,imshow(x(:,:,1))
figure,imshow(x(:,:,2))
figure,imshow(x(:,:,3))
Gambar 2.5 Suatu citra RGB dan
komponen-komponennya
Anda bisa mengkonversi RGB menjadi ruang warna YIQ
atau HSV dan melihat komponen-komponennya kembali:
xh=rgb2hsv(x);
figure,imshow(x(:,:,1))
figure,imshow(x(:,:,2))
figure,imshow(x(:,:,3))
yang
ditampilkan pada Gambar 2.6. Anda bisa melakukan hal yang sama untuk ruang
warna YIQ:
Gambar 2.6 Komponen-komponen HSV
xn=rgb2ntsc(x);
imshow(xn(:,:,1))
figure,imshow(xn(:,:,2))
figure,imshow(xn(:,:,3))
yang ditampilkan pada Gambar 2.7. Perhatikan bahwa
komponen Y dari ruang warna YIQ memberikan suatu versi keabuan dari citra
daripada komponen Value dari ruang
warna HSV.
Gambar 2.7 Komponen-komponen ruang warna YIQ
2.6
Pewarnaan-Semu (Pseudocoloring)
|
Hal ini berarti bahwa penugasan
warna kepada suatu citra abu-abu untuk membuat aspek-aspek tertentu dari citra
tersebut lebih nyaman dipandang untuk kepentingan interpretasi visual, misalnya
untuk citra medik. Terdapat beberapa metode pewarnaan-semu.
Pengirisan
Intensitas
Dalam metode ini, citra dipecah-pecah menjadi berbagai
rentang nilai keabuan. Yang dilakukan selanjutnya hanyalah menugaskan warna
tertentu untuk tiap rentang yang telah diiris. Misalnya,
Pengirisan intensitas ini
dipandang sebagai pemetaan, yang digambarkan pada Gambar 2.8.
Gambar 2.8 Pengirisan intensitas sebagai
pemetaan
Transformasi
Keabuan Warna
Dimiliki tiga fungsi
,
dan
yang menugaskan nilai-nilai red, green,
dan blue kepada setiap level keabuan
.
Nilai-nilai ini (dengan penskalaan yang sesuai, jika diperlukan) kemudian
digunakan untuk penampilan citra. Dengan menggunakan himpunan fungsi-fungsi
yang sesuai, maka suatu citra abu-abu dapat ditingkatkan menjadi lebih baik,
seperti yang ditampilkan pada Gambar 2.9.
Gambar 2.9 Tiga fungsi transformasi
keabuan-warna
Level
keabuan
dipetakan
menjadi nilai-nilai red, green, dan blue berturut-turut sebesar 0.375, 0.125, dan 0.75. Dalam MATLAB,
cara sederhana untuk melihat suatu citra dengan warna yang telah ditambahkan
adalah dengan menggunakan fungsi imshow dengan parameter tambahan colormap. Misalnya, diambil citra lena.png.
Anda bisa menambahkan fungsi colormap; terdapat beberapa peta warna dalam MATLAB yang
bisa dipilih.
Gambar
2.10 menampilkan citra lena.png
setelah mengalami transformasi warna. Gambar 2.10a didapatkan dengan skript
MATLAB:
b=imread('lena.png');
imshow(b,colormap(jet(256)))
Tetapi
pemilihan peta warna dapat merusak citra tersebut. Citra pada Gambar 2.10b
adalah contohnya, yang menggunakan peta warna vga.
Karena
hanya memiliki 16 baris, maka level keabuan citra direduksi menjadi 16 rentang
saja. Hal ini dilakukan menggunakan fungsi grayslice:
b16=grayslice(b,16);
figure,imshow(b16,colormap(vga))
Gambar 2.10 Menerapkan suatu peta warna
terhadap citra abu-abu
Anda
bisa memeriksa peta-peta warna yang disediakan MATLAB dengan cara mengetikkan help graph3d:
Color maps.
hsv - Hue-saturation-value
color map.
hot -
Black-red-yellow-white color map.
gray - Linear gray-scale
color map.
bone - Gray-scale with tinge
of blue color map.
copper - Linear copper-tone
color map.
pink - Pastel shades of pink
color map.
white - All white color map.
flag - Alternating red,
white, blue, and black color map.
lines - Color map with the
line colors.
colorcube - Enhanced color-cube
color map.
vga - Windows colormap for
16 colors.
jet - Variant of HSV.
prism - Prism color map.
cool - Shades of cyan and
magenta color map.
autumn - Shades of red and
yellow color map.
spring - Shades of magenta and
yellow color map.
winter - Shades of blue and
green color map.
summer - Shades of green and
yellow color map.
Ada
penjelasan atas tiap peta warna yang disediakan MATLAB. Sebagai contoh, anda
bisa mengetikkan help
hsv, akan memberikan penjelasan tentang peta warna hsv.
Anda juga bisa menciptakan peta warna sendiri; peta
tersebut harus berupa suatu matriks dengan 3 kolom, dimana setiap baris memuat
nilai-nilai RGB dari 0.0 sampai 1.0. Misalnya diinginkan untuk menciptakan
suatu peta warna blue, magenta, green, dan red seperti
yang ditunjukkan pada Gambar 2.8. Menggunakan nilai-nilai RGB:
Peta warna sendiri bisa diciptakan
dengan:
petawarnaku=[0 0 1;1 0 1;0 1 0;1 0 0];
Sebelum memakai peta warna tersebut,
citra masukan perlu diskalakan sehingga hanya terdapat empat nilai keabuan 0,
1, 2, dan 3:
b4=grayslice(b,4);
imshow(b4,petawarnaku)
Hasilnya ditampilkan pada Gambar 2.11.
Gambar 2.11 Suatu citra abu-abu yang diwarnai
secara manual menggunakan peta warna sendiri.
2.7
Pemrosesan Citra Warna
|
Ada dua cara memproses citra
berwarna:
- Memproses matriks R, G, dan B secara terpisah.
- Mentransformasi ruang warna menjadi satu dimana intensitas dipisahkan dari warna, dan kemudian memproses komponen intensitas saja.
- Kedua skema ini berturut-turut ditampilkan pada Gambar 2.12. Berikut akan didiskusikan beberapa kasus pemrosesan citra berwarna dan menerapkan kedua skema tersebut.
Peningkatan
Kontrast
Hal
ini paling baik dilakukan dengan pemrosesan intensitas. Diberikan suatu citra yamaguchi.bmp
dan dibaca dengan:
c=imread('yamaguchi.bmp');
Sekarang citra RGB tersebut
dikonversi menjadi YIQ untuk memisahkan komponen intensitasnya:
cn=rgb2ntsc(c);
Sekarang dilakukan ekualisasi
histogram terhadap komponen intensitas tersebut, kemudian dikonversi kembali
menjadi RGB untuk ditampilkan:
cn(:,:,1)=histeq(cn(:,:,1));
c2=ntsc2rgb(cn);
imshow(c2)
Gambar 2.12 (a) Pemrosesan RGB; (b)
Pemrosesan intensitas
Hasilnya ditampilkan pada Gambar 2.13a.
Apakah hasil yang ditampilkan lebih baik masih bisa diperdebatkan, tetapi yang
pasti terjadi adalah peningkatan kontras.
Jika dilakukan ekualisasi
histogram terhadap tiap komponen RGB:
cr=histeq(c(:,:,1));
cg=histeq(c(:,:,2));
cb=histeq(c(:,:,3));
Sekarang
hasil di atas disatukan kembali menjadi suatu array tiga dimensi dan kemudian
ditampilkan menggunakan fungsi imshow,
dan hasilnya ditampilkan pada Gambar 2.13b:
c3=cat(3,cr,cg,cb);
imshow(c3)
Gambar 2.13 Ekualisasi histogram atas suatu
citra berwarna
Pemilteran
Spasial
Kasus pemilteran spasial sangat
bergantung pada jenis filter yang digunakan untuk menentukan skema mana yang
lebih tepat dipakai. Untuk suatu filter lowpass,
katakanlah filter pengabur, anda dapat menggunakannya pada setiap komponen RGB:
a15=fspecial('average',15);
cr=filter2(a15,c(:,:,1));
cg=filter2(a15,c(:,:,2));
cb=filter2(a15,c(:,:,3));
blur=cat(3,cr,cg,cb);
imshow(uint8(blur))
Hasilnya ditampilkan pada Gambar 2.14a.
Anda bisa mendapatkan hasil yang hampir sama bila memprosesnya dengan
pemrosesan intensitas. Tetapi untuk suatu filter highpass, seperti filter unsharp
masking, lebih baik digunakan pemrosesan intensitas saja:
cn=rgb2ntsc(c);
a=fspecial('unsharp');
cn(:,:,1)=filter2(a,cn(:,:,1));
cu=ntsc2rgb(cn);
imshow(cu)
dan hasilnya ditampilkan pada Gambar 2.14b. Pada
umumnya, pemilteran spasial yang dilakukan dengan pemrosesan intensitas akan
menghasilkan keluaran yang cukup baik. Meskipun kadang-kadang pemilteran
spasial dilakukan terhadap setiap komponen RGB, seperti pemilteran lowpass pengabur yang telah dilakukan,
namun tidak ada jaminan bahwa yang akan dihasilkan berkualitas baik. Masalahnya
adalah pemilteran akan mempengaruhi setiap nilai piksel pada tiap komponen RGB,
dan hal ini dapat menghasilkan warna-warna yang tidak diinginkan.
Gambar 2.14 Pemilteran spasial atas suatu
citra berwarna
Penekanan
Derau
Seperti yang telah dilakukan
sebelumnya, berikut dilakukan penekanan derau atas suatu citra berwarna:
tw=imread('rismon.tif');
Derau salt and pepper dapat ditambahkan, dan setiap komponen RGBnya dapat
ditampilkan sebagai berikut:
tn=imnoise(tw,'salt & pepper');
imshow(tn)
figure,imshow(tn(:,:,1))
figure,imshow(tn(:,:,2))
figure,imshow(tn(:,:,3))
Semuanya ditampilkan pada Gambar 2.15.
Kelihatannya diperlukan pemilteran median terhadap tiap komponen RGB yang
dihasilkan. Hal ini dapat dengan mudah dilakukan:
trm=medfilt2(tn(:,:,1));
tgm=medfilt2(tn(:,:,2));
tbm=medfilt2(tn(:,:,3));
tm=cat(3,trm,tgm,tbm);
imshow(tm)
dan hasilnya ditampilkan pada
Gambar 2.16. Dalam kasus penekanan derau, tidak bisa hanya dilakukan pada
komponen Y saja, karena konversi RGB menjadi YIQ akan menyebarkan derau ke
semua komponen YIQ. Jika derau pada komponen Y saja yang ditekan:
tnn=rgb2ntsc(tn);
tnn(:,:,1)=medfilt2(tnn(:,:,1));
tm2=ntsc2rgb(tnn);
imshow(tm2)
Gambar 2.15 Derau pada suatu citra berwarna
Gambar 2.16 Percobaan penekanan derau pada
suatu citra berwarna
Deteksi
Tepi
Suatu
tepi citra merupakan citra biner yang memuat tepi-tepi citra masukan. Ada dua
cara untuk mendapatkan tepi citra berwarna:
- Mengambil hanya komponen intensitas saja, dan kemudian menerapkan fungsi edge terhadapnya.
- Menerapkan fungsi edge pada tiap komponen RGB, kemudian hasil-hasilnya disatukan kembali.
Untuk
menerapkan metode pertama, perlu dipakai fungsi rgb2gray
sebagai berikut:
f=imread('wanita.tif');
fg=rgb2gray(f);
fe1=edge(fg);
imshow(fe1)
Ingat
bahwa fungsi edge
tanpa parameter berarti deteksi tepi Sobel. Hasil yang diperoleh ditampilkan
pada Gambar 2.17. Untuk metode kedua, hasil-hasil yang diperoleh dapat
disatukan kembali menggunakan logika or:
f1=edge(f(:,:,1));
f2=edge(f(:,:,2));
f3=edge(f(:,:,3));
fe2=f1 | f2 | f3;
figure,imshow(fe2)
Gambar 2.17
Tepi-tepi suatu citra berwarna
No comments:
Post a Comment