Цветовые модели HSV и HSB (от англ. Нue, Saturation, Value, Brightness - тон, насыщенность, величина, яркость) являются, в отличие от рассмотренных выше моделей, ориентированными на человека и его интуитивные представления о выборе цвета.
Рассмотрим цилиндрические координаты в трехмерном евклидовом пространстве, H - угол в горизонтальной плоскости от оси Ox, S - радиус в горизонтальной плоскости (расстояние до оси Oz), V и B - высота (по оси Oz). Все цветовое пространство представляет из себя, в первом случае - перевернутую шестигранную пирамиду (рис.1.15), во втором случае – шестигранную призму или цилиндр (правильный шестиугольник заменили окружностью). Нижняя точка пирамиды соответствует всему основанию призмы или цилиндра.
Можно также заметить, что основание пирамиды представляет из себя проекцию RGB-куба вдоль главной диагонали со стороны белого. Вершины основания пирамиды соответствуют чистым основным цветам (красному, желтому, зеленому, голубому, синему и фиолетовому). При их смешивании друг с другом в разных пропорциях точка, соответствующая цвету, перемещается по основанию пирамиды.
Рис. 1.15. Цветовая модель HSV.
Смешивая противоположные цвета (например,
желтый и синий), можно получить белый. Добавляя к какому-либо чистому цвету черный, мы будем спускаться по пирамиде, получая различные оттенки, при этом диапазон S будет уменьшаться вплоть до нуля. На оси S = 0 (оттенки серого) значение H не определено.
Алгоритмы преобразования из RGB в HSV и обратно приведены ниже:
{ // H - в градусах
maxVal = maximum(R,G,B); minVal = minimum(R,G,B); V = maxVal;
if( maxVal = = 0 ) S = 0;
else S = ( maxVal - minVal )/maxVal;
if( S = = 0 ) H = UNDEFINED;
else
{ if( R == maxVal ) H = (G-B)/( maxVal - minVal );
else if( G == maxVal ) H = 2 + (B-R)/( maxVal - minVal );
else if( B == maxVal ) H = 4 + (R-G)/( maxVal - minVal );
H = H * 60;
if( H < 0 )
H = H + 360; }
}
Листинг 1.1. Переход от RGB к HSV
{ // H - в градусах
if( S = = 0 ) { // находимся на оси симметрии - оттенки серого
R = V; G = V; B = V; }
else { // floor(x) возвращает наибольшее целое <= x
sector = floor( H / 60 ); frac = H / 60 - sector; // дробная часть H/60
T = V * ( 1 - S ); P = V * ( 1 - S*frac ); Q = V * ( 1 - S*(1 - frac) );
switch( sector )
{ case 0: R = V; G = Q; B = T; break;
case 1: R = P; G = V; B = T; break;
case 2: R = T; G = V; B = Q; break;
case 3: R = T; G = P; B = V; break;
case 4: R = Q; G = T; B = V; break;
case 5: R = V; G = T; B = P; break; }
}
}
Листинг 1.2. Переход от HSV к RGB
Есть также и другие цветовые модели пользователя, схожие тем, что все они имеют координаты H и S, например, модели HLS и HIS. Различаются эти модели лишь в несущественных для пользователя деталях (например, параметры в них могут быть по-разному отнормированы или приведены).
Системы же компьютерной графики предлагают пользователю инструментарий, в котором цвет не задается числовыми значениями, а выбирается на линейных и плоских шкалах (рис.1.16). Это практически полностью нивелирует для пользователя различия между моделями такого типа. Важно только их наличие и реализация связи с другими моделями.
Рис.1.16.Пример интерфейса по выбору цвета с указанием осей модели HSB
5 5. Цветовые модели, разделяющие яркость и цвет: Y**
Существует несколько тесно связанных цветовых моделей, которые объединяет то, что в них используется явное разделение информации о яркости и цвете. Компонента Y соответствует одноименной компоненте в модели CIE XYZ и отвечает за яркость. Такие модели находят широкое применение в телевизионных стандартах, так как исторически необходима была совместимость с черно-белыми телевизорами, которые принимали только сигнал, соответствующий Y. Также они применяются в некоторых алгоритмах обработки и сжатия изображений и видео.