The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

Pengolahan Citra - Algoritma Transformasi Ruang Warna

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by lady.gagal1920, 2023-01-06 04:16:10

Pengolahan Citra - Algoritma Transformasi Ruang Warna

Pengolahan Citra - Algoritma Transformasi Ruang Warna

 
 
 
  

ALGORITMA 
TRANSFORMASI RUANG 

WARNA 

RGB, HexTriplet, HSL, HSV, HSI, HCL,    
YUV, YDbDr, YIQ, YCbCr 

DENGAN BAHASA PEMROGRAMAN 
VISUAL BASIC 6,  VISUAL BASIC.NET,  C#.NET,  dan  JAVA 

  HSL, HSV    Visual Basic 6, Visual 
RGB  HSI, HCL  Basic.NET, C#.NET, JAVA 
HEXTriplet  YUV, YDbDr 
YIQ, YCbCr 

 
 
 

Ericks Rachmat Swedia 

Margi Cahyanti 



  

I. RUANG WARNA PADA CITRA

Warna pada dasarnya merupakan hasil persepsi dari cahaya dalam spektrum wilayah
yang terlihat oleh retina mata, dan memiliki panjang gelombang antara 400nm
sampai dengan 700nm (Poynton , 1997).

Ruang warna atau yang sering juga disebut sebagai model warna merupakan sebuah
cara atau metode untuk mengatur, membuat dan memvisualisasikan warna (Ford and
Roberts, 1998). Untuk aplikasi yang berbeda ruang warna yang dipakai bisa juga
berbeda, hal ini dikarenakan beberapa peralatan tertentu memang membatasi secara
ketat ukuran dan jenis ruang warna yang dapat digunakan. Ruang warna biasa
digunakan untuk menganalisis citra. Beberapa ruang warna tersebut antara lain
adalah sebagai berikut :

• RGB(Red Green Blue)
• HSL (Hue Saturation Lightness), HSV (Hue Saturation Value), HSI (Hue

Saturation Intensity), dan HCL (Hue Chroma Lightness)
• YUV, YDbDr, YIQ dan YCbCr (Luminance – Chrominance)

I.1 RGB (Red Green Blue)

RGB sering digunakan didalam sebagian besar aplikasi komputer karena dengan
ruang warna ini, tidak diperlukan transformasi untuk menampilkan informasi di layar
monitor. Alasan diatas juga menyebabkan RGB banyak dimanfaatkan sebagai ruang
warna dasar bagi sebagian besar aplikasi.

Model warna RGB adalah model warna berdasarkan konsep penambahan kuat cahaya
primer yaitu Red, Green dan Blue. Dalam suatu ruang yang sama sekali tidak ada
cahaya, maka ruangan tersebut adalah gelap total. Tidak ada signal gelombang
cahaya yang diserap oleh mata kita atau RGB (0,0,0). Apabila ditambahkan cahaya
merah pada ruangan tersebut, maka ruangan akan berubah warna menjadi merah
misalnya RGB (255,0,0), semua benda dalam ruangan tersebut hanya dapat terlihat
berwarna merah. Demikian juga apabila cahaya diganti dengan hijau atau biru.

Warna RGB (Sumber http://en.wikipedia.org/wiki/RGB_color_model)

 1 
 

Apabila diberikan 2 macam cahaya primer dalam ruangan tersebut seperti (merah
dan hijau), atau (merah dan biru) atau (hijau dan biru), maka ruangan akan berubah
warna masing-masing menjadi kuning, atau magenta atau cyan. Warna-warna yang
dibentuk oleh kombinasi dua macam cahaya tersebut disebut warna sekunder.
Warna Tersier adalah warna yang hanya dapat terlihat apabila ada tiga cahaya
primer, jadi apabila dinon-aktifkan salah satu cahaya, maka benda tersebut berubah
warna. Contoh warna tersier seperti abu-abu,putih.

Pada perhitungan dalam program-program komputer model warna direpresentasi
dengan nilai komponennya, seperti dalam RGB (r, g, b) masing-masing nilai antara 0
hingga 255 sesuai dengan urusan masing-masing yaitu pertama Red, kedua Green
dan ketigha adalah nilai Blue dengan demikian masing-masing komponen ada 256
tingkat. Apabila dikombinasikan maka ada 256 x 256 x 256 atau 16.777.216
kombinasi warna RGB yang dapat dibentuk.

kuning hijau cyan
(255,255,0) (0,255,0) (0,255,255)

• (0, 0, 0) : hitam merah biru
(255,0,0) (0,0,255)
• (255, 255, 255) :
magenta
putih (255,0,255)

• (255, 0, 0) : merah

• (0, 255, 0) : hijau merah
• (0, 0, 255) : biru (255,0,0)
• (255, 255, 0) :

kuning

• (0, 255, 255) : cyan

• (255, 0, 255) :

magenta

Konfigurasi Warna RGB (Sumber http://en.wikipedia.org/wiki/RGB_color_model)

Dalam mendesign web warna RGB kerapkali direpresentasikan dengan Hex Triplet
atau kombinasi 2 pasang bilangan hexadecimal, seperti #FF5D25 artinya Red = FF
atau 15*16 + 15 = 255, Green = 5D atau 5*16 + 13 = 93 dan Blue = 25 atau 2*16 + 5
= 37. Jadi RGB (255,93,37)


 

I.2 HSL

Mode HSL merupakan mode yang ditemukan oleh Alvy Ray Smith pada tahun 1978.
Mode ini merepresentasikan warna dalam tiga komponen: hue, saturation, dan
lightness. Secara konseptual HSL berbentuk kerucut berganda atau lingkaran
dengan pucuknya berwarna putih, sudut dasarnya berwarna hitam, dan warna-warni
sangat pekat pada sekeliling sisi lingkar horizontal serta pada bagian tengah warna
abu-abu sedang .

Ruang Warna HSL (Sumber : http://en.wikipedia.org/wiki/HSL_and_HSV)

Pengertian Hue merupakan karakteristik warna berdasar cahaya yang dipantulkan
oleh objek, dalam warna dilihat dari ukurannya mengikuti tingkatan 0 sampai 359.
Sebagai contoh, pada tingkat 0 adalah warna Merah, 60 adalah warna Kuning, untuk
warna Hijau pada tingkatan 120, sedangkan pada 180 adalah warna Cyan. Untuk
tingkat 240 merupakan warna Biru, serta 300 adalah warna Magenta.

Saturation/Chroma adalah tingkatan warna berdasarkan ketajamannya berfungsi
untuk mendefinisikan warna suatu objek cenderung murni atau cenderung kotor
(gray). Saturation mengikuti persentase yang berkisar dari 0% sampai 100% sebagai
warna paling tajam.

Lightness adalah tingkatan warna berdasarkan pencampuran dengan unsur warna
Putih sebagai unsur warna yang memunculkan kesan warna terang atau gelap. Nilai
koreksi warna pada Lightness berkisar antara 0 untuk warna paling gelap dan 100
untuk warna paling terang.

I.3 HSV

Model warna HSV mendefinisikan warna dalam terminologi Hue, Saturation dan
Value. Hue menyatakan warna sebenarnya, seperti merah, violet, dan kuning. Hue
digunakan untuk membedakan warna-warna dan menentukan kemerahan (redness),
kehijauan (greeness), dsb, dari cahaya. Hue berasosiasi dengan panjang gelombang
cahaya. Saturation menyatakan tingkat kemurnian suatu warna, yaitu
mengindikasikan seberapa banyak warna putih diberikan pada warna. Value adalah


 

atribut yang menyatakan banyaknya cahaya yang diterima oleh mata tanpa
memperdulikan warna

Ruang Warna HSV (Sumber : http://en.wikipedia.org/wiki/HSL_and_HSV)

I.4 HSI

Model warna HSI mendefinisikan warna dalam terminologi Hue, Saturation dan
Intensity. Hue menyatakan warna sebenarnya, seperti merah, violet, dan kuning. Hue
digunakan untuk membedakan warna-warna dan menentukan kemerahan (redness),
kehijauan (greeness), dsb, dari cahaya. Hue berasosiasi dengan panjang gelombang
cahaya. Saturation menyatakan tingkat kemurnian suatu warna, yaitu
mengindikasikan seberapa banyak warna putih diberikan pada warna. Intensity
adalah atribut yang menyatakan banyaknya cahaya yang diterima oleh mata tanpa
memperdulikan warna.

Ruang Warna HSI (Sumber : http://en.wikipedia.org/wiki/HSL_and_HSV)


 

I.5 HCL

Ruang warna HCL(Hue, Chroma, Luminance) telah dikembangkan dengan
mempertahankan kelebihan yang ada pada ruang warna HSL dan HSV serta
menutupi kekurangan yang ada pada keduanya.
Dengan demikian ruang warna ini menjadi lebih optimal untuk kebutuhan analisis
informasi warna dalam citra. Madenda dan Missaoui dalam papernya [2005] telah
membuktikan bahwa, ruang warna HCL memiliki keunggulan yang cukup signifikan
dibandingkan dengan ruang warna lainnya.
Kelebihan dari ruang warna ini diantaranya adalah componen H (warna) memiliki
nilai yang konstan sekalipun terjadi perubahan intensitas cahaya maupun chroma
pada objek.

(a) (b)
Gambar. 2. a) Model ruang warna HCL. b) Representasi variasi chroma C dan

luminance L untuk 6 warna. [Madenda dan Missaoui, 2005]

I.5 YUV (PAL)

YUV adalah ruang warna yang biasanya digunakan sebagai bagian dari kompresi
image. YUV mengurangi komponen chrominance sehingga memperkecil bandwidth
data image namun tidak terlalu berpengaruh dalam penglihatan manusia.
Dalam YUV komponen krominansi (U dan V) dengan jelas terpisah dari komponen
luminansinya (Y) sehingga memudahkan dalam mensegmentasi image. ruang warna
ini biasanya digunakan dalam kebanyakan standar coding citra dan video.


 

Ruang Warna YUV (Sumber : http://en.wikipedia.org/wiki/YUV)

I.6 YDbDr

YdbDr adalah alternatif lain dari YUV, ruang warna ini digunakan di Perancis dan
beberapa negara timur lainnya.
YdbDr terdiri dari komponen - Y, Db and Dr. Y adalah luminance, dan Db, Dr adalah
chrominance (perbedaan antara warna merah dan biru).

I.7 YIQ

YIQ adalah ruang warna yang digunakan oleh TV berwarna NTSC, digunakan
sebagian besar di Amerika Utara dan Tengah dan Jepang. Komponen Y menunjukkan
luma, dan komponen ini adalah satu-satunya komponen yang digunakan oleh
penerima televisi hitam-putih. I berarti in-phase, Q berarti quadrature, mengacu
kepada komponen quadrature amplitudo.
Ruang warna YIQ dimaksudkan untuk mengambil kelebihan dari karakteristik
response penglihatan manusia. Mata manusia lebih sensitif ke perubahan kuning-
biru (I) daripada ke ungu-hijau (Q).

Ruang Warna YIQ(Sumber : http://en.wikipedia.org/wiki/YIQ)


 

I.8 YCbCr

YCbCr merupakan standar internasional bagi pengkodean digital gambar televisi yang
didefinisikan di CCIR Recommendation 601 (Ford dan Roberts, 1998).
Y merupakan komponen luminance, Cb dan Cr adalah komponen chrominance. Pada
monitor monokrom nilai luminance digunakan untuk merepresentasikan warna RGB,
secara psikologis ia mewakili intensitas sebuah warna RGB yang diterima oleh mata.
Chrominance merepresentasikan corak warna dan saturasi (saturation). Nilai
komponen ini juga mengindikasikan banyaknya komponen warna biru dan merah
pada warna (Cuturicu, 1999).
Retina mata mempunyai dua macam sel yang berfungsi sebagai analis visual, yaitu :
Sel yang digunakan untuk penglihatan di waktu malam dan sel yang dipakai untuk
penglihatan di siang hari. Jenis yang pertama hanya menerima corak keabuan mulai
dari warna putih terang sampai dengan hitam pekat. Dan jenis kedua menerima
corak warna. Jika sebuah warna RGB diberikan, sel jenis yang pertama mendeteksi
tingkat keabuan (gray level) yang serupa dengan nilai luminance-nya, sedangkan sel
jenis kedua yang bertanggungjawab terhadap penerimaan corak warna, mendeteksi
nilai yang sesuai dengan nilai chrominancenya (Cuturicu, 1999).


 

II. ALGORITMA TRANSFORMASI WARNA

II.1 KONVERSI HEX TRIPLET KE RGB

Dalam mendesign web, warna RGB kerapkali direpresentasikan dengan Hex Triplet
atau kombinasi 2 pasang bilangan hexadecimal. Hex Triplet pada dasarnya adalah
bilangan Hexadesimal, untuk mengkonversi RGB ke Hex Triplet dibutuhkan konversi
tabel bilangan Hexadesimal ke bilangan desimal seperti tabel dibawah.

HEXADESIMAL DESIMAL HEXADESIMAL DESIMAL
0 0 8 8
1 1 9 9
2 2 A 10
3 3 B 11
4 4 C 12
5 5 D 13
6 6 E 14
7 7 F 15

Jadi bila terdapat Hex Triplet #411BEA, bilangan ini dipecah menjadi 41 untuk Red
dan 1B untuk Green dan EA untuk Blue, sehingga :

• Bilangan 41, untuk karakter yang pertama adalah 4 hexadesimal dan menurut
tabel diatas 4 hexadesimal adalah 4 desimal, maka 4 x 16 =64, sedangkan
untuk karakter yang kedua yaitu 1 dan menurut tabel diatas 1 hexadesimal
adalah 1 desimal, maka 64 + 1 = 65, jadi konversi 41 ke RGB (Red) adalah 65.

• Bilangan 1B, untuk karakter yang pertama adalah 1 hexadesimal dan menurut
tabel diatas 1 hexadesimal adalah 1 desimal, maka 1 x 16 =16, sedangkan
untuk karakter yang kedua yaitu B dan menurut tabel diatas B hexadesimal
adalah 11 desimal, maka 16 + 11 = 27 jadi konversi 1B ke RGB (Green) adalah
27.

• Bilangan EA, untuk karakter yang pertama adalah E hexadesimal dan menurut
tabel diatas E hexadesimal adalah 14 desimal, maka 14 x 16 = 224, sedangkan

untuk karakter yang kedua yaitu A dan menurut tabel diatas A hexadesimal
adalah 10 desimal, maka 224 + 10 = 234, jadi konversi EA ke RGB (Blue)
adalah 234.

Jadi konversi dari Hex Triplet #411BEA ke RGB adalah 65, 27, 234.


 

Berdasarkan langkah-langkah konversi diatas, maka untuk mengimplementasikan ke
bahasa pemrograman adalah sebagai berikut :

II.1.A VISUAL BASIC 6 9 

0 Private Function Konversi_HexTriplet_RGB(HEXTRIPLET As String) As String
1 Dim strData As String
2 Dim strRet As String
3
4 strData = Replace(HEXTRIPLET, "#", "")
5 strData = UCase$(strData)
6 If Len(strData) >= 6 Then
7 Dim strRed As String, strGreen As String, strBlue As String
8
9 strRed = CStr(Hex_Des(Mid$(strData, 1, 1)) * 16 + _
10 Hex_Des(Mid$(strData, 2, 1)))
11
12 strGreen = CStr(Hex_Des(Mid$(strData, 3, 1)) * 16 + _
13 Hex_Des(Mid$(strData, 4, 1)))
14
15 strBlue = CStr(Hex_Des(Mid$(strData, 5, 1)) * 16 + _
16 Hex_Des(Mid$(strData, 6, 1)))
17
18 strRet = strRed + "," + strGreen + "," + strBlue
19 End If
20
21 Konversi_HexTriplet_RGB = strRet
22 End Function

Untuk mengkonversi Hexadesimal ke desimal dibutuhkan function berikut :

0 Private Function Hex_Des(HEXA As String) As Integer
1 Dim iRet As Integer
2 Select Case HEXA
3 Case "A"
4 iRet = 10
5 Case "B"
6 iRet = 11
7 Case "C"
8 iRet = 12
9 Case "D"
10 iRet = 13
11 Case "E"
12 iRet = 14
13 Case "F"
14 iRet = 15
15 Case Else
16 If IsNumeric(HEXA) Then iRet = CInt(HEXA)
17 End Select
18
19 Hex_Des = iRet
20 End Function

 

II.1.B VISUAL BASIC.NET

0 Private Function Konversi_HexTriplet_RGB(ByVal HEXTRIPLET As String) As String
1 Dim strData As String
2 Dim strRet As String
3
4 strRet = ""
5 strData = HEXTRIPLET.Replace("#", "").ToUpper()
6 If strData.Length >= 6 Then
7 Dim strRed As String, strGreen As String, strBlue As String
8
9 strRed = CStr(Hex_Des(strData.Substring(0, 1)) * 16 + _
10 Hex_Des(strData.Substring(1, 1)))
11
12 strGreen = CStr(Hex_Des(strData.Substring(2, 1)) * 16 + _
13 Hex_Des(strData.Substring(3, 1)))
14
15 strBlue = CStr(Hex_Des(strData.Substring(4, 1)) * 16 + _
16 Hex_Des(strData.Substring(5, 1)))
17
18 strRet = strRed + "," + strGreen + "," + strBlue
19 End If
20
21 Return strRet
22 End Function

Untuk mengkonversi Hexadesimal ke desimal dibutuhkan function berikut :

0 Private Function Hex_Des(ByVal HEXA As String) As Integer
1 Dim iRet As Integer
2
3 iRet = 0
4 Select Case HEXA
5 Case "A"
6 iRet = 10
7 Case "B"
8 iRet = 11
9 Case "C"
10 iRet = 12
11 Case "D"
12 iRet = 13
13 Case "E"
14 iRet = 14
15 Case "F"
16 iRet = 15
17 Case Else
18 If IsNumeric(HEXA) Then iRet = CInt(HEXA)
19 End Select
20
21 Return iRet
22 End Function

10 
 

II.1.C C# 11 

0 private string Konversi_HexTriplet_RGB(string HEXTRIPLET)
1{
2 string strData;
3 string strRet;
4
5 strData=HEXTRIPLET.Replace("#","").ToUpper();
6 strRet = "";
7
8 if (strData.Length >= 6)
9{
10 string strRed, strGreen, strBlue;
11
12 strRed = Convert.ToString(Hex_Des(strData.Substring(0, 1)) * 16 +
13 Hex_Des(strData.Substring(1, 1)));
14 strGreen = Convert.ToString(Hex_Des(strData.Substring(2, 1)) * 16 +
15 Hex_Des(strData.Substring(3, 1)));
16 strBlue = Convert.ToString(Hex_Des(strData.Substring(4, 1)) * 16 +
17 Hex_Des(strData.Substring(5, 1)));
18
19 strRet = strRed + "," + strGreen + "," + strBlue;
20 }
21 return strRet;
22 }

Method konversi dari Hexadesimal ke desimal dalam C# :

0 private int Hex_Des(string HEXA)
1{
2 int iRet = 0;
3
4 if (HEXA == "A")
5 iRet = 10;
6 else if (HEXA == "B")
7 iRet = 11;
8 else if (HEXA == "C")
9 iRet = 12;
10 else if (HEXA == "D")
11 iRet = 13;
12 else if (HEXA == "E")
13 iRet = 14;
14 else if (HEXA == "F")
15 iRet = 15;
16 else
17 {
18 try {
19 iRet = Convert.ToInt32(HEXA);
20 }
21 catch (Exception) { }
22 }
23
24 return iRet;
25 }

 

II.1.D JAVA 12 

0 private String Konversi_HexTriplet_RGB(String HEXTRIPLET)
1{
2 String strData;
3 String strRet;
5 strData=HEXTRIPLET;
6 strRet = "";
8 if (strData.length() >= 6)
9{
10 int strRed, strGreen, strBlue;
11
12 strRed = Hex_Des(strData.substring(0, 1)) * 16 +
13 Hex_Des(strData.substring(1, 2));
14 strGreen = Hex_Des(strData.substring(2, 3)) * 16 +
15 Hex_Des(strData.substring(3, 4));
16 strBlue = Hex_Des(strData.substring(4, 5)) * 16 +
17 Hex_Des(strData.substring(5));
18
19 strRet = String.valueOf(strRed) + "," + String.valueOf(strGreen) +
20 "," + String.valueOf(strBlue);
21 }
22 return strRet;
23 }

Method konversi dari Hexadesimal ke desimal dalam Java :

0 private int Hex_Des(String HEXA)
1{
2 int iRet = 0;
3
4 if (HEXA.equals("A"))
5 iRet = 10;
6 else if (HEXA.equals("B"))
7 iRet = 11;
8 else if (HEXA.equals("C"))
9 iRet = 12;
10 else if (HEXA.equals("D"))
11 iRet = 13;
12 else if (HEXA.equals("E"))
13 iRet = 14;
14 else if (HEXA.equals("F"))
15 iRet = 15;
16 else
17 {
18 try
19 {
20 iRet = Integer.parseInt(HEXA);
21 }
22 catch(Exception ex) {}
23 }
24
25 return iRet;
26 }

 

Function/Method Konversi_HexTriplet_RGB (dalam bahasa pemrograman VB,
VB.NET, C# dan Java) diatas menerima parameter data HexTriplet berupa string,

contoh parameter yang dikirimkan adalah 411BEA, dan function ini akan
mengembalikan nilai RGB yang bertipe string dan dipisahkan dengan koma, contoh
output adalah 65,27,234.

II.2 RGB KE HEX TRIPLET

Untuk menkonversi RGB ke Hex Triplet, misal RGB(65, 27, 234) maka langkahnya
adalah :

• 65 / 16 = 4.06, bilangan 4 dikonversikan menurut tabel konversi hexadesimal
diatas adalah 4, dan sisa pembagiannya adalah 1 dikonversikan menurut tabel
konversi hexadesimal adalah 1 maka Hex Triplet untuk RGB (Red) 65 adalah
41.

• 27 / 16 = 1.68, bilangan 1 dikonversikan menurut tabel konversi hexadesimal
diatas adalah 1, dan sisa pembagiannya adalah 11 dikonversikan menurut
tabel konversi hexadesimal adalah B maka Hex Triplet untuk RGB (Green) 27
adalah 1B.

• 234 / 16 = 14.625, bilangan 14 dikonversikan menurut tabel konversi
hexadesimal diatas adalah E, dan sisa pembagiannya adalah 10 dikonversikan
menurut tabel konversi hexadesimal adalah A maka Hex Triplet untuk RGB
(Blue) 234 adalah EA.

Jadi konversi dari RGB(65, 27, 234) ke Hex Triplet adalah 411BEA.

Berdasarkan langkah-langkah konversi diatas, maka untuk mengimplementasikan ke
bahasa pemrograman adalah sebagai berikut :

II.2.A VISUAL BASIC 6 13 

0 Private Function Konversi_RGB_HexTriplet(RGB As String) As String
1 Dim strData() As String
2 Dim strRet As String
3
4 strRet = ""
5 strData = Split(RGB, ",")
6 If UBound(strData) >= 2 Then
7 Dim strRed As String, strGreen As String, strBlue As String
8 Dim iRed1 As Single
9 Dim iRed2 As Single
10
11 iRed1 = Fix(CSng(strData(0)) / 16)
12 iRed2 = Fix(CSng(strData(0)) Mod 16)

 

13 strRed = Des_Hex(CStr(iRed1)) + _ 14 
14 Des_Hex(CStr(iRed2))
15 Dim iGreen1 As Single
16 Dim iGreen2 As Single
17
18 iGreen1 = Fix(CSng(strData(1)) / 16)
19 iGreen2 = Fix(CSng(strData(1)) Mod 16)
20 strGreen = Des_Hex(CStr(iGreen1)) + _
21 Des_Hex(CStr(iGreen2))
22
23 Dim iBlue1 As Single
24 Dim iBlue2 As Single
25
26 iBlue1 = Fix(CSng(strData(2)) / 16)
27 iBlue2 = Fix(CSng(strData(2)) Mod 16)
28 strBlue = Des_Hex(CStr(iBlue1)) + _
29 Des_Hex(CStr(iBlue2))
30
31 strRet = strRed + strGreen + strBlue
32 End If
33
34 Konversi_RGB_HexTriplet = strRet
35 End Function

Function konversi dari Hexadesimal ke desimal dalam VB :

0 Private Function Des_Hex(DESIMAL As Single) As String
1 Dim strRet As String
2
3 strRet = DESIMAL
4 Select Case DESIMAL
5 Case 10
6 strRet = "A"
7 Case 11
8 strRet = "B"
9 Case 12
10 strRet = "C"
11 Case 13
12 strRet = "D"
13 Case 14
14 strRet = "E"
15 Case 15
16 strRet = "F"
17 End Select
18
19 Des_Hex = strRet
20 End Function

 

II.2.B VISUAL BASIC.NET 15 

0 Private Function Konversi_RGB_HexTriplet(ByVal RGB As String) As String
1 Dim strData() As String
2 Dim strRet As String
3
4 strRet = ""
5 strData = RGB.Split(",")
6 If strData.Length >= 3 Then
7 Dim strRed As String, strGreen As String, strBlue As String
8
9 Dim iRed1 As Single
10 Dim iRed2 As Single
11
12 iRed1 = Fix(CSng(strData(0)) / 16)
13 iRed2 = Fix(CSng(strData(0)) Mod 16)
14 strRed = Des_Hex(iRed1) + Des_Hex(iRed2)
15
16 Dim iGreen1 As Single
17 Dim iGreen2 As Single
18
19 iGreen1 = Fix(CSng(strData(1)) / 16)
20 iGreen2 = Fix(CSng(strData(1)) Mod 16)
21 strGreen = Des_Hex(iGreen1) + Des_Hex(iGreen2)
22
23 Dim iBlue1 As Single
24 Dim iBlue2 As Single
25
26 iBlue1 = Fix(CSng(strData(2)) / 16)
27 iBlue2 = Fix(CSng(strData(2)) Mod 16)
28 strBlue = Des_Hex(iBlue1) + Des_Hex(iBlue2)
29
30 strRet = strRed + strGreen + strBlue
31 End If
32 Return strRet
33 End Function

Function konversi dari Hexadesimal ke desimal dalam VB.NET :

0 Private Function Des_Hex(ByVal DESIMAL As Single) As String
1 Dim strRet As String
2
3 strRet = DESIMAL
4 Select Case DESIMAL
5 Case 10
6 strRet = "A"
7 Case 11
8 strRet = "B"
9 Case 12
10 strRet = "C"
11 Case 13
12 strRet = "D"
13 Case 14
14 strRet = "E"

 

15 Case 15 16 
16 strRet = "F"
17 End Select
18 Return strRet
19 End Function

II.2.C C#

0 private string Konversi_RGB_HexTriplet(string RGB)
1{
2 string[] strData;
3 string strRet;
4
5 strData = RGB.Split(',');
6 strRet = "";
7
8 if (strData.Length >= 3)
9{
10 string strRed, strGreen, strBlue;
11 double iRed1, iRed2;
12 iRed1 = Math.Truncate(Convert.ToDouble(strData[0]) / 16);
13 iRed2 = Math.Truncate(Convert.ToDouble(strData[0]) % 16);
14 strRed = Des_Hex(iRed1) + Des_Hex(iRed2);
15
16 double iGreen1, iGreen2;
17 iGreen1 = Math.Truncate(Convert.ToDouble(strData[1]) / 16);
18 iGreen2 = Math.Truncate(Convert.ToDouble(strData[1]) % 16);
19 strGreen = Des_Hex(iGreen1) + Des_Hex(iGreen2);
20
21 double iBlue1, iBlue2;
22 iBlue1 = Math.Truncate(Convert.ToDouble(strData[2]) / 16);
23 iBlue2 = Math.Truncate(Convert.ToDouble(strData[2]) % 16);
24 strBlue = Des_Hex(iBlue1) + Des_Hex(iBlue2);
25
26 strRet = strRed + strGreen + strBlue;
27 }
28 return strRet;
29 }

Method konversi dari Hexadesimal ke desimal dalam C# :

0 private string Des_Hex(double DESIMAL)
1{
2 string strRet = DESIMAL.ToString();
3
4 if (DESIMAL == 10)
5 strRet = "A";
6 else if (DESIMAL == 11)
7 strRet = "B";
8 else if (DESIMAL == 12)
9 strRet = "C";
10 else if (DESIMAL == 13)

 

11 strRet = "D"; 17 
12 else if (DESIMAL == 14)
13 strRet = "E";
14 else if (DESIMAL == 15)
15 strRet = "F";
16
17 return strRet;
18 }

II.2.D JAVA

0 private String Konversi_RGB_HexTriplet(String RGB)
1{
2 String[] strData;
3 String strRet;
4
5 strData = RGB.split(",");
6 strRet = "";
7
8 if (strData.length >= 2)
9{
10 String strRed, strGreen, strBlue;
11 double iRed1, iRed2;
12 iRed1 = Double.parseDouble(strData[0]) / 16;
13 iRed2 = Double.parseDouble(strData[0]) % 16;
14 strRed = Des_Hex((int)iRed1) + Des_Hex((int)iRed2);
15
16 double iGreen1, iGreen2;
17 iGreen1 = Double.parseDouble(strData[1]) / 16;
18 iGreen2 = Double.parseDouble(strData[1]) % 16;
19 strGreen = Des_Hex((int)iGreen1) + Des_Hex((int)iGreen2);
20
21 double iBlue1, iBlue2;
22 iBlue1 = Double.parseDouble(strData[2]) / 16;
23 iBlue2 = Double.parseDouble(strData[2]) % 16;
24 strBlue = Des_Hex((int)iBlue1) + Des_Hex((int)iBlue2);
25
26 strRet = strRed + strGreen + strBlue;
27 }
28 return strRet;
29 }

Method konversi dari Hexadesimal ke desimal dalam Java :

0 private String Des_Hex(int DESIMAL)
1{
2 String strRet = Integer.toString(DESIMAL);
3
4 if (DESIMAL == 10)
5 strRet = "A";
6 else if (DESIMAL == 11)
7 strRet = "B";

 

8 else if (DESIMAL == 12)
9 strRet = "C";
10 else if (DESIMAL == 13)
11 strRet = "D";
12 else if (DESIMAL == 14)
13 strRet = "E";
14 else if (DESIMAL == 15)
15 strRet = "F";
16
17 return strRet;
18 }

RGB terdiri dari bilangan Red, Green dan Blue, untuk memasukkan bilangan RGB ke
function/method Konversi_RGB_HexTriplet diatas, data dipisahkan oleh tanda koma
(,), jadi contoh pengiriman parameter ke function/method Konversi_RGB_HexTriplet
diatas adalah 65,27,234. Output dari function ini akan berupa data HexTriplet
bertipe string, contoh : 411BEA.

II.3 TRANSFORMASI RGB KE HSL

Untuk mentransformasi nilai dari RGB ke HSL diasumsikan koordinat-koordinat R, G,
B [0,1] adalah berurutan merah, hijau, biru dalam ruang warna RGB. Nilai max
adalah nilai maksimum dari nilai red, green, blue, dan min adalah nilai
minimum dari nilai red, green, blue. Untuk memperoleh sudut hue[0,3600] yang
tepat untuk ruang warna HSL menggunakan rumus seperti berikut
(http://en.wikipedia.org/wiki/HSL_and_HSV) :

  
0,   max

 60       max       6   ,    max  
  

60       max       2   ,    max  

60       max       4   , max

Untuk mendapatkan saturation dan lightness (kecerahan cahaya) yang tepat pada
HSL, dengan koordinat s, l [0,1] menggunakan rumus seperti berikut :

     1    max  min   
2

18 
 

0   ,   max   

          max    ,           0.5 
2      

    m2ax    ,         0.5 
2L

Rumus di atas menghasilkan nilai lightness dan saturation dalam jangkauan [0,1].
Kalikan dengan 255 untuk memperoleh nilai dengan jangkauan [0,255].

Transformasi RGB ke HSL/HSI/HSV/HCL dan sebaliknya menghasilkan bilangan
real, sementara media bitmap bekerja pada bilangan integer diskrit, karena itu perlu
dilakukan pembulatan. Jumlah kemungkinan mode RGB ada 256x256x256 =
16.777.216 warna, sedangkan mode HSL/HSI/HSV/HCL ada 360x100x100 =
3.600.000 warna. Jadi akan ada warna-warna yang jika ditransformasikan hasilnya

tidak akan sama akibat pembulatan.

Misalnya ingin ditransformasikan RGB(65, 27, 234) ke dalam bentuk HSL, maka
langkahnya adalah sebagai berikut :

Setiap nilai RGB(65, 27, 234) diubah dalam jangkauan [0,1] dengan membagi setiap
nilai dengan 255 :

menjadi    ,  ,     = 0.255, 0.106, 0.918 

RGB(0.255, 0.104, 0.918) ini yang akan ditransformasikan ke bentuk HSL.

max = nilai B (blue) = 0.918,
min = nilai G (green) = 0.106,
max – min = 0.918 – 0.106 = 0.812.

h (hue) = 60               4   , karena max = B (blue).
 

= 60        .    .     4  = 2510
.

l (lightness) =    max  min   
  =    0.918  0.106    = 0.512

s (saturation) =       , karena l (lightness) > 0.5
L = 0.832

=    .
  .

19 
 

sehingga nilai RGB(65, 27, 234) ditransformasikan menjadi HSL(2510, 0.832, 0.512)
dengan jangkauan RGB [0,1].

Berdasarkan langkah - langkah transformasi diatas, maka untuk meng-
implementasikan ke bahasa pemrograman adalah sebagai berikut :

II.3.A VISUAL BASIC 6

0 Private Function RGB_HSL(RGB As String) As String
1 Dim strData() As String
2 Dim strRet As String
3 Dim H As Double
4 Dim S As Double
5 Dim L As Double
6
7 strRet = ""
8 strData = Split(RGB, ",")
9 If UBound(strData) >= 2 Then
10 Dim R As Double, G As Double, B As Double
11 Dim max As Double, min As Double
12
13 R = CDbl(strData(0)) / 255
14 G = CDbl(strData(1)) / 255
15 B = CDbl(strData(2)) / 255
16 max = R
17 If max < G Then max = G
18 If max < B Then max = B
19 min = R
20 If min > G Then min = G
21 If min > B Then min = B
22
23 If max = min Then
24 H = 0
25 ElseIf max = R Then
26 H = 60 * (((G - B) / (max - min)) Mod 6)
27 ElseIf max = G Then
28 H = 60 * (((B - R) / (max - min)) + 2)
29 ElseIf max = B Then
30 H = 60 * (((R - G) / (max - min)) + 4)
31 End If
32
33 L = 0.5 * (max + min)
34
35 If max = min Then S = 0
36 If L <= 0.5 Then
37 S = (max - min) / (2 * L)
38 ElseIf L > 0.5 Then
39 S = (max - min) / (2 - (2 * L))
40 End If
41 End If
42 RGB_HSL = Format$(H, "0.000") + "," + Format$(S, "0.000") + "," + Format$(L, "0.000")
43 End Function

20 
 

II.3.B VISUAL BASIC.NET

0 Private Function RGB_HSL(ByVal RGB As String) As String
1 Dim strData() As String
2 Dim strRet As String
3
4 strRet = ""
5 strData = RGB.Split(",")
6 If strData.Length() >= 3 Then
7 Dim R As Double, G As Double, B As Double
8 Dim H As Double
9 Dim S As Double
10 Dim L As Double
11 Dim max As Double
12 Dim min As Double
13
14 R = CDbl(strData(0)) / 255
15 G = CDbl(strData(1)) / 255
16 B = CDbl(strData(2)) / 255
17 max = R
18 If max < G Then max = G
19 If max < B Then max = B
20
21 min = R
22 If min > G Then min = G
23 If min > B Then min = B
24
25 If max = min Then
26 H = 0
27 ElseIf max = R Then
28 H = 60 * (((G - B) / (max - min)) Mod 6)
29 ElseIf max = G Then
30 H = 60 * (((B - R) / (max - min)) + 2)
31 ElseIf max = B Then
32 H = 60 * (((R - G) / (max - min)) + 4)
33 End If
34
35 L = 0.5 * (max + min)
36
37 If max = min Then S = 0
38
39 If L <= 0.5 Then
40 S = (max - min) / (2 * L)
41 ElseIf L > 0.5 Then
42 S = (max - min) / (2 - (2 * L))
43 End If
44
45 strRet = H.ToString("0.000") + "," + S.ToString("0.000") + "," + L.ToString("0.000")
46 End If
47
48 Return strRet
49 End Function

21 

 

II.3.C C#

0 private string RGB_HSL(string RGB)
1{
2 string[] strData;
3 string strRet = "";
4
5 strData = RGB.Split(',');
6 if (strData.Length >= 3)
7{
8 double R, G, B;
9 double H = 0;
10 double S = 0;
11 double L = 0;
12 double max;
13 double min;
14
15 R = double.Parse(strData[0]) / 255;
16 G = double.Parse(strData[1]) / 255;
17 B = double.Parse(strData[2]) / 255;
18 max = R;
19 if (max < G) max = G;
20 if (max < B) max = B;
21
22 min = R;
23 if (min > G) min = G;
24 if (min > B) min = B;
25
26 if (max == min)
27 H = 0;
28 else if (max == R)
29 H = 60 * (((G - B) / (max - min)) % 6);
30 else if (max == G)
31 H = 60 * (((B - R) / (max - min)) + 2);
32 else if (max == B)
33 H = 60 * (((R - G) / (max - min)) + 4);
34
35 L = 0.5 * (max + min);
36
37 if (max == min) S = 0;
38
39 if (L <= 0.5)
40 S = (max - min) / (2 * L);
41 else if (L > 0.5)
42 S = (max - min) / (2 - (2 * L));
43
44 strRet = H.ToString("0.000") + "," + S.ToString("0.000") + "," + L.ToString("0.000");
45 }
46
47 return strRet;
48 }

22 

 

II.3.D JAVA

0 private String RGB_HSL(String RGB)
1{
2 String[] strData;
3 String strRet = "";
4
5 strData = RGB.split(",");
6 if (strData.length >= 2)
7{
8 double R, G, B, , max, min, H = 0, S = 0, double L = 0;
9
10 R = Double.parseDouble(strData[0]) / 255;
11 G = Double.parseDouble(strData[1]) / 255;
12 B = Double.parseDouble(strData[2]) / 255;
13 max = R;
14 if (max < G) max = G;
15 if (max < B) max = B;
16
17 min = R;
18 if (min > G) min = G;
19 if (min > B) min = B;
20
21 if (max == min)
22 H = 0;
23 else if (max == R)
24 H = 60 * (((G - B) / (max - min)) % 6);
25 else if (max == G)
26 H = 60 * (((B - R) / (max - min)) + 2);
27 else if (max == B)
28 H = 60 * (((R - G) / (max - min)) + 4);
29
30 L = 0.5 * (max + min);
31
32 if (max == min) S = 0;
33
34 if (L <= 0.5)
35 S = (max - min) / (2 * L);
36 else if (L > 0.5)
37 S = (max - min) / (2 - (2 * L));
38
39 java.text.DecimalFormat df = new java.text.DecimalFormat ("0.###");
40 strRet = df.format(H) + "," + df.format(S) + "," + df.format(L);
41 }
42
43 return strRet;
44 }

RGB terdiri dari bilangan Red, Green dan Blue, untuk memasukkan bilangan RGB ke
function/method RGB_HSL diatas, data dipisahkan oleh tanda koma (,), jadi contoh
pengiriman parameter ke function/method RGB_HSL diatas adalah 65,27,234.
Output dari function/method ini akan berupa data HSL bertipe string, contoh : 289.5,
0.833, 0.512.

23 

 

II.4 TRANSFORMASI HSL KE RGB

Untuk transformasi kembali dari HSL ke RGB, gunakan rumus berikut. Dengan hue
H [0°, 360°), saturation S [0, 1], dan lightness L [0, 1] :
(http://en.wikipedia.org/wiki/HSL_and_HSV)

2      ,           
 

  2 2    ,       

′   60

  1 | ′  2 1|

     0, 0, 0  ,     
 0 
, , 0  ,                        1  ′1
 2  ′2
, , 0  ,                        3  ′3
 4  ′4
1, 1, 1   0, ,  ,                        5  ′5
′6
0, ,  ,                      

, 0,  ,                      

, 0, 0  ,                       

 

,, 1, 1, 1

Rumus di atas menghasilkan nilai RGB dalam jangkauan [0,1]. Untuk jangkauan
[0,255], kalikan dengan 255.

Transformasikan HSL(2510, 0.832, 0.512) ke dalam bentuk RGB, maka langkahnya
adalah sebagai berikut :

L = 0.512 lebih besar dari 0.5, maka

C = (2 – 2L) x S

= (2 – (2 x 0.512)) x 0.832 = 0.812

H’ = H / 600 = 251 / 60 = 4.183

X = C ( 1 – |H’ mod 2 – 1|)
= 0.812 (1 - |(4.183 mod 2) - 1|)
= 0.812 (1 - 0.187)
= 0.812 (0.183) = 0.149

24 
 

(R1, G1, B1) = (X, 0, C), karena H’ = 4.183 ≥ 4 dan H’ < 5
= (0.149, 0, 0.812)

m = L - 0.5(C)
= 0.512 - 0.5(0.812) = 0.512 - 0.406 = 0.106

(R, G, B) = (R1 + m, G1 + m, B1 + m)
0.812 + 0.106)
= (0.149 + 0.106, 0 + 0.106, 0.918)

= (0.255, 0.106,

RGB (0.255, 0.106, 0.918) ini dalam jangkauan [0,1] untuk jangkauan [0,255] kalikan
dengan 255 : (0.255 x 255, 0.106 x 255, 0.918 x 255) menjadi (65.025, 27,03,
234.09) bulatkan keatas menjadi (65, 27, 234).

Berdasarkan langkah-langkah transformasi diatas, maka untuk

mengimplementasikan ke bahasa pemrograman adalah sebagai berikut :

II.4.A VISUAL BASIC 6 25 

0 Private Function HSL_RGB(HSL As String) As String
1 Dim strData() As String
2 Dim strRet As String
3 Dim R As Double, G As Double, B As Double
4
5 strRet = ""
6 strData = Split(HSL, ",")
7 If UBound(strData) >= 2 Then
8 Dim R1 As Double, G1 As Double, B1 As Double
9 Dim H As Double, S As Double, L As Double
10 Dim H1 As Double
11 Dim X As Double
12 Dim C As Double
13 Dim m As Double
14
15 H = CDbl(strData(0))
16 S = CDbl(strData(1))
17 L = CDbl(strData(2))
18
19 If L <= 0.5 Then
20 C = 2 * L * S
21 ElseIf L > 0.5 Then
22 C = (2 - 2 * L) * S
23 End If
24
25 H1 = H / 60
26
27 X = H1 Mod 2 : X = Abs(X - 1) : X = C * (1 - X)
28
29 If H1 >= 0 And H1 < 1 Then
30 R1 = C: G1 = X: B1 = 0
31 ElseIf H1 >= 1 And H1 < 2 Then

 

32 R1 = X: G1 = C: B1 = 0 26 
33 ElseIf H1 >= 2 And H1 < 3 Then
34 R1 = 0: G1 = C: B1 = X
35 ElseIf H1 >= 3 And H1 < 4 Then
36 R1 = 0: G1 = X: B1 = C
37 ElseIf H1 >= 4 And H1 < 5 Then
38 R1 = X: G1 = 0: B1 = C
39 ElseIf H1 >= 5 And H1 < 6 Then
40 R1 = C: G1 = 0: B1 = 0
41 Else
42 R1 = 0: G1 = 0: B1 = 0
43 End If
44
45 m = L - (0.5 * C)
46
47 R = Round((R1 + m) * 255)
48 G = Round((G1 + m) * 255)
49 B = Round((B1 + m) * 255)
50 End If
51
52 HSL_RGB = Format$(R, "###") + "," + Format$(G, "###") + "," + Format$(B, "###")
53 End Function

II.4.B VISUAL BASIC.NET

0 Private Function HSL_RGB(ByVal HSL As String) As String
1 Dim strData() As String
2 Dim strRet As String
3
4 strRet = ""
5 strData = HSL.Split(",")
6 If strData.Length() >= 3 Then
7 Dim R As Double, G As Double, B As Double
8 Dim R1 As Double, G1 As Double, B1 As Double
9 Dim H As Double, S As Double, L As Double
10 Dim H1 As Double
11 Dim X As Double
12 Dim C As Double
13 Dim m As Double
14
15 H = CDbl(strData(0))
16 S = CDbl(strData(1))
17 L = CDbl(strData(2))
18
19 If L <= 0.5 Then
20 C = 2 * L * S
21 ElseIf L > 0.5 Then
22 C = (2 - 2 * L) * S
23 End If
24
25 H1 = H / 60
26
27 X = Math.Abs((H1 Mod 2) - 1)

 

28 X = C * (1 - X) 27 

29 If H1 >= 0 And H1 < 1 Then
30 R1 = C : G1 = X : B1 = 0
31 ElseIf H1 >= 1 And H1 < 2 Then
32 R1 = X : G1 = C : B1 = 0
33 ElseIf H1 >= 2 And H1 < 3 Then
34 R1 = 0 : G1 = C : B1 = X
35 ElseIf H1 >= 3 And H1 < 4 Then
36 R1 = 0 : G1 = X : B1 = C
37 ElseIf H1 >= 4 And H1 < 5 Then
38 R1 = X : G1 = 0 : B1 = C
39 ElseIf H1 >= 5 And H1 < 6 Then
40 R1 = C : G1 = 0 : B1 = 0
41 Else
42 R1 = 0 : G1 = 0 : B1 = 0
43 End If
44
45 m = L - (0.5 * C)
46
47 R = Math.Round((R1 + m) * 255)
48 G = Math.Round((G1 + m) * 255)
49 B = Math.Round((B1 + m) * 255)
50
51 strRet = R.ToString("###") + "," + G.ToString("###") + "," + B.ToString("###")
52 End If
53
54 Return strRet
55 End Function

II.4.C C#

0 private string HSL_RGB(string HSL)
1{
2 string[] strData;
3 string strRet = "";
4
5 strData = HSL.Split(',');
6 if (strData.Length >= 3)
7{
8 double R, G, B;
9 double R1, G1, B1;
10 double H, S, L;
11 double H1, X, C = 0, m;
12
13 H = double.Parse(strData[0]);
14 S = double.Parse(strData[1]);
15 L = double.Parse(strData[2]);
16
17 if (L <= 0.5)
18 C = 2 * L * S;
19 else if (L > 0.5)
20 C = (2 - 2 * L) * S;

 

21 H1 = H / 60; 28 
22 X = Math.Abs((H1 % 2) - 1);
23 X = C * (1 - X);
24
25 if (H1 >= 0 && H1 < 1)
26 {
27 R1 = C; G1 = X; B1 = 0; }
28 else if (H1 >= 1 && H1 < 2)
29 {
30 R1 = X; G1 = C; B1 = 0; }
31 else if (H1 >= 2 && H1 < 3)
32 {
33 R1 = 0; G1 = C; B1 = X; }
34 else if (H1 >= 3 && H1 < 4)
35 {
36 R1 = 0; G1 = X; B1 = C; }
37 else if (H1 >= 4 && H1 < 5)
38 {
39 R1 = X; G1 = 0; B1 = C; }
40 else if (H1 >= 5 && H1 < 6)
41 {
42 R1 = C; G1 = 0; B1 = 0; }
43 else
44 {
45 R1 = 0; G1 = 0; B1 = 0; }
46
47 m = L - (0.5 * C);
48
49 R = Math.Round((R1 + m) * 255);
50 G = Math.Round((G1 + m) * 255);
51 B = Math.Round((B1 + m) * 255);
52
53 strRet = R.ToString("###") + "," + G.ToString("###") + "," + B.ToString("###");
54 }
55
56 return strRet;
57 }

II.4.D JAVA

0 private String HSL_RGB(String HSL)
1{
2 String[] strData;
3 String strRet;
4
5 strRet = "";
6 strData = HSL.split(",");
7
8 if (strData.length >= 2)
9{
10 double R, G, B;
11 double R1, G1, B1;
12 double H, S, L;

 

13 double H1, X, C = 0, m;
14
15 H = Double.parseDouble(strData[0]);
16 S = Double.parseDouble(strData[1]);
17 L = Double.parseDouble(strData[2]);
18
19 if (L <= 0.5)
20 C = 2 * L * S;
21 else if (L > 0.5)
22 C = (2 - 2 * L) * S;
23
24 H1 = H / 60;
25 X = Math.abs((H1 % 2) - 1);
26 X = C * (1 - X);
27
28 if (H1 >= 0 && H1 < 1)
29 {
30 R1 = C; G1 = X; B1 = 0; }
31 else if (H1 >= 1 && H1 < 2)
32 {
33 R1 = X; G1 = C; B1 = 0; }
34 else if (H1 >= 2 && H1 < 3)
35 {
36 R1 = 0; G1 = C; B1 = X; }
37 else if (H1 >= 3 && H1 < 4)
38 {
39 R1 = 0; G1 = X; B1 = C; }
40 else if (H1 >= 4 && H1 < 5)
41 {
42 R1 = X; G1 = 0; B1 = C; }
43 else if (H1 >= 5 && H1 < 6)
44 {
45 R1 = C; G1 = 0; B1 = 0; }
46 else
47 {
48 R1 = 0; G1 = 0; B1 = 0; }
49
50 m = L - (0.5 * C);
51
52 R = Math.round((R1 + m) * 255);
53 G = Math.round((G1 + m) * 255);
54 B = Math.round((B1 + m) * 255);
55
56 java.text.DecimalFormat df = new java.text.DecimalFormat ("###");
57 strRet = df.format(R) + "," + df.format(G) + "," + df.format(B);
58 }
59 return strRet;
60 }

HSL terdiri dari bilangan Hue, Saturation dan Lightness, untuk memasukkan
bilangan HSL ke function/method HSL_RGB diatas, data dipisahkan oleh tanda
koma (,), jadi contoh pengiriman parameter ke function/method HSL_RGB diatas
adalah 251, 0.832, 0.512. Output dari function ini akan berupa data RGB bertipe
string, contoh : 65,27,234.

29 

 

II.5 TRANSFORMASI RGB KE HSV

Untuk mentransformasi dari RGB ke HSV. Diasumsikan koordinat-koordinat R, G, B
[0,1] adalah berurutan merah, hijau, biru dalam ruang warna RGB, dengan max
adalah nilai maksimum dari nilai red, green, blue, dan min adalah nilai
minimum dari nilai red, green, blue. Untuk memperoleh sudut hue[0,360] yang
tepat untuk ruang warna HSV, menggunakan rumus seperti berikut
(http://en.wikipedia.org/wiki/HSL_and_HSV) :

  
0,   max

 60       max       6   ,    max  
  

60       max       2   ,    max  

    60       max       4   , max

Nilai-nilai untuk s dan v pada HSV didefinisikan sebagai berikut :

0  ,     

        max  

 ,   

 

Rumus di atas menghasilkan nilai value dan saturation dalam jangkauan RGB [0,1].
Kalikan dahulu dengan 255 untuk memperoleh nilai dengan jangkauan RGB [0,255].

Misalnya ingin ditransformasikan RGB(65, 27, 234) ke dalam bentuk HSV, maka
langkahnya adalah sebagai berikut :

Setiap nilai RGB(65, 27, 234) diubah dalam jangkauan [0,1] dengan membagi setiap
nilai dengan 255 :

menjadi    ,  ,     = 0.255, 0.106, 0.918 

RGB(0.255, 0.106, 0.918) ini yang akan ditransformasikan ke bentuk HSV.

30 
 

max = nilai B (blue) = 0.918,
min = nilai G (green) = 0.106,
max – min = 0.918 – 0.106 = 0.812.

h (Hue) = 60               4   , karena max = B (blue).
 

= 60        .    .     4  = 2510
.

v (value) = max
= 0.918

s (saturation) =       , karena max <> min

=    . = 0.885
.

sehingga nilai RGB(65, 27, 234) ditransformasikan menjadi HSV(2510, 0.885, 0.918)
dengan jangkauan RGB [0,1].

Berdasarkan langkah-langkah transformasi diatas, maka untuk

mengimplementasikan ke bahasa pemrograman adalah sebagai berikut :

II.5.A VISUAL BASIC 6 31 

0 Private Function RGB_HSV(RGB As String) As String
1 Dim strData() As String
2 Dim H As Double, S As Double, V As Double
3
4 strData = Split(RGB, ",")
5 If UBound(strData) >= 2 Then
6 Dim R As Double, G As Double, B As Double
7 Dim max As Double
8 Dim min As Double
9
10 R = CDbl(strData(0)) / 255
11 G = CDbl(strData(1)) / 255
12 B = CDbl(strData(2)) / 255
13 max = R
14 If max < G Then max = G
15 If max < B Then max = B
16 min = R
17 If min > G Then min = G
18 If min > B Then min = B
19
20 If max = min Then
21 H = 0
22 ElseIf max = R Then
23 H = 60 * (((G - B) / (max - min)) Mod 6)
24 ElseIf max = G Then

 

25 H = 60 * (((B - R) / (max - min)) + 2)
26 ElseIf max = B Then
27 H = 60 * (((R - G) / (max - min)) + 4)
28 End If
29
30 V = max
31 If max = min Then
32 S = 0
33 Else
34 S = (max - min) / V
35 End If
36 End If
37
38 RGB_HSV = Format$(H, "0.000") + "," + Format$(S, "0.000") + "," + Format$(V, "0.000")
39 End Function

II.5.B VISUAL BASIC.NET 32 

0 Private Function RGB_HSV(ByVal RGB As String) As String
1 Dim strData() As String
2 Dim H As Double, S As Double, V As Double
3
4 strData = RGB.Split(",")
5 If strData.Length >= 3 Then
6 Dim R As Double, G As Double, B As Double
7 Dim max As Double
8 Dim min As Double
9
10 R = CDbl(strData(0)) / 255
11 G = CDbl(strData(1)) / 255
12 B = CDbl(strData(2)) / 255
13 max = R
14 If max < G Then max = G
15 If max < B Then max = B
16
17 min = R
18 If min > G Then min = G
19 If min > B Then min = B
20
21 If max = min Then
22 H = 0
23 ElseIf max = R Then
24 H = 60 * (((G - B) / (max - min)) Mod 6)
25 ElseIf max = G Then
26 H = 60 * (((B - R) / (max - min)) + 2)
27 ElseIf max = B Then
28 H = 60 * (((R - G) / (max - min)) + 4)
29 End If
30
31 V = max
32
33 If max = min Then
34 S = 0

 

35 Else
36 S = (max - min) / V
37 End If
38 End If
39
40 RGB_HSV = H.ToString("0.000") + "," + S.ToString("0.000") + "," + V.ToString("0.000")
41 End Function

II.5.C C#

0 private string RGB_HSV(string RGB)
1{
2 string[] strData;
3 double H = 0, S = 0, V = 0;
4
5 strData = RGB.Split(',');
6 if (strData.Length >= 3)
7{
8 double R, G, B;
9 double min, max;
10
11 R = double.Parse(strData[0]) / 255;
12 G = double.Parse(strData[1]) / 255;
13 B = double.Parse(strData[2]) / 255;
14 max = R;
15 if (max < G) max = G;
16 if (max < B) max = B;
17
18 min = R;
19 if (min > G) min = G;
20 if (min > B) min = B;
21
22 if (max == min)
23 H = 0;
24 else if (max == R)
25 H = 60 * (((G - B) / (max - min)) % 6);
26 else if (max == G)
27 H = 60 * (((B - R) / (max - min)) + 2);
28 else if (max == B)
29 H = 60 * (((R - G) / (max - min)) + 4);
30
31 V = max;
32
33 if (max == min)
34 S = 0;
35 else
36 S = (max - min) / V;
37 }
38
39 return H.ToString("0.000") + "," + S.ToString("0.000") + "," + V.ToString("0.000");
40 }

33 
 

II.5.D JAVA

0 private String RGB_HSV(String RGB)
1{
2 String[] strData;
3 String strRet = "";
4 double H = 0, S = 0, V = 0;
5
6 strData = RGB.split(",");
7 if (strData.length >= 2)
8{
9 double R, G, B;
10 double min, max;
11
12 R = Double.parseDouble(strData[0]) / 255;
13 G = Double.parseDouble(strData[1]) / 255;
14 B = Double.parseDouble(strData[2]) / 255;
15 max = R;
16 if (max < G) max = G;
17 if (max < B) max = B;
18
19 min = R;
20 if (min > G) min = G;
21 if (min > B) min = B;
22
23 if (max == min)
24 H = 0;
25 else if (max == R)
26 H = 60 * (((G - B) / (max - min)) % 6);
27 else if (max == G)
28 H = 60 * (((B - R) / (max - min)) + 2);
29 else if (max == B)
30 H = 60 * (((R - G) / (max - min)) + 4);
31
32 V = max;
33
34 if (max == min)
35 S = 0;
36 else
37 S = (max - min) / V;
38
39 java.text.DecimalFormat df = new java.text.DecimalFormat ("0.000");
40 strRet = df.format(H) + "," + df.format(S) + "," + df.format(V);
41 }
42
43 return strRet;
44 }

RGB terdiri dari bilangan Red, Green dan Blue, untuk memasukkan bilangan RGB ke
function/method RGB_HSV diatas, data dipisahkan oleh tanda koma (,), jadi contoh
pengiriman parameter ke function/method RGB_HSV diatas adalah 65,27,234.
Output dari function ini akan berupa data HSV bertipe string, contoh : 251, 0.885,
0.918.

34 

 

II.6 TRANSFORMASI HSV KE RGB

Untuk transformasi kembali dari HSV ke RGB, gunakan rumus berikut. Dengan hue
H [0°, 360°), saturation S [0, 1], dan value V [0, 1]
(http://en.wikipedia.org/wiki/HSL_and_HSV) :

  

′ 60 1|
  1 | ′  2

     0, 0, 0  ,     
 0 
, , 0  ,                        1  ′1
 2  ′2
, , 0  ,                        3  ′3
 4  ′4
1, 1, 1   0, ,  ,                        5  ′5
′6
0, ,  ,                      

, 0,  ,                      

, 0, 0  ,                       

 

,, 1, 1, 1

Rumus di atas menghasilkan nilai RGB dalam jangkauan [0,1]. Untuk jangkauan
[0,255], kalikan dahulu dengan 255.

Transformasikan HSV(251, 0.885, 0.918) ke dalam bentuk RGB, maka langkahnya
adalah sebagai berikut :

C = V x S = 0.918 x 0.885 = 0.812
H’ = H / 60 = 251 / 60 = 4.183
X = C ( 1 – |H’ mod 2 – 1|)
= 0.149
= 0.815 (1 - |(4.183 mod 2) - 1|)
= 0.815 (1 - | 0.183 – 1|)

(R1, G1, B1) = (X, 0, C), karena H’ ≥ 4 dan H’ < 5
= (0.149, 0, 0.812)

m = V - C = 0.918 - 0.812 = 0.106

(R, G, B) = (R1 + m, G1 + m, B1 + m)
0.812 + 0.106)
= (0.149 + 0.106, 0 + 0.106, 0.918)

= (0.255, 0.106,

35 
 

RGB (0.255, 0.106, 0.918) ini dalam jangkauan [0,1] untuk jangkauan [0,255] kalikan
dengan 255 : (0.255 x 255, 0.106 x 255, 0.918 x 255) menjadi (65.025, 27,03,
234.09) bulatkan keatas menjadi (65, 27, 234).

Berdasarkan langkah-langkah transformasi diatas, maka untuk

mengimplementasikan ke bahasa pemrograman adalah sebagai berikut :

II.6.A VISUAL BASIC 6 36 

0 Private Function HSV_RGB(HSV As String) As String
1 Dim strData() As String
2 Dim R As Double, G As Double, B As Double
3
4 strData = Split(HSV, ",")
5 If UBound(strData) >= 2 Then
6 Dim R1 As Double, G1 As Double, B1 As Double
7 Dim H As Double, S As Double, V As Double
8 Dim H1 As Double, X As Double, C As Double, m As Double
9
10 H = CDbl(strData(0))
11 S = CDbl(strData(1))
12 V = CDbl(strData(2))
13
14 C = V * S
15 H1 = H / 60
16
17 X = H1 Mod 2
18 X = Abs(X - 1)
19 X = C * (1 - X)
20
21 If H1 >= 0 And H1 < 1 Then
22 R1 = C: G1 = X: B1 = 0
23 ElseIf H1 >= 1 And H1 < 2 Then
24 R1 = X: G1 = C: B1 = 0
25 ElseIf H1 >= 2 And H1 < 3 Then
26 R1 = 0: G1 = C: B1 = X
27 ElseIf H1 >= 3 And H1 < 4 Then
28 R1 = 0: G1 = X: B1 = C
29 ElseIf H1 >= 4 And H1 < 5 Then
30 R1 = X: G1 = 0: B1 = C
31 ElseIf H1 >= 5 And H1 < 6 Then
32 R1 = C: G1 = 0: B1 = 0
33 Else
34 R1 = 0: G1 = 0: B1 = 0
35 End If
36
37 m = V - C
38
39 R = Round((R1 + m) * 255)
40 G = Round((G1 + m) * 255)
41 B = Round((B1 + m) * 255)
42 End If

 

43 37 
44 HSV_RGB = Format$(R, "###") + "," + Format$(G, "###") + "," + Format$(B, "###")
45 End Function

II.6.B VISUAL BASIC.NET

0 Private Function HSV_RGB(ByVal HSV As String) As String
1 Dim strData() As String
2 Dim R As Double, G As Double, B As Double
3
4 strData = HSV.Split(",")
5 If strData.Length >= 3 Then
6 Dim R1 As Double, G1 As Double, B1 As Double
7 Dim H As Double, S As Double, V As Double
8 Dim H1 As Double, X As Double, C As Double, m As Double
9
10 H = CDbl(strData(0))
11 S = CDbl(strData(1))
12 V = CDbl(strData(2))
13
14 C = V * S
15 H1 = H / 60
16 X = Math.Abs((H1 Mod 2) - 1)
17 X = C * (1 - X)
18
19 If H1 >= 0 And H1 < 1 Then
20 R1 = C : G1 = X : B1 = 0
21 ElseIf H1 >= 1 And H1 < 2 Then
22 R1 = X : G1 = C : B1 = 0
23 ElseIf H1 >= 2 And H1 < 3 Then
24 R1 = 0 : G1 = C : B1 = X
25 ElseIf H1 >= 3 And H1 < 4 Then
26 R1 = 0 : G1 = X : B1 = C
27 ElseIf H1 >= 4 And H1 < 5 Then
28 R1 = X : G1 = 0 : B1 = C
29 ElseIf H1 >= 5 And H1 < 6 Then
30 R1 = C : G1 = 0 : B1 = 0
31 Else
32 R1 = 0 : G1 = 0 : B1 = 0
33 End If
34
35 m = V - C

36 R = Math.Round((R1 + m) * 255)
37 G = Math.Round((G1 + m) * 255)
38 B = Math.Round((B1 + m) * 255)
39 End If
40
41 HSV_RGB = R.ToString("###") + "," + G.ToString("###") + _
42 "," + B.ToString("###")
43 End Function

 

II.6.C C# 38 

0 private string HSV_RGB(string HSV)
1{
2 string[] strData;
3 double R = 0, G = 0, B = 0;
4
5 strData = HSV.Split(',');
6 if (strData.Length >= 3)
7{
8 double R1, G1, B1;
9 double H, S, V;
10 double H1, X, C, m;
11
12 H = double.Parse(strData[0]);
13 S = double.Parse(strData[1]);
14 V = double.Parse(strData[2]);
15
16 C = V * S;
17
18 H1 = H / 60;
19 X = Math.Abs((H1 % 2) - 1);
20 X = C * (1 - X);
21
22 if (H1 >= 0 && H1 < 1)
23 {
24 R1 = C; G1 = X; B1 = 0; }
25 else if (H1 >= 1 && H1 < 2)
26 {
27 R1 = X; G1 = C; B1 = 0; }
28 else if (H1 >= 2 && H1 < 3)
29 {
30 R1 = 0; G1 = C; B1 = X; }
31 else if (H1 >= 3 && H1 < 4)
32 {
33 R1 = 0; G1 = X; B1 = C; }
34 else if (H1 >= 4 && H1 < 5)
35 {
36 R1 = X; G1 = 0; B1 = C; }
37 else if (H1 >= 5 && H1 < 6)
38 {
39 R1 = C; G1 = 0; B1 = 0; }
40 else
41 {
42 R1 = 0; G1 = 0; B1 = 0; }
43
44 m = V - C;
45
46 R = Math.Round((R1 + m) * 255);
47 G = Math.Round((G1 + m) * 255);
48 B = Math.Round((B1 + m) * 255);
49 }
51 return R.ToString("###") + "," + G.ToString("###") + "," + B.ToString("###");
53 }

 

II.6.D JAVA

0 private String HSV_RGB(String HSV)
1{
2 String[] strData;
3 String strRet = "";
4 double R = 0, G = 0, B = 0;
5
6 strData = HSV.split(",");
7 if (strData.length >= 2)
8{
9 double R1, G1, B1, H, S, V, H1, X, C, m;
10
11 H = Double.parseDouble(strData[0]);
12 S = Double.parseDouble(strData[1]);
13 V = Double.parseDouble(strData[2]);
14
15 C = V * S;
16 H1 = H / 60;
17 X = Math.abs((H1 % 2) - 1);
18 X = C * (1 - X);
19
20 if (H1 >= 0 && H1 < 1) {
21 R1 = C; G1 = X; B1 = 0; }
22 else if (H1 >= 1 && H1 < 2) {
23 R1 = X; G1 = C; B1 = 0; }
24 else if (H1 >= 2 && H1 < 3) {
25 R1 = 0; G1 = C; B1 = X; }
26 else if (H1 >= 3 && H1 < 4) {
27 R1 = 0; G1 = X; B1 = C; }
28 else if (H1 >= 4 && H1 < 5) {
29 R1 = X; G1 = 0; B1 = C; }
30 else if (H1 >= 5 && H1 < 6) {
31 R1 = C; G1 = 0; B1 = 0; }
32 else {
33 R1 = 0; G1 = 0; B1 = 0; }
34
35 m = V - C;
36 R = Math.round((R1 + m) * 255);
37 G = Math.round((G1 + m) * 255);
38 B = Math.round((B1 + m) * 255);
39 java.text.DecimalFormat df = new java.text.DecimalFormat ("###");
40 strRet = df.format(R) + "," + df.format(G) + "," + df.format(B);
41 }
42 return strRet;
43 }

HSV terdiri dari bilangan Hue, Saturation dan Value, untuk memasukkan bilangan
HSV ke function/method HSV_RGB diatas, data dipisahkan oleh tanda koma (,), jadi
contoh pengiriman parameter ke function/method HSV_RGB diatas adalah 251,
0.885, 0.918. Output dari function ini akan berupa data RGB bertipe string, contoh :
65,27,234.

39 

 

II.7 TRANSFORMASI RGB KE HSI

Untuk mentransformasi dari RGB ke HSI. Diasumsikan koordinat-koordinat R, G, B
[0,1] adalah berurutan merah, hijau, biru dalam ruang warna RGB, dengan max
adalah nilai maksimum dari nilai red, green, blue, dan min adalah nilai
minimum dari nilai red, green, blue. Untuk memperoleh sudut hue[0,360] yang
tepat untuk ruang warna HSI, menggunakan rumus seperti berikut :
(http://en.wikipedia.org/wiki/HSL_and_HSV)

  
0,   max

 60       max       6   ,    max  
  

60       max       2   ,    max  

    60       max       4   , max

Nilai-nilai untuk s dan i pada HSI didefinisikan sebagai berikut :

  0  ,     
    

  1   ,   

        

Rumus di atas menghasilkan nilai intensity dan saturation dalam jangkauan [0,1].

Misalnya ingin ditransformasikan RGB(65, 27, 234) ke dalam bentuk HSI, maka
langkahnya adalah sebagai berikut :

Setiap nilai RGB(65, 67, 234) diubah dalam jangkauan [0,1] dengan membagi setiap
nilai dengan 255 :

menjadi    ,  ,     = 0.255, 0.106, 0.918 

RGB(0.255, 0.106, 0.918) ini yang akan ditransformasikan ke bentuk HSI.

max = nilai B (blue) = 0.918,
min = nilai G (green) = 0.106,
max – min = 0.918 – 0.106 = 0.812.

40 
 

h (Hue) = 60               4   , karena max = b (blue).
i (intensity)  

= 60        .    .     4  = 251
.

=     

=    0.255 0.106 0.918  = 0.426

s (saturation) = 1   , karena max <> min

=   1   . = 0.751
.

sehingga nilai RGB(65, 27, 234) ditransformasikan menjadi HSI(251, 0.751, 0.426)
dengan jangkauan RGB [0,1].

Berdasarkan langkah-langkah transformasi diatas, maka untuk

mengimplementasikan ke bahasa pemrograman adalah sebagai berikut :

II.7.A VISUAL BASIC 6 41 

0 Private Function RGB_HSI(RGB As String) As String
1 Dim strData() As String
2 Dim H As Double, S As Double, I As Double
3
4 strData = Split(RGB, ",")
5 If UBound(strData) >= 2 Then
6 Dim R As Double, G As Double, B As Double
7 Dim max As Double, min As Double
8
9 R = CDbl(strData(0)) / 255
10 G = CDbl(strData(1)) / 255
11 B = CDbl(strData(2)) / 255
12 max = R
13 If max < G Then max = G
14 If max < B Then max = B
15 min = R
16 If min > G Then min = G
17 If min > B Then min = B
18 If max = min Then
19 H = 0
20 ElseIf max = R Then
21 H = 60 * (((G - B) / (max - min)) Mod 6)
22 ElseIf max = G Then
23 H = 60 * (((B - R) / (max - min)) + 2)
24 ElseIf max = B Then
25 H = 60 * (((R - G) / (max - min)) + 4)
26 End If

 

27 I = (R + G + B) / 3 42 
28 If max = min Then
29 S = 0
30 Else
31 S = 1 - (min / I)
32 End If
33 End If
34
35 RGB_HSI = Format$(H, "0.000") + "," + Format$(S, "0.000") + "," + Format$(I, "0.000")
36 End Function

II.7.B VISUAL BASIC.NET

0 Private Function RGB_HSI(ByVal RGB As String) As String
1 Dim strData() As String
2 Dim H As Double, S As Double, I As Double
3
4 strData = RGB.Split(",")
5 If strData.Length >= 3 Then
6 Dim R As Double, G As Double, B As Double
7 Dim max As Double
8 Dim min As Double
9
10 R = CDbl(strData(0)) / 255
11 G = CDbl(strData(1)) / 255
12 B = CDbl(strData(2)) / 255
13 max = R
14 If max < G Then max = G
15 If max < B Then max = B
16 min = R
17 If min > G Then min = G
18 If min > B Then min = B
19 If max = min Then
20 H = 0
21 ElseIf max = R Then
22 H = 60 * (((G - B) / (max - min)) Mod 6)
23 ElseIf max = G Then
24 H = 60 * (((B - R) / (max - min)) + 2)
25 ElseIf max = B Then
26 H = 60 * (((R - G) / (max - min)) + 4)
27 End If
28
29 I = (R + G + B) / 3
30
31 If max = min Then
32 S = 0
33 Else
34 S = 1 - (min / I)
35 End If
36 End If
37
38 Return H.ToString("0.000") + "," + S.ToString("0.000") + "," + I.ToString("0.000")
40 End Function

 

II.7.C C# 43 

0 private string RGB_HSI(string RGB)
1{
2 string[] strData;
3 double H = 0, S = 0, I = 0;
4
5 strData = RGB.Split(',');
6 if (strData.Length >= 3)
7{
8 double R, G, B;
9 double min, max;
10
11 R = double.Parse(strData[0]) / 255;
12 G = double.Parse(strData[1]) / 255;
13 B = double.Parse(strData[2]) / 255;
14 max = R;
15 if (max < G) max = G;
16 if (max < B) max = B;
17
18 min = R;
19 if (min > G) min = G;
20 if (min > B) min = B;
21
22 if (max == min)
23 H = 0;
24 else if (max == R)
25 H = 60 * (((G - B) / (max - min)) % 6);
26 else if (max == G)
27 H = 60 * (((B - R) / (max - min)) + 2);
28 else if (max == B)
29 H = 60 * (((R - G) / (max - min)) + 4);
30
31 I = (R + G + B) / 3;
32
33 if (max == min)
34 S = 0;
35 else
36 S = 1 - (min / I);
37 }
38
39 return H.ToString("0.000") + "," + S.ToString("0.000") +
40 "," + I.ToString("0.000");
41 }

 

II.7.D JAVA

0 private String RGB_HSI(String RGB)
1{
2 String[] strData;
3 String strRet = "";
4 double H = 0, S = 0, I = 0;
5
6 strData = RGB.split(",");
7 if (strData.length >= 2)
8{
9 double R, G, B;
10 double min, max;
11
12 R = Double.parseDouble(strData[0]) / 255;
13 G = Double.parseDouble(strData[1]) / 255;
14 B = Double.parseDouble(strData[2]) / 255;
15 max = R;
16 if (max < G) max = G;
17 if (max < B) max = B;
18 min = R;
19 if (min > G) min = G;
20 if (min > B) min = B;
21
22 if (max == min)
23 H = 0;
24 else if (max == R)
25 H = 60 * (((G - B) / (max - min)) % 6);
26 else if (max == G)
27 H = 60 * (((B - R) / (max - min)) + 2);
28 else if (max == B)
29 H = 60 * (((R - G) / (max - min)) + 4);
30
31 I = (R + G + B) / 3;
32 if (max == min)
33 S = 0;
34 else
35 S = 1 - (min / I);
36
37 java.text.DecimalFormat df = new java.text.DecimalFormat ("0.000");
38 strRet = df.format(H) + "," + df.format(S) + "," + df.format(I);
39 }
40 return strRet;
41 }

RGB terdiri dari bilangan Red, Green dan Blue, untuk memasukkan bilangan RGB ke
function/method dibawah, data dipisahkan oleh tanda koma (,), jadi contoh
pengiriman parameter ke function/method dibawah adalah 65,27,234. Output dari
function ini akan berupa data HSI bertipe string, contoh : 251, 0.751, 0.426.

44 
 

II.8 TRANSFORMASI HSI KE RGB

Untuk transformasi kembali dari HSI ke RGB, gunakan rumus berikut. Dengan hue
H [0°, 360°), saturation S [0, 1], dan intensity I [0, 1] [Gonzales and Woods,
1992] :

Jika, 00 ≤ H < 1200

        1  

        1      cos  
60
cos    

    

Jika, 1200 ≤ H < 2400

 120

        1  

        1      cos  
60
cos    

    1

Jika, 2400 ≤ H < 3600

 240

        1  

        1      cos  
60
cos    

    1

Untuk setiap r, g dan b :

   3 ,       3 ,       3.

Rumus di atas menghasilkan nilai RGB dalam jangkauan [0,1]. Untuk jangkauan
[0,255], kalikan dahulu dengan 255.

45 
 

Transformasikan HSI(251, 0.751, 0.426) ke dalam bentuk RGB, maka langkahnya
adalah sebagai berikut :

Periksa nilai H (hue), H =251, maka

H = H – 2400 = 11
= 251 – 240

g =    1   = 0.083
=      1 0.751 

b =      1        
   

=      1    .     
   

=      1    .       . = 0.71
.

r = 1 – (g + b)

= 1 – (0.083 + 0.71) = 0.207

R (red) = 3Ir = 3 x 0.426 x 0.207 = 0.264

G (green) = 3Ig = 3 x 0.426 x 0.0813 = 0.104

B (blue) = 3Ib = 3 x 0.426 x 0.71 = 0.907

RGB (0.264, 0.104, 0.907) ini dalam jangkauan [0,1] untuk jangkauan [0,255] kalikan

dengan 255 : (0.264 x 255, 0.104 x 255, 0.907 x 255) menjadi (67.32, 26.52,

231.285) bulatkan keatas menjadi (67, 27, 231).

Berdasarkan langkah-langkah transformasi diatas, maka untuk

mengimplementasikan ke bahasa pemrograman adalah sebagai berikut :

II.8.A VISUAL BASIC 6 46 

0 Private Function HSI_RGB(HSI As String) As String
1 Dim strData() As String
2 Dim R As Double, G As Double, B As Double
3
4 strData = Split(HSI, ",")
5 If UBound(strData) >= 2 Then
6 Dim R1 As Double, G1 As Double, B1 As Double
7 Dim H As Double, S As Double, I As Double
8

 

9 H = CDbl(strData(0)) 47 
10 S = CDbl(strData(1))
11 I = CDbl(strData(2))
12
13 If H >= 0 And H < 120 Then
14 B1 = (1 - S) / 3
15 R1 = (((S * Cos(H)) / Cos(60 - H)) + 1) / 3
16 G1 = B1 + R1
17 ElseIf H >= 120 And H < 240 Then
18 H = H - 120
19 R1 = (1 - S) / 3
20 G1 = (((S * Cos(H)) / Cos(60 - H)) + 1) / 3
21 B1 = 1 - (R1 - G1)
22 Else
23 H = H - 240
24 G1 = (1 - S) / 3
25 B1 = (((S * Cos(H)) / Cos(60 - H)) + 1) / 3
26 R1 = 1 - (G1 + B1)
27 End If
28
29 R = Round((R1 * 3 * I) * 255)
30 G = Round((G1 * 3 * I) * 255)
31 B = Round((B1 * 3 * I) * 255)
32 End If
33
34 HSI_RGB = Format$(R, "###") + "," + Format$(G, "###") + _
35 "," + Format$(B, "###")
36 End Function

II.8.B VISUAL BASIC.NET

0 Private Function HSI_RGB(ByVal HSI As String) As String
1 Dim strData() As String
2 Dim R As Double, G As Double, B As Double
3
4 strData = HSI.Split(",")
5 If strData.Length >= 3 Then
6 Dim R1 As Double, G1 As Double, B1 As Double
7 Dim H As Double, S As Double, I As Double
8
9 H = CDbl(strData(0))
10 S = CDbl(strData(1))
11 I = CDbl(strData(2))
12
13 If H >= 0 And H < 120 Then
14 B1 = (1 - S) / 3
15 R1 = (((S * Math.Cos(H)) / Math.Cos(60 - H)) + 1) / 3
16 G1 = B1 + R1
17 ElseIf H >= 120 And H < 240 Then
18 H = H - 120
19 R1 = (1 - S) / 3
20 G1 = (((S * Math.Cos(H)) / Math.Cos(60 - H)) + 1) / 3
21 B1 = 1 - (R1 - G1)

 

22 Else 48 
23 H = H - 240
24 G1 = (1 - S) / 3
25 B1 = (((S * Math.Cos(H)) / Math.Cos(60 - H)) + 1) / 3
26 R1 = 1 - (G1 + B1)
27 End If
28
29 R = Math.Round((R1 * 3 * I) * 255)
30 G = Math.Round((G1 * 3 * I) * 255)
31 B = Math.Round((B1 * 3 * I) * 255)
32 End If
33
34 Return R.ToString("###") + "," + G.ToString("###") +
35 "," + B.ToString("###")
36 End Function

II.8.C C#

0 private string HSI_RGB(string HSI)
1{
2 string[] strData;
3 double R = 0, G = 0, B = 0;
4
5 strData = HSI.Split(',');
6 if (strData.Length >= 3)
7{
8 double R1, G1, B1;
9 double H, S, I;
10
11 H = double.Parse(strData[0]);
12 S = double.Parse(strData[1]);
13 I = double.Parse(strData[2]);
14
15 if (H >= 0 && H < 120)
16 {
17 B1 = (1 - S) / 3;
18 R1 = (((S * Math.Cos(H)) / Math.Cos(60 - H)) + 1) / 3;
19 G1 = B1 + R1;
20 }
21 else if (H >= 120 && H < 240)
22 {
23 H = H - 120;
24 R1 = (1 - S) / 3;
25 G1 = (((S * Math.Cos(H)) / Math.Cos(60 - H)) + 1) / 3;
26 B1 = 1 - (R1 - G1);
27 }
28 else
29 {
30 H = H - 240;
31 G1 = (1 - S) / 3;
32 B1 = (((S * Math.Cos(H)) / Math.Cos(60 - H)) + 1) / 3;
33 R1 = 1 - (G1 + B1);
34 }

 

35 49 
36 R = Math.Round((R1 * 3 * I) * 255);
37 G = Math.Round((G1 * 3 * I) * 255);
38 B = Math.Round((B1 * 3 * I) * 255);
39 }
40 return R.ToString("###") + "," + G.ToString("###") + "," + B.ToString("###");
41 }

II.8.D JAVA

0 private String HSI_RGB(String HSI)
1{
2 String[] strData;
3 String strRet = "";
4 double R = 0, G = 0, B = 0;
5
6 strData = HSI.split(",");
7 if (strData.length >= 3)
8{
9 double R1, G1, B1;
10 double H, S, I;
11 H = Double.parseDouble(strData[0]);
12 S = Double.parseDouble(strData[1]);
13 I = Double.parseDouble(strData[2]);
14 if (H >= 0 && H < 120)
15 {
16 B1 = (1 - S) / 3;
17 R1 = (((S * Math.cos(H)) / Math.cos(60 - H)) + 1) / 3;
18 G1 = B1 + R1;
19 }
20 else if (H >= 120 && H < 240)
21 {
22 H = H - 120;
23 R1 = (1 - S) / 3;
24 G1 = (((S * Math.cos(H)) / Math.cos(60 - H)) + 1) / 3;
25 B1 = 1 - (R1 - G1);
26 }
27 else
28 {
29 H = H - 240;
30 G1 = (1 - S) / 3;
31 B1 = (((S * Math.cos(H)) / Math.cos(60 - H)) + 1) / 3;
32 R1 = 1 - (G1 + B1);
33 }
34
35 R = Math.round((R1 * 3 * I) * 255);
36 G = Math.round((G1 * 3 * I) * 255);
37 B = Math.round((B1 * 3 * I) * 255);
38 java.text.DecimalFormat df = new java.text.DecimalFormat ("###");
39 strRet = df.format(R) + "," + df.format(G) + "," + df.format(B);
40 }
41 return strRet;
42 }

 


Click to View FlipBook Version