Московский государственный университет имени М.В.Ломоносова
Опубликован: 23.04.2007 | Доступ: свободный | Студентов: 3280 / 442 | Оценка: 4.18 / 3.71 | Длительность: 17:54:00
ISBN: 978-5-9556-0098-7
Специальности: Программист
Лекция 1:

Основные понятия. Представление цвета в машинной графике

Цветовые модели CMY и CMYK

Цветовая модель CMY (от англ. Cyan, Magenta, Yellow - сине-зеленый, пурпурный, желтый) является как бы "перевернутой" моделью RGB:

C = 1 - R;
M = 1 - G;
Y = 1 - B;
Листинг 1.5. Переход от RGB к CMY

То есть это субтрактивная (с точки зрения стандартной модели RGB) модель, в которой от белого цвета (1, 1, 1)RGB = (0, 0, 0)CMY "отнимаются" C, M и Y вплоть до получения черного (0, 0, 0)RGB = (1, 1, 1)CMY.

Эта модель удобна при рассмотрении таких устройств, как принтеры, которые наносят краску на белую бумагу. Как правило, в них как раз есть краски (или тонер), соответствующие C, M и Y, а коэффициенты определяют пропорции смешения этих красок для получения необходимого цвета.

Модель CMYK (от англ. Cyan, Magenta, Yellow, blacK - сине-зеленый, пурпурный, желтый, черный) является модификацией модели CMY, созданной для принтеров, которые могут печатать как в черно-белом, так и цветном режимах. В таком принтере присутствуют как CMY краски для печати цветных изображений, так и черная, которая, как правило, существенно дешевле. Поэтому стараются в первую очередь максимально использовать ее. Отсюда возникает следующий алгоритм вычисления количества красок (по CMY):

K = min(C,M,Y);
C = C - K;
M = M - K;
Y = Y - K;
Листинг 1.6. Переход от CMY к CMYK

Цветовая модель HSV

Цветовая модель HSV (от англ. Нue, Saturation, Value - тон, насыщенность, величина) является, в отличие от рассмотренных выше моделей, ориентированной на человека и его интуитивные представления о выборе цвета.

Рассмотрим цилиндрические координаты в трехмерном евклидовом пространстве, H - угол в горизонтальной плоскости от оси Ox, S - радиус в горизонтальной плоскости (расстояние до оси Oz ), V - высота (по оси Oz ). Все цветовое пространство представляет из себя перевернутую шестигранную пирамиду (см. рис. 1.13.

Цветовая модель HSV.

Рис. 1.13. Цветовая модель HSV.

Концептуально, можно представить художника, который смешивает цвета. Вершины основания пирамиды соответствуют чистым основным цветам (красному, желтому, зеленому, цвету морской волны, синему и фиолетовому). При их смешивании друг с другом в разных пропорциях (в пространстве это будут линейные комбинации соответствующих векторов) точка, соответствующая цвету, перемещается по основанию пирамиды. Смешивая противоположные цвета (например, желтый и синий), можно получить белый. Добавляя к какому-либо чистому цвету черный, мы будем спускаться по пирамиде, получая различные оттенки, при этом диапазон S будет уменьшаться вплоть до нуля. На оси S = 0 (оттенки серого) значение H не определено.

Можно также заметить, что основание пирамиды представляет из себя проекцию RGB-куба (см. рис. 1.5) вдоль главной диагонали со стороны белого.

Алгоритмы преобразования из 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.7. Переход от 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.8. Переход от HSV к RGB