CITRA BERWARNA
dengan warna merah, hijau, dan biru berada pada pojok sumbu (Gambar 9.1). Warna hitam berada pada
titik asal dan warna putih berada di ujung kubus yang berseberangan. Gambar 9.2 memperlihatkan kubus
warna secara nyata dengan resolusi 24 bit. Perlu diketahui, dengan menggunakan 24 bit, jumlah warna
mencapai 16.777.216.
B
(0,0,1)
Biru
Cyan
Putih
Magenta
(0,1,0)
Aras
keabuan
G
Hitam
Hijau
Merah
Kuning
(1,0,0)
R
Biru
Magenta
Cyan
Hijau
Merah
Kuning
RGB biasa digunakan karena kemudahan dalam perancangan hardware, tetapi sebenarnya tidak
ideal untuk beberapa aplikasi. Mengingat warna merah, hijau, dan biru sesungguhnya terkorelasi erat,
sangat sulit untuk beberapa algoritma pemrosesan citra (Crane, 1997). Sebagai contoh, kebutuhan untuk
memperoleh warna alamiah seperti merah dengan menggunakan RGB menjadi sangat kompleks mengingat
komponen R dapat berpasangan dengan G dan B, dengan nilai berapa saja. Hal ini menjadi mudah jika
menggunakan ruang warna HSV
0,299 0,587
0,114
[ ] = [0,596 0,274 0,322] [ ]
Model HSV, yang pertama kali diperkenalkan A. R. Smith pada tahun 1978, ditunjukkan pada
Gambar 9.4. Untuk mendapatkan nilai H, S, V berdasarkan R, G, dan B, terdapat beberapa cara. Cara yang
tersederhana (Acharya & Ray, 2005) adalah seperti berikut:
3()
= tan(()+())
min(,,)
++
3
=1
=
Namun, cara ini membuat hue tidak terdefinisikan kalau S bernilai nol. Cara kedua terdapat pada
Acharya & Ray (2005). Rumus-rumus yang digunakan sebagai berikut:
0,
60 ( )
,
60 [2 +
],
{60 [4 + ] ,
= H + 360jikaH < 0
= 0
=
=
=
9.5 Percobaan
1. Ketikkan kode sumber (fungsi) RGB ke YIQ berikut pada editor Matlab / M-File:
function [Y, I, Q] = RGBkeYIQ(R,G,B)
% RGBkeYIQ digunakan untuk mengonversi RGB ke YIQ
% Normalisasi RGB ke [0, 1]
R = double(R);
G = double(G);
B = double(B);
if max(max(R)) > 1.0 || max(max(G)) > 1.0 || max(max(B)) > 1.0
R = double(R) / 255;
G = double(G) / 255;
B = double(B) / 255;
end
[tinggi, lebar] = size(R);
for m=1: tinggi
for n=1: lebar
Y(m,n) = 0.299 * R(m,n) + 0.587 * G(m,n) + 0.114*B(m,n);
I(m,n) = 0.596 * R(m,n) - 0.274 * G(m,n) - 0.322*B(m,n);
Q(m,n) = 0.211 * R(m,n) - 0.523 * G(m,n) + 0.312*B(m,n);
end
end
% Konversikan ke jangkauan [0,255]
Y = uint8(Y * 255);
I = uint8(I * 255);
Q = uint8(Q * 255);
2. Simpan kode sumber di atas dengan nama RGBkeYIQ.m, selanjutnya ketikkan di
jendela perintah (command windows) :
>> [Y,I,Q] = RGBkeYIQ(171, 20, 250);
3. Bandingkan hasil konversi nilai luminansinya (Y) dengan hasil konversi fungsi rgb2gray
pada MATLAB, jika ada perubahan jelaskan kemungkinan penyebab terjadinya.
4. Ketikkan kode sumber (fungsi) RGB ke HSV berikut pada editor Matlab / M-File:
function [H,S,V] = RGBkeHSV(R,G,B)
% RGBkeHSV digunakan untuk mengonversi RGB ke HSV.
% Algoritma berdasarkan Nan C. Schaller
% (http://www.cs.rit.edu/~ncs/color/t_convert.html)
% Normalisasi RGB ke [0, 1]
R = double(R);
G = double(G);
B = double(B);
if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...
max(max(B)) > 1.0
R = double(R) / 255;
G = double(G) / 255;
B = double(B) / 255;
end
[tinggi, lebar] = size(R);
for m=1: tinggi
for n=1: lebar
minrgb = min([R(m,n) G(m,n) B(m,n)]);
maxrgb = max([R(m,n) G(m,n) B(m,n)]);
V(m,n) = maxrgb;
delta = maxrgb - minrgb;
if maxrgb == 0
S(m,n) = 0;
H(m,n) = 0;
else
S(m,n) = delta / maxrgb;
if R(m,n) == maxrgb
% Di antara kuning dan magenta
H(m,n) = (G(m,n)-B(m,n)) / delta;
elseif G(m,n) == maxrgb
% Di antara cyan dan kuning
H(m,n) = 2 + (B(m,n)-R(m,n)) / delta;
else
Referensi:
Kadir, A., Susanto,A., (2013) Pengolahan Citra, Teori Dan Aplikasi, Penerbit Andi, Yogyakarta.