Ruang Warna Hue Saturation Value (HSV) serta Proses Konversinya
Table of Contents
Warna adalah hasil persepsi dari cahaya dalam spektrum wilayah yang terlihat oleh retina mata, dan memiliki panjang gelombang antara 400nm sampai dengan 700nm. Sedangkan ruang warna adalah model matematis abstrak yang menggambarkan cara agar suatu warna dapat direpresentasikan sebagai baris angka biasanya dengan nilai-nilai dari tiga atau empat buah warna atau komponen. contohnya adalah ruang warna RGB, ruang warna CMY/CMYK, ruang warna YIQ, ruang warna YCbCr, ruang warna HSI, HSL, HSV, ruang warna CIELAB.
Sekarang, saya cukup membahas yang HSV dulu. HSV mendefinisikan warna dalam terminologi Hue, Saturation dan Value. Keuntungan HSV adalah terdapat warna-warna yang sama dengan yang ditangkap oleh indra manusia. Sedangkan warna yang dibentuk model lain seperti RGB merupakan hasil campuran dari warna-warna primer.
Model HSV, pertama kali diperkenalkan oleh A.R Smith pada tahun 1978, yang ditunjukkan pada gambar diatas. Silakan dicermati bagaimana teman-teman menafsirkan.
Melalui model gambar diatas, kita tahu bahwa HSV memiliki 3 karakteristik pokok, yaitu Hue, Saturation dan Value. Apa yang dimaksud ketiganya?
- Hue : menyatakan warna sebenarnya, seperti merah, violet, dan kuning dan digunakan menentukan kemerahan (redness), kehijauan (greeness), dsb.
- Saturation : kadang disebut chroma, adalah kemurnian atau kekuatan warna.
- Value : kecerahan dari warna. Nilainya berkisar antara 0-100 %. Apabila nilainya 0 maka warnanya akan menjadi hitam, semakin besar nilai maka semakin cerah dan muncul variasi-variasi baru dari warna tersebut.
Bagaimana mengkonversi warna RGB ke HSV ?
Saya akan menjabarkan 2 cara perhitungan, cara pertama untuk mendapatkan setiap nilai dari HSV relatif lebih sederhana yaitu :
Kemudahan cara pertama ternyata menimbulkan permasalahan, cara pertama membuat hue tidak terdefinisi jika Saturation bernilai 0.
Solusi kedua untuk mendapatkan setiap nilai HSV adalah menggunakan rumus kedua berikut :
Program : RGBkeHSV.m
function [H,S,V] = RGBkeHSV(R,G,B) % RGBkeHSV digunakan untuk mengonversi RGB ke HSV. % 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 % Di antara magenta dan cyan H(m,n) = 4 + (R(m,n)-G(m,n)) / delta; end H(m,n) = H(m,n) * 60; if H(m,n) < 0 H(m,n) = H(m,n)+360; end end end end % Konversikan ke jangkauan [0, 255] atau [0, 360] H = uint8(H * 255/360); S = uint8(S * 255); V = uint8(V * 255);
Sekarang, bagaimana jika dibalik? dibalik menjadi konversi dari HSV ke RGB. No Problem, berikut source code untuk mengkonversi HSV ke RGB.
Program : HSVkeRGB.m
function [R,G,B] = HSVkeRGB(H,S,V) % HSVkeRGB digunakan untuk mengonversi HSV ke RGB % Normalisasi SV ke [0, 1] dan H ke [0, 360] H = double(H); S = double(S); V = double(V); if max(max(H)) > 1.0 || max(max(S)) > 1.0 || ... max(max(V)) > 1.0 H = double(H) / 255 * 360; S = double(S) / 255; V = double(V) / 255; end [tinggi, lebar] = size(H); for m=1: tinggi for n=1: lebar if S(m,n) == 0 R(m,n) = V(m,n); G(m,n) = V(m,n); B(m,n) = V(m,n); else % S != 0 % Menghitung posisi sektor (0 s/d 5) H(m,n) = H(m,n) / 60; sektor = floor(H(m, n)); faktor = H(m,n) - sektor; p = V(m,n) * (1 - S(m,n)); q = V(m,n) * (1 - S(m,n) * faktor); t = V(m,n) * (1 - S(m,n) * (1 - faktor)); switch sektor case 0 R(m,n) = V(m,n); G(m,n) = t; B(m,n) = p; case 1 R(m,n) = q; G(m,n) = V(m,n); B(m,n) = p; case 2 R(m,n) = p; G(m,n) = V(m,n); B(m,n) = t; case 3 R(m,n) = p; G(m,n) = q; B(m,n) = V(m,n); case 4 R(m,n) = t; G(m,n) = p; B(m,n) = V(m,n); otherwise % case 5 R(m,n) = V(m,n); G(m,n) = p; B(m,n) = q; end end end end R = uint8(R * 255); G = uint8(G * 255); B = uint8(B * 255);
Sekian penjabaran saya tentang ruang warna Hue Saturation Value beserta proses konversinya, semoga bermanfaat bagi teman-teman (^_^)
Referensi :
- Konversi Color Space RGB-HSV dan HSV-RGB dengan Metode Travis oleh febripuguhpermana.blogspot.com
- Kadir, Abdul. 2013. Teori dan Aplikasi Pengolahan Citra. Yogyakarta : Andi
Oleh