Рис. 1.5. Цветовой куб модели RGB
Начало отсчета (0,0,0) соответствует черному цвету (K – blacK), максимальное значение (1,1,1) соответствует белому цвету (W – White). По диагонали располагаются оттенки серого цвета.
1.2.2. Модели CMY и CMYK
Модель CMY (Cyan, Magenta, Yellow – голубой, пурпурный, желтый) – аппаратно ориентированная модель, используемая в полиграфии для субтрактивного формирования оттенков (рис. 1.6).
Рис. 1.6. Цветовой куб модели CMY
6
Начало отсчета (0,0,0) соответствует белому цвету, максимальное значение (1,1,1) соответствует черному цвету. По диагонали располагаются оттенки серого цвета.
Преобразование между пространствами RGB и CMY определяется по следующей формуле:
[R G B] = [1 1 1] – [C M Y]
Модель CMYK (Cyan, Magenta, Yellow, blacK– голубой, пурпур-
ный, желтый, черный) используется в цветных принтерах. Дополнительно к трем основным цветам здесь используется черный цвет. Это вызвано, во-первых, экономией цветных тонеров, а во-вторых, тем, что цветные тонеры не являются идеальными и при их смешении может получиться не черный, а, допустим, темно-коричневый цвет.
1.2.3. Модель YIQ
Модель YIQ – аппаратно ориентированная модель, используемая в телевидении и служащая для сокращения передаваемой полосы частот за счет использования психофизиологических особенностей зрения. Модель используется в телевизионных передающих системах, поддерживающих североамериканский стандарт NTSC. Каждый цвет в ней задается с помощью установки трех параметров Y- интенсивности (luminance) и двух цветностей I и Q, позволяющих совместно управлять созданием цвета с помощью зеленого, синего, желтого и пурпурного цветов. Установка минимальных значений I и Q (0, 0) приводит к получению зеленого цвета, а установка максимальных значений (255, 255) дает пурпурный цвет. В случае использования монохромного дисплея на экране будет отображена только компонента Y. Преобразования между пространствами RGB и YIQ для телевизионного формата NTSC определяются по формулам, представленным на рис. 1.7 и 1.8.
Y |
0.299 |
0.587 |
0.114 |
R |
I |
0.569 |
0.274 |
0.322 |
G |
Q |
0.211 |
0.522 |
0.311 |
B |
Рис. 1.7. Преобразование RGB–YIQ
7
R |
1 |
0.956 |
0.623 |
Y |
G |
1 |
0.272 |
0.648 |
I |
B |
1 |
1.105 |
0.705 |
Q |
Рис. 1.8. Преобразование YIQ–RGB
1.2.4. Модели HSV и HSB
Модели HSV (Hue, Saturation, Value – цветовой фон, насыщен-
ность, светлота) и HSB (Hue, Saturation, Brightness – цветовой фон, на-
сыщенность, яркость) – модели, ориентированные на человека и обеспечивающие возможность явного задания требуемого оттенка цвета.
Светлота – свойство несамосветящихся объектов, изменяющаяся от черного до белого, а яркость – свойство самосветящихся объектов, изменяющаяся в диапазоне от низкой до высокой. Цветовой тон позволяет различать цвета. Насыщенность определяет степень ослабления (разбавления) данного цвета белым цветом, т. е. насколько цвет близок к «чистому».
Подпространство HSV можно представить как перевернутую шестигранную пирамиду (рис. 1.9).
Рис. 1.9. Цветовая модель HSV
По вертикальной оси пирамиды задается V – светлота, меняющаяся от 0 до 1. При значении V = 1 цвета наиболее интенсивны.
Цветовой тон – H, задается углом, отсчитываемым вокруг вертикальной оси: 0º – красный, 60º – желтый, 120º – зеленый, 180º – голу-
8
бой, 240º – синий, 300º – пурпурный. При этом дополнительные цвета расположены напротив друг друга.
Насыщенность – S меняется от 0 до 1.
Точка V = 0, в которой находится вершина пирамиды, соответствует черному цвету. Значения S при этом могут быть любыми. Точка с координатами V = 1, S = 0 соответствует белому цвету. Промежуточные значения V при S = 0 (ось конуса) соответствуют серым цветам. Если S = 0, то значения H считаются неопределенными.
Далее приведены подпрограммы перехода от RGB к HSV и обратно
(рис. 1.10 и 1.11).
//Алгоритм преобразования RGB в HSV
//H – цветовой тон (0-360˚), 0˚ – красный //S – насыщенность (0-1)
//V – светлота (0-1)
//RGB – красный, зеленый, синий; основные цвета (0-1) //Min, Max – функции определения минимума и максимума
real RGBtoHSV (real R, real G, real B) { real H, S, V, Cr. Cg, Cb, Temp;
//Определение светлоты
V=Max(R, G, B);
//Определение насыщенности
Temp=Min(R, G, B); if (V==0)
S=0; else
S=(V-Temp)/V;
//определение цветового тона if (S==0)
H=-100;//неопределенность else {
Cr=(V-R)/(V-Temp);
Cg=(V-G)/( V-Temp);
Cb=(V-B)/( V-Temp);
//цвет между желтым и пурпурным if (R==V)
H=Cb-Cg;
//цвет между голубым и желтым if (G==V)
H=2+Cr-Cb;
//цвет между пурпурным и голубым if (B==V)
H=4+Cg-Cr;
9
//перевод в градусы
H=60*H;
//приведение к положительным величинам if (H<0)
H=H+360;
}
}
Рис. 1.10. Подпрограмма перехода от RGB к HSV
//Алгоритм преобразования HSV в RGB
//H – цветовой тон (0-360˚), 0˚ - красный //S - насыщенность (0-1)
//V – светлота (0-1)
//RGB – красный, зеленый, синий; основные цвета (0-1)
void main() {
real H, S, V, R, G, B, N, M, K; int I;
//проверка ахроматического случая if (S==0)
if ((H<=0)||(H>=360)) { //неопределенность переменной
R=V;
G=V;
B=V;
}
else
cout<<”Ошибка, H определено”<<endl; else {
//хроматический случай if (H==360)
H=0; else
H=H/60;
I=Floor(H); //Функция, выделяющая целую часть
числа
F=H-I; M=V*(1-S); N=V*(1-S*F);
K=V*(1-S*(1-F)); if (I==1) {
R=V; G=K; B=M;
}
if (I==2) { R=N; G=V; B=M;
10