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 : 


Untuk memudahkan teman-teman dalam belajar, berikut saya sertakan source code konversi RGB ke HSV didasarkan pada rumus cara kedua, dibuat dalam pemrograman Matlab agar lebih mudah. Untuk rumus cara pertama silakan buat sendiri ya !

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



6 comments

Terima kasih telah mampir di blog kami. Jika ingin menghubungi penulis, silakan kirim pesan via email di kitainformatika@gmail.com atau via WA di 087750503014. Jika mood penulis lagi baik, biasanya fast respon.
Comment Author Avatar
January 17, 2017 at 12:14 PM Delete
itu kalo RGB ke YIQ kodingannya seperti apa gan
Comment Author Avatar
January 25, 2017 at 2:27 PM Delete
Baca ini
http://www.charisfauzan.net/2017/01/konversi-ruang-warna-rgb-ke-yiq-dan-yiq.html
Comment Author Avatar
January 6, 2018 at 7:34 PM Delete
gabisa jalan
Comment Author Avatar
June 23, 2018 at 10:48 AM Delete
terimakasih gan, membantu banget penjelasannya
Comment Author Avatar
LUsiana
March 29, 2019 at 8:15 AM Delete
ada materi tentang cielab gan
Comment Author Avatar
Anonymous
June 11, 2022 at 8:14 AM Delete
saya coba kedua rumus diatas secara manual, tapi kenapa untuk hasilnya berbeda dari kedua rumus ya? apa memang seperti itu?