10 May 2016

Konversi Warna (color convertion)

Gambar 1. Spektrum warna
Kali ini, pembaca akan saya ajak menjelajahi warna........termasuk warna hatimu ?????........jangan khawatir, kita semua sudah aman dan jinak kok.

Segala macam konversi warna dan implementasinya dalam bahasa pemrograman.
Sebagai bahan bacaan, beberapa waktu lalu saya telah mendapatkan e-book bagus yang bisa dipakai untuk referensi. 

Linknya adalah sebagai berikut :

Bahan Bacaan Konversi Warna 

Materi yang akan dibahas kali ini adalah :
  • Konversi warna RGB ke YIQ
  • Konversi warna RGB ke CMY-K
  • Konversi warna RGB ke HSV

Untuk lebih jelasnya sebaiknya disimak penjelasan berikut :

1. Konversi Warna RGB ke YIQ


Gambar 2. Perspektif warna YIQ

Model warna YIQ digunakan untuk standart televisi. Y berkoresponden dengan luminasi, I dan Q adalah komponen kromatik yang  disebut inphase dan quarature.
Komponen luminasi (Y) berisi semua informasi yang diperlukan untuk televisi hitam putih dan menangkap persepsi mata manusia terhadap warna gelap-terang pada warna tertentu. Kita melihat warna hijau lebih terang daripada warna merah, dan warna merah lebih terang dari warna biru, hal ini ditandai dengan bobot perspektif masing-masing yaitu 0.299, 0.587 dan 0.114 pada baris pertama matriks konversi.
Bobot ini harus digunakan ketika mengkonversi citra warna (RGB) menjadi citra keabuan (grayscale), jika diinginkan persepsi tingkat kecerahan yang sama. 

Pada gambar 2 dapat dilihat perspektif warna tersebut secara YIQ.


Mendapatkan komponen-komponen dengan menggunakan persamaan rumus sebagai berikut :
Yframe = 0,299 * Rframe0,587 * Gframe0,114 * Bframe;
Iframe  = 0,596Rframe0,275Gframe0,321 * Bframe;
Qframe = 0,212 * Rframe0,523 * Gframe0,311 * Bframe;

Dimana : Rframe menyatakan warna RED pada mode RGB, Gframe menyatakan warna GREEN pada mode RGB dan Bframe menyatakan warna BLUE pada mode RGB

setelah ini, dapat saya gunakan 'imshow' seperti itu :

imshow (Yframe);
imshow (iframe);
imshow (Qframe);


persamaan di atas, sebenarnya diperoleh dari perkalian matrik antara matrik konstanta dengan matrik RGB, sebagai berikut :



2. Konversi Warna RGB ke CMY

Bahwa konversi warna ke CMY K, diperoleh dengan cara terlebih dahulu warna RGB di normalisasi menjadi rentang antara 0 s/d 1, yaitu dengan membagi warna RGB asli dengan nilai maksimum warnanya (bit-nya, misalnya kedalaman warnanya 255).  
Gambar 3. Konversi Warna
Maka diperoleh urutan konversinya sebagai berikut :

R’ = R/255
G’ = G/255
B’ = B/255

C = (1-R’-K)/(1-K)
M = (1-G’-K)/(1-K)
Y = (1-B’-K)/(1-K)

K = 1 – max(R’,G’,B’)

Contoh :
Konversikan RGB (175, 230, 200) menjadi CMYK !

Jawaban :

R'=175/255 = 0.686275 
G'=230/255 = 0.901961
B'=200/255 = 0.784314 

K = 1 – max(R’,G’,B’) = 0.098039

C = (1-0.686275-0.098039)/(1-0.098039) = 0.23913
M = (1-0.901961-0.098039)/(1-0.098039) = 0
Y = (1-0.784314 -0.098039)/(1-0.098039) = 0.130435

Tetapi hasil perhitungan warna tersebut masih dalam bentuk normalisasi, maka harus dikembalikan ke dalam bentuk warna asli dengan cara mengalikan dengan 255 (nilai maksimum warna)

Maka hasil konversinya menjadi :
K = 0.098039*255 = 25
C = 0.23913*255 = 60.97826
M = 0 * 255 = 0
Y = 0.130435 * 255 = 33.26087 

3. Konversi Warna RGB ke HSV

Rumus yang digunakan untuk konversi ini adalah :


Cos-1 itu sama dengan ACOS (arc.cos)

Contoh Soal :
Nyatakan warna Chalk RGB (255, 251, 156) dalam HSV ?

Jawab :
HSV
               V            = 1/3 (R+G+B)
                              = 1/3 (255+251+156)
                              = 220.67
               S             = 1 – (3*min[R,G,B])/(R+G+B)
                              = 662/662 – 468/662         = 195/662            = 0.294
               H            =  karena B < G, maka H= q

q             = arc.cos {[1/2{(255-251)+(255-156)}] / [(255-251)2+(255-156)(251-156)]1/2}
               = ACOS(51.5/97.06)         = 1.011488 = H


Dengan Matlab 

Berikut adalah kode untuk menampilkan gambar RGB dalam tiga bidang

RGB = imread ( 'peppers.jpg')
[m, n] = size (RGB);
untuk i = 1: m
untuk j = 1: n / 3
R (i, j) = RGB (i, j, 1);
G (i, j) = RGB (i, j, 2);
B (i, j) = RGB (i, j, 3);
akhir
akhir
tokoh; imshow (R);
tokoh; imshow (G);
tokoh; imshow (B);Ditambahkan setelah 6 menit:Berikut adalah kode untuk konversi RGB HSI t0 ... hanya melalui ini ... u akan mendapatkan ide ..

CLC;
clear all;
tutup semua;
RGB = imread ( 'peppers.png');
tokoh; imshow (RGB); judul ( 'gambar asli');
HSI1 = rgb2hsv (RGB);
HSI = imread ( 'HSI1.png');
tokoh; imshow (HSI); judul ( 'HSI gambar');
HSI = ganda (HSI);
[m, n] = size (HSI);
RGB = hsv2rgb (HSI1);
tokoh; imshow (RGB);
untuk i = 1: m
untuk j = 1: n / 3
R (i, j) = RGB (i, j, 1);
G (i, j) = RGB (i, j, 2);
B (i, j) = RGB (i, j, 3);
akhir
akhir
tokoh; imshow (R);
tokoh; imshow (G);
tokoh; imshow (B);
untuk i = 1: m
untuk j = 1: n / 3
H (i, j) = HSI (i, j, 1);
S (i, j) = HSI (i, j, 2);
I (i, j) = HSI (i, j, 3);
% RG sektor
if (H (i, j)> = 0 & & H (i, j) <120 span="">
B (i, j) = I (i, j) * (1-S (i, j));
R (i, j) = I (i, j) * (1 (S (i, j) * cos (H (i, j)) / cos (60-H (i, j ))));
G (i, j) = 1 - (R (i, j) B (i, j));
akhir
% GB Sektor
if (H (i, j)> = 120 & & H (i, j) <240 span="">
% H (i, j) = H (i, j) -120;
R (i, j) = I (i, j) * (1-S (i, j));
G (i, j) = I (i, j) * (1 (S (i, j) * cos (H (i, j)) / cos (60-H (i, j ))));
B (i, j) = 1 - (R (i, j) G (i, j));
akhir
% BR Sektor
if (H (i, j)> = 240 & & H (i, j) <360 span="">
% H (i, j) = H (i, j) -240;
G (i, j) = I (i, j) * (1-S (i, j));
B (i, j) = I (i, j) * (1 (S (i, j) * cos (H (i, j)) / cos (60-H (i, j ))));
R (i, j) = 1 - (G (i, j) B (i, j));
akhir
akhir
akhir
HSI = uint8 (HSI);
untuk i = 1: m
untuk j = 1: n / 3
RGB (i, j, 1) = R (i, j);
RGB (i, j, 2) = G (i, j);
RGB (i, j, 3) = B (i, j);
akhir
akhir
tokoh; imshow (uint8 (RGB ),[]);
imwrite (RGB, 'RGB1.png');
imshow ( 'RGB1.png'); judul ( 'RGB Gambar');
tokoh; imshow (uint8 (R ),[]); judul ( 'R Image');
tokoh; imshow (uint8 (G ),[]); judul ( 'G Gambar');

<120 span=""><240 span=""><360 span="">tokoh; imshow (uint8 (B ),[]); judul ( 'B Gambar');

No comments:

Post a Comment