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

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

}

if (I==3) { R=M; G=V; B=K;

}

if (I==4) { R=M; G=N; B=V;

}

if (I==5) { R=K; G=M; B=V;

}

if (I==6) { R=V; G=M; B=N;

}

}

}

Рис. 1.11. Подпрограмма перехода от HSV к RGB

Модель HSB используется в графическом редакторе Adobe Photoshop. Геометрически эта модель представляется либо в виде перевернутого конуса (по вертикальной оси задается значение яркости – R), либо в виде цветового цилиндра (см. [9], рис 4.3).

1.2.5. Модель HLS

Модель HLS (Hue, Lightness, Saturation – цве-

товой фон, светлота, насыщенность) – модель, ориентированная на человека и обеспечивающая возможность явного задания требуемого оттенка цвета.

Подпространство HLS – двойной конус

(рис. 1.12).

Черный цвет задается вершиной нижнего конуса и соответствует значению L = 0, а белый цвет – вершиной верхнего конуса и соответствует значению L = 1. Максимально интенсивные цветовые тона соответствуют основаниям конусов при L = 0.5, что не совсем удобно. В некоторых источниках [1] цветовая модель HLS представляется в виде двойной шестигранной пирамиды (рис. 1.13).

Рис. 1.12. Цветовая модель HLS

11

R

Рис. 1.13. Цветовая модель HLS в виде двойной пирамиды

Подпрограммы перехода от RGB к HLS и обратно (рис. 1.14 и 1.15).

//Алгоритм преобразования RGB в HLS

//RGB – красный, зеленый, синий; основные цвета (0-1) //H – цветовой тон (0-360˚), 0˚ - красный

//L – светлота (0-1)

//S - насыщенность (0-1)

//Max – функция определения максимума //Min – функция определения минимума //определение светлоты

real RGBtoHLS (real R, real G, real B) { real M1, M2, Н, L, S, Cr, Cg, Cb; M1=Max(R, G, B);

M2=Min(R, G, B); L=(M1+M2)/2;

//определение насыщенности //ахроматический случай

if (M1==M2) { S=0;

H=-100; //неопределенность

}

else {

//хроматический случай

12

if (L<=0.5) S=(M1-M2)/(M1+M2);

else S=(M1-M2)/(2-M1-M2);

//определение цветового тона

Cr=(M1-R)/(M1-M2);

Cg=(M1-G)/(M1-M2);

Cb=(M1-B)/(M1-M2); if (R==M1)

H=Cb-Cg; if (G==M1)

H=2+Cr-Cb; if (B==M1)

H=4+Cg-Cr; H=60*H;

if (H<0) H=H+360;

}

return H;

}

Рис. 1.14. Подпрограмма перехода от RGB к HLS

//Алгоритм преобразования HLS в RGB

//H – цветовой тон (0-360˚), 0˚ - красный //L – светлота (0-1)

//S – насыщенность (0-1)

//RGB – красный, зеленый, синий; основные цвета (0-1)

void main () {

real Н, L, S, M1, M2; if (L<=0.5)

M2=L*(1+S); else M2=L+S-L*S; M1=2*L-M2;

//проверка на нулевую насыщенность if (S==0)

if ((H<=0)||(H>=360)) { //неопределенность переменной

R=L;

G=L;

B=L;

}

else

cout<<”Ошибка вследствие неверных данных”<<endl; else {

13

//расчет координат RGB RGB (H+120, M1, M2); R=Value;

RGB (H, M1, M2); G=Value;

RGB (H-120, M1, M2); B=Value;

}

}

//функция расчета координат RGB int RGB (int H, int M1, int M2) {

//приведение цветового тона и заданного диапазона int Value;

if (H<0) H+=360;

if (H>360) H-=360;

//определение координат if (H<60)

Value=M1+(M2-M1)*H/60; if ((H>=60)&&(H<180))

Value=M2;

if ((H>=180)&&(H<240)) Value=M1+(M2-M1)*(240-H)/60;

if ((H>=240)&&(H<=360)) Value=M1;

return Value;

}

Рис. 1.15. Подпрограмма перехода от HLS к RGB

2. ПОСТРОЕНИЕ РЕАЛИСТИЧЕСКИХ ИЗОБРАЖЕНИЙ

2.1. Введение. Свойства человеческого глаза

Построение реалистических изображений включает в себя как физические, так и психофизиологические процессы. Свет, т. е. электромагнитная энергия, после взаимодействия с окружающей средой попадает в глаз человека, где в результате физических и химических реакций вырабатываются электрические импульсы, воспринимаемые мозгом.

14

Природа создала целый ряд конструкций глаза. Здесь мы рассмотрим одну из упрощенных теорий о строении глаза человека, которая тем не менее объясняет некоторые эффекты, имеющие большое значение в компьютерной графике.

Воспринимаемый свет с помощью гибкого хрусталика фокусируется на задней части сетчатки глаза, которая содержит два типа светочувствительных рецепторов – колбочки (короткие и толстые рецепторы дневного зрения) и палочки (длинные и тонкие рецепторы ночного зрения). Колбочки (5–7 млн шт.) чувствительны только к относительно высоким уровням освещенности и присоединены к отдельному нерву, что позволяет различать мелкие детали. Палочки (75–150 млн шт.) чувствительны к низким уровням освещенности, но так как к одному нерву присоединены сразу несколько палочек, то они не способны различать мелкие детали. Цвет воспринимают только колбочки, которые бывают трех типов, – красные, зеленые и синие. Поэтому при низкой освещенности, когда колбочки теряют свою чувствительность, все предметы кажутся черно-белыми. И это объясняет, почему «ночью все кошки серы».

Пределы чувствительности глаза к яркости очень высоки, но он приспосабливается к «средней» освещенности обозреваемой сцены. Поэтому область с постоянной яркостью на темном фоне кажется ярче, чем на светлом (рис. 2.1), где I – интенсивность.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а

 

 

б

Рис. 2.1. Одновременный контраст

Это явление называется одновременным контрастом. На рис. 2.1, а и 2.1, б яркость центрального квадрата равна приблизительно 0.5 от максимальной яркости, но центральный квадрат на темном фоне (рис. 2.1, б) кажется более ярким. Эффект одновременного контраста особенно заметен при наблюдении уличного фонаря или дальнего света автомобиля днем и ночью.

Еще одним свойством человеческого глаза является то, что границы областей с постоянной интенсивностью кажутся более яркими, в результате чего области с постоянной интенсивностью воспринимают-

15

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