Материал: Алгоритмы компьютерной графики. В 3 ч. Ч. 3 (200

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рис. 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

Источник: https://studfile.net/preview/16724844/