Gambar 1. Spektrum warna |
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.
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 :
Iframe = 0,596 * Rframe - 0,275 * Gframe - 0,321 * Bframe;
Qframe = 0,212 * Rframe - 0,523 * Gframe + 0,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).
Maka diperoleh urutan konversinya sebagai berikut :
R’ = R/255
G’ = G/255
B’ = B/255
K = 1 – max(R’,G’,B’)
Iframe = 0,596 * Rframe - 0,275 * Gframe - 0,321 * Bframe;
Qframe = 0,212 * Rframe - 0,523 * Gframe + 0,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 |
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)
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
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');360>240>120>
<120 span=""><240 span=""><360 span="">tokoh; imshow (uint8 (B ),[]); judul ( 'B Gambar');360>240>120>
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');360>240>120>
<120 span=""><240 span=""><360 span="">tokoh; imshow (uint8 (B ),[]); judul ( 'B Gambar');360>240>120>
No comments:
Post a Comment