Алгоритмические основы растровой графики

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

Разбить на страницы
Показывать лекцию целиком

1.1. Растровая и векторная графика. Понятие растра

Для представления графической информации на двумерной плоскости (например, экране монитора, странице книги и т.п.) в вычислительной технике применяются два основных подхода: растровый и векторныйАналогичные концепции есть и в трехмерной графике, но это выходит за рамки предмета данного курса..

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

Растровая графика же оперирует изображениями в виде растров. Неформально можно сказать, что растр - это описание изображения на плоскости путем разбиения всей плоскости или ее части на одинаковые квадраты и присвоение каждому квадрату своего цветового (или иного, например, прозрачности, для последующего наложения изображений друг на друга) атрибута. Если таких квадратов имеется конечное число, то получается, что непрерывная цветовая функция изображения приближенно представлена конечной совокупностью значений атрибутов. Иногда понятие растра определяют более широко: как разбиение плоскости (или ее участка) на равные элементы (т.е."замощение"), например шестиугольниками ( гексагональный растр). Далее в этом курсе расширенное толкование использоваться не будет.

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

Формально, введем следующие определения:

Растр (англ. raster) - отображение вида

$$f \colon X \times Y \to 2 ^{\mathbb{R}^2} \times C,$$ где $$X \subset \mathbb{Z}$$, $$Y \subset \mathbb{Z}$$,

$$2 ^{\mathbb{R}^2}$$ обозначает множество всех подмножеств $$\mathbb{R}^2$$,

C - множество значений атрибутов (как правило, цвет).

f(i, j) - элемент растра, называемый пикселем (англ. pixel (от picture element)), в русскоязычной литературе иногда также переводится как пиксел);

f(i, j) = (A(i, j),C(i, j)), где

  • $$A(i, j) \subset \mathbb{R}^2$$ - область пикселя,
  • $$C(i, j) \in C$$ - атрибут пикселя (как правило, цвет). Чаще всего мы будем пользоваться следующими двумя видами атрибутов:
  • C(i, j) = I(i, j) - интенсивность (или яркость) пикселя;
  • C(i, j) = {R(i, j),G(i, j),B(i, j)} - цветовые атрибуты в цветовой модели RGB (см. раздел 1.2).
  • Также иногда будут употребляться матричные обозначения:

    Mij = (Aij ,Cij)

    Aij может определяться двояко, в зависимости от того, с какой моделью мы хотим работать:

  • Aij := (i, j) - одна точка. Пример такой модели растра см. на рис. 1.1;
  • $$Aij := (i, i + 1) \times (j, j + 1)$$ - квадрат. Пример такой модели растра см. на рис. 1.2. На реальных графических устройствах физически пиксели могут быть прямоугольниками, что иногда порождает дополнительные трудности.
  • В реальности, как правило, X и Y - ограниченные наборы неотрицательных целых чисел; такой растр называется прямоугольным. Для него применимо понятие Аспектовое отношение (англ. aspect ratio) - отношение ширины к высоте растра (|X|/|Y|). Чаще всего такое понятие употребляется в связи с физическими растрами (дисплеями, ПЗС-матрицами фотоаппаратов и т.д.) и записывается в виде простой дроби с ":", например "4:3".

    (рис 1.2) Модель растра первого типа.(рис 1.1) Модель растра второго типа.

    Бесконечные растры (когда X и Y неограниченны) бывают удобны для описания алгоритмов, позволяя избежать особых ситуаций. Впрочем, самой сутью некоторых алгоритмов является как раз работа с граничными случаями.

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

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

    Устройства отображения растровой графики рассматриваются в следующей лекции.

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

    Понятие цвета возникает при описании восприятия глазами человека электромагнитных волн в определенном диапазоне частот (длина волны $$\lambda$$ от 400 нм (фиолетовый) до 700 нм (красный) (см. рис. 1.3)). Таким образом, самым общим описанием светового потока может служить его спектральная функция $$I(\lambda )$$. Свет называется монохроматическим (не путать с монохромными дисплеями, рассматриваемыми в следующей лекции), если его спектр состоит из одного значения $$\alpha$$ ; математически $$I_\alpha(\lambda) = c \cdot \delta (\lambda - \alpha )$$ ), где c - яркость. Понятно, что описание цвета путем описания функции в большинстве случаев слишком громоздко, хотя иногда и применяется. К тому же, оно является избыточным, если подробнее рассмотреть, как глаз человека воспринимает свет. На сетчатке глаза находятся два типа рецепторов: палочки и колбочки. Палочки реагируют на степень яркости (или интенсивность) падающего света (см. рис. 1.4), а колбочки отвечают за различение цветов; при этом колбочки резко теряют свою чувствительность в темноте (в отличие от палочек), поэтому все объекты начинают казаться серыми. Колбочки бывают трех видов (их часто обозначают S, M и L )по длине волны - от англ. Small, Middle, Large - малая, средняя и длинная , и их кривые относительной чувствительности представлены на рис. 1.3. Пики на кривых чувствительности отвечают красному, зеленому и синему цветам. При этом следует заметить, что восприимчивость к синему цвету значительно ниже, чем к двум другим. Также важным свойством восприятия света человеком является его линейность: при освещении двумя источниками света (со спектральными функциями $$I_{1}(\lambda )$$, $$I_{2}(\lambda )$$ ) человек воспринимает их как один со спектральной функцией, равной сумме $$I(\lambda ) = I_{1}(\lambda )+I_{2}(\lambda )$$. Этот факт называется законом Грассмана. Благодаря ему можно строить сравнительно простую теорию цветовосприятия.

    Так как области восприятия для разных типов колбочек перекрываются, то возникают метамеры, - потоки волн с разными спектральными характеристиками, но воспринимаемые как имеющие один и тот же цвет.

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

    Из рассмотренной выше модели человеческого зрения вытекает, что достаточно обоснованной является цветовая модель RGB (от англ. Red, Green, Blue - красный, зеленый, голубой), в которой спектральная функция представляется как сумма кривых чувствительности для каждого типа колбочек с неотрицательными весовыми коэффициентами (обычно их нормируют от 0 до 1 ), которые так и обозначаются - R, G и B. Эта модель характеризуется свойством аддитивности (мы складываем цвета для получения новых). К примеру, спектральные функции:

  • черного цвета: fblack = 0, (R,G,B) = (0,0,0) ;
  • фиолетового цвета fviolet = fred + fblue, (R,G,B) = (1,0,1) ;
  • белого цвета fwhite = fred + fgreen + fblue, (R,G,B) = (1,1,1).
  • (рис 1.4) Относительная чувствительность колбочек.(рис 1.3) Относительное восприятие интенсивности света палочками.

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

    (рис 1.5) Цветовая модель RGB.

    Эта модель является в настоящее время самой распространенной. В то же время ей присущ важный недостаток: не все цвета, видимые человеком, представимы в этой модели. В конце 1920-х годов В.Д. Райтом [53] и Дж. Гилдом [33] были проведены эксперименты, в которых наблюдателю предлагалось каждому монохроматическому цветуЕстественно, образцы брались с определенным шагом по спектру, равным 2 нм. фиксированной яркости в видимом диапазоне сопоставить цвет, составленный из смеси основных цветов R, G и B с некоторыми весами, регулируемыми наблюдателем. Оказалось, что для некоторых цветов необходимо было добавить отдельно яркости испытуемого света и одного из базисных цветов (был выбран R ), с тем чтобы получить одинаковое восприятие. Это соответствует отрицательному весу R -компоненты (см. рис. 1.6). Такой эффект связан с тем, что волны из видимого диапазона воздействуют сразу на все типы колбочек и не всегда возможно ограничиться положительными коэффициентами (более подробно см. [24]) для представления некоторых цветов из видимого спектра. К счастью, доля воспроизводимых цветов значительно больше, чем доля не представимых в этой модели цветов. Модель, с помощью которой можно представить все цвета из спектра, ограничиваясь неотрицательными коэффициентами, представлена в следующем подразделе.

    (рис 1.6) Функции представления цвета для RGB.

    Цветовая система CIE XYZ и диаграмма цветности CIE

    Международный стандарт представления цвета CIE XYZ был принят в 1931 году Международной комиссией по освещению (CIE - фр. Commission Internationale de l'Eclairage), В нем определяются три базисные функции $$\rho _{X}(\lambda )$$, $$\rho _{Y} (\lambda )$$, $$\rho _{Z}(\lambda )$$, зависящие от длины волны (см. рис. 1.7), линейные комбинации которых с неотрицательными коэффициентами ( X, Y и Z ) позволяют получить все видимые человеком цвета.

    (рис 1.7) Функции представления цвета для CIE XYZ.

    Математически можно записать получение коэффициентов так:

    $$X = k \int I(\lambda ) \rho_X(\lambda )d \lambda ,\\ Y = k \int I(\lambda ) \rho_Y(\lambda )d \lambda ,\\ Z = k \int I(\lambda ) \rho_Z(\lambda )d \lambda,$$

    где $$I(\lambda )$$ - спектральная функция распределения для представляемого цвета, а k - масштабный коэффициент, выбираемый исходя из того, какой цвет принимается за белый и в каком диапазоне должны лежать значения Y.

    $$k = \frac{Y_{max}}{\int I_{бел}(\lambda ) \rho_Y(\lambda )d \lambda}$$

    где $$I_{бел}(\lambda )$$ - спектральная функция распределения для выбранного эталона белого цвета. Функция $$\rho _{Y}(\lambda )$$ соответствует относительному восприятию интенсивности света палочками (рис. 1.4).

    Если рассмотреть значения X,Y,Z как координаты в трехмерном евклидовом пространстве, то видимые цвета образуют криволинейный конус в первом квадранте (см. рис. 1.8).

    Рассмотрим значения цветности (англ. chromacity values) x, y, z, которые определяются из X,Y,Z следующим образом:

    $$$x =\frac{X}{X+Y+Z},$$$ $$$y =\frac{Y}{X+Y+Z},$$$ $$$z =\frac{Z}{X+Y+Z}.$$$

    Они вводятся для описания только цветовых свойств света, безотносительно его энергии, и зависят только от основной длины волны и насыщенности. Таким образом, если опять же поместить эти точки в трехмерное евклидово пространство, то они будут как раз лежать на плоскости X + Y + Z = 1 (она также показана на рис. 1.8). Проекция этой плоскости на Oxy называется диаграммой цветности CIE (см. рис. 1.9).

    Эта диаграмма весьма полезна и наглядна и широко используется. Цвета, расположенные на границе проекции, являются монохроматическими. При смешении базисных цветов можно получить все цвета, находящиеся в их выпуклой оболочке на диаграмме цветности. Этим как раз и объясняется, что с помощью трех базовых цветов R,G,B (да и любых других) мы не можем получить все видимые цвета.

    Введем понятие точки белого (англ. white point). Это точка на диаграмме цветности, соответствующая измеренным координатам белого цвета. Она может варьироваться в зависимости от того, какой источник цвета принимается за белый. В исходной модели CIE XYZ весовые функции были специально подобраны так, чтобы дневному свету солнца соответствовала точка (x, y, z) = (1/3, 1/3, 1/3). Другие точки белого применяются для компенсации условий съемки, например при освещении флуоресцентными лампами, или свойств оборудования. В фотографии это связано с так называемым нахождением баланса белого.

    (рис 1.8) Конус видимых цветов в трехмерном пространстве в модели CIE XYZ.

    Важной характеристикой как цветовых моделей, так и конкретных устройств, отображающих цветную информацию, является Цветовая гамма (англ. Color gamut) - подмножество цветов, воспроизводимое в условиях конкретной цветовой модели или для конкретного устройства цветового отображения.

    (рис 1.9) Диаграмма цветности CIE c приблизительными цветовыми гаммами для разных классов устройств.

    Корректно отображать цветовую гамму как некоторое подмножество в конусе видимых цветов (см. рис. 1.8). Можно также ограничиться проекцией на диаграмму цветности, но при этом не учитывается диапазон яркости. На рис. 1.9 представлены некоторые типичные цветовые гаммы, которые позволяют судить о полноте охвата отображаемых цветов разными устройствами.

    Преобразования между CIE XYZ и RGB

    Цветовое пространство RGB, как и CIE XYZ, является трехмерным и аддитивным. Поэтому преобразования между двумя этими пространствами описываются матрицами 3 x 3 ; достаточно задать координаты базисных цветов R, G и B в системе CIE XYZ. Обычно удобно это делать, отдельно задавая цветовую информацию точками (x, y) на диаграмме цветности и яркостной компонентой Y. Если цвет задан таким образом (x, y, Y), то из формул (1.1) следует, что

    $$\left( \begin{array}{c} X \\ Y \\ Z \end{array} \right) = \left( \begin{array}{c} \frac{Y}{y}x \\ Y \\ \frac{Y}{y}(1-x-y) \end{array} \right) .$$

    Тогда, если базисные RGB-цвета заданы как (xR, yR, YR), (xG, yG, YG), (xB, yB, YB), получаем следующую формулу преобразования:

    zR=1-xR-yR;
    zG=1-xG-yG;
    zB=1-xB-yB;
    $$\left( \begin{array}{c} X \\ Y \\ Z \end{array} \right) ={ \left[ \begin{array}{ccc} \frac{Y_R}{y_R}x_R \frac{Y_G}{y_G}x_G \frac{Y_B}{y_B}x_B \\ Y_R Y_G Y_ B \\ \frac{Y_R}{y_R}z_R \frac{Y_G}{y_G}z_G \frac{Y_B}{y_B}z_B \end{array} \right] \left( \begin{array}{c} R \\ G \\ B \end{array} \right) };$$

    Все представимые в модели RGB цвета образуют параллелепипед в CIE XYZ (см. рис. 1.10), пересечение которого с плоскостью X + Y + Z = 1, спроецированное на диаграмму цветности и дает цветовую гамму данной модели.

    (рис 1.10) RGB-параллелепипед в пространстве CIE XYZ.

    Таким образом, в зависимости от координат (x, y, Y ) для базисных цветов в конкретном устройстве (фотоаппарате, мониторе, проекторе и т.п.) одним и тем же значениям (R,G,B) соответствуют разные цвета.

    Цветовые пространства, в которых каждому набору цветовых компонент соответствует физически единственный цвет, называются абсолютными цветовыми пространствами. Таким пространством является как раз CIE XYZ. Если мы также однозначно зафиксируем (x, y, Y ) для базисных RGB-цветов, то получим абсолютное RGB-пространство. Такие стандартные пространства играют важную роль в обеспечении одинакового отображения одного и того же изображения на разных устройствах. Для корректного отображения на конкретном устройстве изображение надо перевести из абсолютного пространства в цветовое пространство для данного устройства. Для осуществления подобного преобразования программным путем информация о характеристиках устройства хранится в сопоставленном ему специальном файле. Стандарт на такие файлы был разработан ICC (англ. International Color Consortium), поэтому они получили название профилей ICC.

    Наиболее широко распространенным абсолютным RGB-пространством является модель sRGB (хорошо отражает характеристики цифровых фотокамер любительского уровня), также были созданы Adobe RGB, AdobeWide Gamut RGB и ProPhoto RGB, каждая последующая с все более широкой цветовой гаммой для представления максимальной части цветов видимого спектра. В ProPhoto RGB "базисные цвета" R, G и B ради этого даже находятся за рамками зоны видимых цветов. Для представления цветов в таком широком диапазоне рекомендуется использовать повышенную точность с 16 или более бит/канал. Все эти модели представлены на рис. 1.11.

    (рис 1.11) Диаграмма цветности CIE c цветовыми гаммами для абсолютных пространств RGB.

    Цветовые модели CIE L*u*v* и CIE L*a*b*

    У модели CIE XYZ все же есть существенный недостаток - неоднородность восприятия изменения цвета относительно расстояния на диаграмме цветности. В идеале хотелось бы, чтобы одинаковые расстояния между точками, соответствующими цветам на диаграмме цветности, соответствовали приблизительно одинаковому восприятию человеком отличий между этими парами цветов. Именно для этих целей CIE в 1976 году предложила модель L*u*v*. L* (от англ. Lightness) в этой модели соответствует яркости, скорректированной с учетом особенностей человеческого восприятия [21]. Получающаяся диаграмма цветности представлена на рис. 1.12. Эта модель рекомендуется для представления света от источников.

    Определим функцию F(s) как

    $$F(s) =\left\{ \begin{array}{cc} 7, 787s + 16/116; 0 \le s < 0, 008856 \\ s^{1/3}; s \ge 0, 008856 \\ \end{array} \right.$$

    и определим

    u' = 4X/(X + 15Y + 3Z);
    v' = 9Y/(X + 15Y + 3Z);

    Пусть точка белого имеет координаты (Xw, Yw, Zw), тогда получим следующий алгоритм преобразования:

    L* = 116F(Y/Yw) - 16;
    u* = 13L*(u' - u'w);
    v* = 13L*(v' - v'w);

    В обратную сторону:

    u' = u*/(13L*) + u'w;
    v' = v*/(13L*) + v'w;
    Y = F-1((L* + 16)/116)Yw;
    X = 9Yu'/4v';
    Z = (4X - 15v'Y - v'X)/3u';

    Также CIE в 1976 году с той же целью предложила и другую похожую модель L*a*b*, которая получила несколько более широкое распространение [21]. Эта модель рекомендуется для представления отраженного света.

    В ней используется та же функция F(s), определенная в (1.3), и L* имеет то же самое значение, что в L*u*v*.

    L* = 116F(Y/Yw) - 16;
    a* = 500[F(X/Xw) - F(Y/Yw)];
    b* = 200[F(Y/Yw) - F(Z/Zw)];
    (рис 1.12) Диаграмма цветности для CIE L*u*v*.

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

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

    C = 1 - R;
    M = 1 - G;
    Y = 1 - B;

    То есть это субтрактивная (с точки зрения стандартной модели 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;

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

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

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

    (рис 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;
         }
    }
    {
       // 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;
          }
       }
    }

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

    Цветовая модель HLS (от англ. Нue, Lightness, Saturation - тон, светлота, насыщенность) схожа с моделью HSV. Снова рассмотрим цилиндрические координаты в трехмерном евклидовом пространстве, H - угол в горизонтальной плоскость от оси Ox, S - радиус в горизонтальной плоскости (расстояние до оси Oz ), L - высота (по оси Oz ). Все цветовое пространство представляет из себя две соединенные основаниями шестигранные пирамиды (см. рис. 1.14). На рис. 1.14 для наглядности вырезан один из шести секторов.

    (рис 1.14) Цветовая модель HLS.

    Как видно на рис. 1.14, эта модель получена из HSV вытягиванием вдоль вертикальной оси. Понятия H и S остались теми же, только по вертикальной оси теперь L вместо V. Концептуальное различие состоит в том, что в этой модели считается, что движение от чистых цветов (у которых L = 0,5, S = 1 ) как в направлении белого, так и черного (а не только черного, как в HSV) одинаково приводит к уменьшению информации в H (вплоть до того, что в вершинах H не определено (как впрочем, и на всей вертикальной оси S = 0 )) и сужению диапазона S.

    Алгоритмы преобразования из RGB в HLS и обратно приведены ниже.

    {
       // H - в градусах
       maxVal = maximum(R,G,B);
       minVal = minimum(R,G,B);
       L = (maxVal + minVal) / 2;
    
       if( maxVal == minVal )
       {
          S = 0;
          H = UNDEFINED;
       }
       else
       {
       if( L <= 0.5 )
          S = (maxVal - minVal)/(maxVal + minVal);
       else
          S = (maxVal - minVal)/(2 - (maxVal + minVal));
    
       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;
       }
    }
    {
       // H - в градусах
    
       if( S == 0 )
       {
          // находимся на оси симметрии - оттенки серого
          R = L;
          G = L;
          B = L;
       }
       else
       {
          if( L <= 0.5 )
             M2 = L * (L + S);
          else
             M2 = (L + S) - L * S;
          M1 = 2 * L - M2;
    
          // x mod y возвращает остаток от деления x на y
    
          R = Value(M1,M2,(H + 120) mod 360);
          G = Value(M1,M2,H);
          B = Value(M1,M2,(H - 120) mod 360);
       }
    }
    
    // Вспомогательная функция Value
    
    Value( N1, N2, Hue )
    {
       if( Hue < 60 )
          return N1 + (N2 - N1)*Hue / 60;
       else if( Hue < 180 )
          return N2;
       else if( Hue < 240 )
          return N1 + (N2 - N1)*(240 - Hue) / 60;
       else
          return N1;
    }

    Цветовые модели Y**

    Существует несколько тесно связанных цветовых моделей, которые объединяет то, что в них используется явное разделение информации о яркости и цвете. Компонента Y соответствует одноименной компоненте в модели CIE XYZ и отвечает за яркость. Такие модели находят широкое применение в телевизионных стандартах, так как исторически необходима была совместимость с черно-белыми телевизорами, которые принимали только сигнал, соответствующий Y. Также они применяются в некоторых алгоритмах обработки и сжатия изображений и видео.

    Цветовые модели YUV, YPbPr и YCbCr

    Расcмотрим цветовую модель YUV. U и V отвечают за цветовую информацию и определяются через преобразование из RGB:

    Y  =  0,299R + 0,587G + 0,114B;
    U  =  0,492(B - Y)
       = -0,147R - 0,289G + 0,436B;
    V  =  0,877(R - Y)
       =  0,615R - 0,515G + 0,100B;

    Модель YUV применяется в телевизионной системе PAL.

    (рис 1.15) RGB-куб в пространстве YUV, диаграмма UV при Y = 0,5.

    Цветовые модели YCbCr и YPbPr являются вариациями YUV с другими весами для U и V (им соответствуют Cb/Pb и Cr/Pr ). YPbPr применяется для описания аналоговых сигналов (преимущественно в телевидении), а YCbCr - для цифровых. Для их определения используются два коэффициента: Kb и Kr. Тогда преобразование из RGB в YPbPr описывается так:

    Переход от RGB к YPbPr

    $$Y = Kr \cdot R + (1 - Kr - Kb) \cdot G + Kb \cdot B;$$ $$Pb = \frac{1}{2} \cdot \frac{1}{1-Kb} \cdot (B - Y );$$ $$Pr = \frac{1}{2} \cdot \frac{1}{1-Kr} \cdot (R - Y );$$

    Выбор Kb и Kr зависит от того, какая RGB-модель используется (это в свою очередь зависит от воспроизводящего оборудования). Обычно берется, как и выше, Kb = 0, 114 ; Kr = 0, 299. В последнее время также используют Kb = 0, 0722 ; Kr = 0, 2126, что лучше отражает характеристики современных устройств отображения.

    Из приведенных выше формул следует что при $$R,G,B \in [0, 1]$$ имеем следующие диапазоны $$Y \in [0; 1]$$ ; $$Pb, Pr \in [-0,5; 0,5]$$. Для цифрового представления эти формулы видоизменяют для получения только положительных дискретных коэффициентов в диапазонах$$Y \in [minY,maxY ], Cb,Cr \in [minC,maxC],\\ minY,maxY,minC,maxC \in \mathbb{N} \cup \{0\}:$$

    Переход от RGB к YCbCr

    $$Kg = 1 - Kr - Kb;$$ $$Y = minY + (maxY - minY ) \cdot (Kr \cdot R + Kg \cdot G + Kb \cdot B) ;$$ $$Cb = \frac{minC+maxC}{2}+ \\ \frac{maxC-minC}{2} \cdot \frac{1}{1-Kb} \cdot (-Kr \cdot R - Kg \cdot G + (1 - Kb) \cdot B) ;$$ $$Cr = \frac{minC+maxC}{2}+ \\ \frac{maxC-minC}{2} \cdot \frac{1}{1-Kr} \cdot ((1 - Kr) \cdot R - Kg \cdot G - Kb \cdot B) ;$$

    В телевидении обычно берут minY = 16, maxY = 235, minC = 16, maxC = 240. В стандарте сжатия изображений JPEG (см. раздел 14.4) используется полный 8 -битный диапазон: minY = 0, maxY = 255, minC = 0, maxC = 255.

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

    Цветовая модель YIQ применялась в телевизионной системе NTSC (I - от англ. in-phase, Q - от англ. quadrature; происходят от особенностей систем декодирования). Она тесно связана с моделью YUV, так как переход от YUV к YIQ является поворотом в плоскости UV = IQ на $$33^{\circ}$$.

    Y = 0,299R + 0,587G + 0,114B
    I = 0,735(R - Y) - 0,268(B - Y)
      = 0,596R - 0,274G + 0,321B
    Q = 0,478(R - Y) + 0,413(B - Y)
      = 0,211R - 0, 523G + 0,311B

    Обратные преобразования для всех моделей получаются в результате применения обратной матрицы преобразования.

    Страницы:

    1.1. Растровая и векторная графика. Понятие растра

    Для представления графической информации на двумерной плоскости (например, экране монитора, странице книги и т.п.) в вычислительной технике применяются два основных подхода: растровый и векторныйАналогичные концепции есть и в трехмерной графике, но это выходит за рамки предмета данного курса..

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

    Растровая графика же оперирует изображениями в виде растров. Неформально можно сказать, что растр - это описание изображения на плоскости путем разбиения всей плоскости или ее части на одинаковые квадраты и присвоение каждому квадрату своего цветового (или иного, например, прозрачности, для последующего наложения изображений друг на друга) атрибута. Если таких квадратов имеется конечное число, то получается, что непрерывная цветовая функция изображения приближенно представлена конечной совокупностью значений атрибутов. Иногда понятие растра определяют более широко: как разбиение плоскости (или ее участка) на равные элементы (т.е."замощение"), например шестиугольниками ( гексагональный растр). Далее в этом курсе расширенное толкование использоваться не будет.

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

    Формально, введем следующие определения:

    Растр (англ. raster) - отображение вида

    $$f \colon X \times Y \to 2 ^{\mathbb{R}^2} \times C,$$ где $$X \subset \mathbb{Z}$$, $$Y \subset \mathbb{Z}$$,

    $$2 ^{\mathbb{R}^2}$$ обозначает множество всех подмножеств $$\mathbb{R}^2$$,

    C - множество значений атрибутов (как правило, цвет).

    f(i, j) - элемент растра, называемый пикселем (англ. pixel (от picture element)), в русскоязычной литературе иногда также переводится как пиксел);

    f(i, j) = (A(i, j),C(i, j)), где

  • $$A(i, j) \subset \mathbb{R}^2$$ - область пикселя,
  • $$C(i, j) \in C$$ - атрибут пикселя (как правило, цвет). Чаще всего мы будем пользоваться следующими двумя видами атрибутов:
  • C(i, j) = I(i, j) - интенсивность (или яркость) пикселя;
  • C(i, j) = {R(i, j),G(i, j),B(i, j)} - цветовые атрибуты в цветовой модели RGB (см. раздел 1.2).
  • Также иногда будут употребляться матричные обозначения:

    Mij = (Aij ,Cij)

    Aij может определяться двояко, в зависимости от того, с какой моделью мы хотим работать:

  • Aij := (i, j) - одна точка. Пример такой модели растра см. на рис. 1.1;
  • $$Aij := (i, i + 1) \times (j, j + 1)$$ - квадрат. Пример такой модели растра см. на рис. 1.2. На реальных графических устройствах физически пиксели могут быть прямоугольниками, что иногда порождает дополнительные трудности.
  • В реальности, как правило, X и Y - ограниченные наборы неотрицательных целых чисел; такой растр называется прямоугольным. Для него применимо понятие Аспектовое отношение (англ. aspect ratio) - отношение ширины к высоте растра (|X|/|Y|). Чаще всего такое понятие употребляется в связи с физическими растрами (дисплеями, ПЗС-матрицами фотоаппаратов и т.д.) и записывается в виде простой дроби с ":", например "4:3".

    (рис 1.2) Модель растра первого типа.(рис 1.1) Модель растра второго типа.

    Бесконечные растры (когда X и Y неограниченны) бывают удобны для описания алгоритмов, позволяя избежать особых ситуаций. Впрочем, самой сутью некоторых алгоритмов является как раз работа с граничными случаями.

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

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

    Устройства отображения растровой графики рассматриваются в следующей лекции.

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

    Понятие цвета возникает при описании восприятия глазами человека электромагнитных волн в определенном диапазоне частот (длина волны $$\lambda$$ от 400 нм (фиолетовый) до 700 нм (красный) (см. рис. 1.3)). Таким образом, самым общим описанием светового потока может служить его спектральная функция $$I(\lambda )$$. Свет называется монохроматическим (не путать с монохромными дисплеями, рассматриваемыми в следующей лекции), если его спектр состоит из одного значения $$\alpha$$ ; математически $$I_\alpha(\lambda) = c \cdot \delta (\lambda - \alpha )$$ ), где c - яркость. Понятно, что описание цвета путем описания функции в большинстве случаев слишком громоздко, хотя иногда и применяется. К тому же, оно является избыточным, если подробнее рассмотреть, как глаз человека воспринимает свет. На сетчатке глаза находятся два типа рецепторов: палочки и колбочки. Палочки реагируют на степень яркости (или интенсивность) падающего света (см. рис. 1.4), а колбочки отвечают за различение цветов; при этом колбочки резко теряют свою чувствительность в темноте (в отличие от палочек), поэтому все объекты начинают казаться серыми. Колбочки бывают трех видов (их часто обозначают S, M и L )по длине волны - от англ. Small, Middle, Large - малая, средняя и длинная , и их кривые относительной чувствительности представлены на рис. 1.3. Пики на кривых чувствительности отвечают красному, зеленому и синему цветам. При этом следует заметить, что восприимчивость к синему цвету значительно ниже, чем к двум другим. Также важным свойством восприятия света человеком является его линейность: при освещении двумя источниками света (со спектральными функциями $$I_{1}(\lambda )$$, $$I_{2}(\lambda )$$ ) человек воспринимает их как один со спектральной функцией, равной сумме $$I(\lambda ) = I_{1}(\lambda )+I_{2}(\lambda )$$. Этот факт называется законом Грассмана. Благодаря ему можно строить сравнительно простую теорию цветовосприятия.

    Так как области восприятия для разных типов колбочек перекрываются, то возникают метамеры, - потоки волн с разными спектральными характеристиками, но воспринимаемые как имеющие один и тот же цвет.

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

    Из рассмотренной выше модели человеческого зрения вытекает, что достаточно обоснованной является цветовая модель RGB (от англ. Red, Green, Blue - красный, зеленый, голубой), в которой спектральная функция представляется как сумма кривых чувствительности для каждого типа колбочек с неотрицательными весовыми коэффициентами (обычно их нормируют от 0 до 1 ), которые так и обозначаются - R, G и B. Эта модель характеризуется свойством аддитивности (мы складываем цвета для получения новых). К примеру, спектральные функции:

  • черного цвета: fblack = 0, (R,G,B) = (0,0,0) ;
  • фиолетового цвета fviolet = fred + fblue, (R,G,B) = (1,0,1) ;
  • белого цвета fwhite = fred + fgreen + fblue, (R,G,B) = (1,1,1).
  • (рис 1.4) Относительная чувствительность колбочек.(рис 1.3) Относительное восприятие интенсивности света палочками.

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

    (рис 1.5) Цветовая модель RGB.

    Эта модель является в настоящее время самой распространенной. В то же время ей присущ важный недостаток: не все цвета, видимые человеком, представимы в этой модели. В конце 1920-х годов В.Д. Райтом [53] и Дж. Гилдом [33] были проведены эксперименты, в которых наблюдателю предлагалось каждому монохроматическому цветуЕстественно, образцы брались с определенным шагом по спектру, равным 2 нм. фиксированной яркости в видимом диапазоне сопоставить цвет, составленный из смеси основных цветов R, G и B с некоторыми весами, регулируемыми наблюдателем. Оказалось, что для некоторых цветов необходимо было добавить отдельно яркости испытуемого света и одного из базисных цветов (был выбран R ), с тем чтобы получить одинаковое восприятие. Это соответствует отрицательному весу R -компоненты (см. рис. 1.6). Такой эффект связан с тем, что волны из видимого диапазона воздействуют сразу на все типы колбочек и не всегда возможно ограничиться положительными коэффициентами (более подробно см. [24]) для представления некоторых цветов из видимого спектра. К счастью, доля воспроизводимых цветов значительно больше, чем доля не представимых в этой модели цветов. Модель, с помощью которой можно представить все цвета из спектра, ограничиваясь неотрицательными коэффициентами, представлена в следующем подразделе.

    (рис 1.6) Функции представления цвета для RGB.

    Цветовая система CIE XYZ и диаграмма цветности CIE

    Международный стандарт представления цвета CIE XYZ был принят в 1931 году Международной комиссией по освещению (CIE - фр. Commission Internationale de l'Eclairage), В нем определяются три базисные функции $$\rho _{X}(\lambda )$$, $$\rho _{Y} (\lambda )$$, $$\rho _{Z}(\lambda )$$, зависящие от длины волны (см. рис. 1.7), линейные комбинации которых с неотрицательными коэффициентами ( X, Y и Z ) позволяют получить все видимые человеком цвета.

    (рис 1.7) Функции представления цвета для CIE XYZ.

    Математически можно записать получение коэффициентов так:

    $$X = k \int I(\lambda ) \rho_X(\lambda )d \lambda ,\\ Y = k \int I(\lambda ) \rho_Y(\lambda )d \lambda ,\\ Z = k \int I(\lambda ) \rho_Z(\lambda )d \lambda,$$

    где $$I(\lambda )$$ - спектральная функция распределения для представляемого цвета, а k - масштабный коэффициент, выбираемый исходя из того, какой цвет принимается за белый и в каком диапазоне должны лежать значения Y.

    $$k = \frac{Y_{max}}{\int I_{бел}(\lambda ) \rho_Y(\lambda )d \lambda}$$

    где $$I_{бел}(\lambda )$$ - спектральная функция распределения для выбранного эталона белого цвета. Функция $$\rho _{Y}(\lambda )$$ соответствует относительному восприятию интенсивности света палочками (рис. 1.4).

    Если рассмотреть значения X,Y,Z как координаты в трехмерном евклидовом пространстве, то видимые цвета образуют криволинейный конус в первом квадранте (см. рис. 1.8).

    Рассмотрим значения цветности (англ. chromacity values) x, y, z, которые определяются из X,Y,Z следующим образом:

    $$$x =\frac{X}{X+Y+Z},$$$ $$$y =\frac{Y}{X+Y+Z},$$$ $$$z =\frac{Z}{X+Y+Z}.$$$

    Они вводятся для описания только цветовых свойств света, безотносительно его энергии, и зависят только от основной длины волны и насыщенности. Таким образом, если опять же поместить эти точки в трехмерное евклидово пространство, то они будут как раз лежать на плоскости X + Y + Z = 1 (она также показана на рис. 1.8). Проекция этой плоскости на Oxy называется диаграммой цветности CIE (см. рис. 1.9).

    Эта диаграмма весьма полезна и наглядна и широко используется. Цвета, расположенные на границе проекции, являются монохроматическими. При смешении базисных цветов можно получить все цвета, находящиеся в их выпуклой оболочке на диаграмме цветности. Этим как раз и объясняется, что с помощью трех базовых цветов R,G,B (да и любых других) мы не можем получить все видимые цвета.

    Введем понятие точки белого (англ. white point). Это точка на диаграмме цветности, соответствующая измеренным координатам белого цвета. Она может варьироваться в зависимости от того, какой источник цвета принимается за белый. В исходной модели CIE XYZ весовые функции были специально подобраны так, чтобы дневному свету солнца соответствовала точка (x, y, z) = (1/3, 1/3, 1/3). Другие точки белого применяются для компенсации условий съемки, например при освещении флуоресцентными лампами, или свойств оборудования. В фотографии это связано с так называемым нахождением баланса белого.

    (рис 1.8) Конус видимых цветов в трехмерном пространстве в модели CIE XYZ.

    Важной характеристикой как цветовых моделей, так и конкретных устройств, отображающих цветную информацию, является Цветовая гамма (англ. Color gamut) - подмножество цветов, воспроизводимое в условиях конкретной цветовой модели или для конкретного устройства цветового отображения.

    (рис 1.9) Диаграмма цветности CIE c приблизительными цветовыми гаммами для разных классов устройств.

    Корректно отображать цветовую гамму как некоторое подмножество в конусе видимых цветов (см. рис. 1.8). Можно также ограничиться проекцией на диаграмму цветности, но при этом не учитывается диапазон яркости. На рис. 1.9 представлены некоторые типичные цветовые гаммы, которые позволяют судить о полноте охвата отображаемых цветов разными устройствами.

    Преобразования между CIE XYZ и RGB

    Цветовое пространство RGB, как и CIE XYZ, является трехмерным и аддитивным. Поэтому преобразования между двумя этими пространствами описываются матрицами 3 x 3 ; достаточно задать координаты базисных цветов R, G и B в системе CIE XYZ. Обычно удобно это делать, отдельно задавая цветовую информацию точками (x, y) на диаграмме цветности и яркостной компонентой Y. Если цвет задан таким образом (x, y, Y), то из формул (1.1) следует, что

    $$\left( \begin{array}{c} X \\ Y \\ Z \end{array} \right) = \left( \begin{array}{c} \frac{Y}{y}x \\ Y \\ \frac{Y}{y}(1-x-y) \end{array} \right) .$$

    Тогда, если базисные RGB-цвета заданы как (xR, yR, YR), (xG, yG, YG), (xB, yB, YB), получаем следующую формулу преобразования:

    zR=1-xR-yR;
    zG=1-xG-yG;
    zB=1-xB-yB;
    $$\left( \begin{array}{c} X \\ Y \\ Z \end{array} \right) ={ \left[ \begin{array}{ccc} \frac{Y_R}{y_R}x_R \frac{Y_G}{y_G}x_G \frac{Y_B}{y_B}x_B \\ Y_R Y_G Y_ B \\ \frac{Y_R}{y_R}z_R \frac{Y_G}{y_G}z_G \frac{Y_B}{y_B}z_B \end{array} \right] \left( \begin{array}{c} R \\ G \\ B \end{array} \right) };$$

    Все представимые в модели RGB цвета образуют параллелепипед в CIE XYZ (см. рис. 1.10), пересечение которого с плоскостью X + Y + Z = 1, спроецированное на диаграмму цветности и дает цветовую гамму данной модели.

    (рис 1.10) RGB-параллелепипед в пространстве CIE XYZ.

    Таким образом, в зависимости от координат (x, y, Y ) для базисных цветов в конкретном устройстве (фотоаппарате, мониторе, проекторе и т.п.) одним и тем же значениям (R,G,B) соответствуют разные цвета.

    Цветовые пространства, в которых каждому набору цветовых компонент соответствует физически единственный цвет, называются абсолютными цветовыми пространствами. Таким пространством является как раз CIE XYZ. Если мы также однозначно зафиксируем (x, y, Y ) для базисных RGB-цветов, то получим абсолютное RGB-пространство. Такие стандартные пространства играют важную роль в обеспечении одинакового отображения одного и того же изображения на разных устройствах. Для корректного отображения на конкретном устройстве изображение надо перевести из абсолютного пространства в цветовое пространство для данного устройства. Для осуществления подобного преобразования программным путем информация о характеристиках устройства хранится в сопоставленном ему специальном файле. Стандарт на такие файлы был разработан ICC (англ. International Color Consortium), поэтому они получили название профилей ICC.

    Наиболее широко распространенным абсолютным RGB-пространством является модель sRGB (хорошо отражает характеристики цифровых фотокамер любительского уровня), также были созданы Adobe RGB, AdobeWide Gamut RGB и ProPhoto RGB, каждая последующая с все более широкой цветовой гаммой для представления максимальной части цветов видимого спектра. В ProPhoto RGB "базисные цвета" R, G и B ради этого даже находятся за рамками зоны видимых цветов. Для представления цветов в таком широком диапазоне рекомендуется использовать повышенную точность с 16 или более бит/канал. Все эти модели представлены на рис. 1.11.

    (рис 1.11) Диаграмма цветности CIE c цветовыми гаммами для абсолютных пространств RGB.

    Цветовые модели CIE L*u*v* и CIE L*a*b*

    У модели CIE XYZ все же есть существенный недостаток - неоднородность восприятия изменения цвета относительно расстояния на диаграмме цветности. В идеале хотелось бы, чтобы одинаковые расстояния между точками, соответствующими цветам на диаграмме цветности, соответствовали приблизительно одинаковому восприятию человеком отличий между этими парами цветов. Именно для этих целей CIE в 1976 году предложила модель L*u*v*. L* (от англ. Lightness) в этой модели соответствует яркости, скорректированной с учетом особенностей человеческого восприятия [21]. Получающаяся диаграмма цветности представлена на рис. 1.12. Эта модель рекомендуется для представления света от источников.

    Определим функцию F(s) как

    $$F(s) =\left\{ \begin{array}{cc} 7, 787s + 16/116; 0 \le s < 0, 008856 \\ s^{1/3}; s \ge 0, 008856 \\ \end{array} \right.$$

    и определим

    u' = 4X/(X + 15Y + 3Z);
    v' = 9Y/(X + 15Y + 3Z);

    Пусть точка белого имеет координаты (Xw, Yw, Zw), тогда получим следующий алгоритм преобразования:

    L* = 116F(Y/Yw) - 16;
    u* = 13L*(u' - u'w);
    v* = 13L*(v' - v'w);

    В обратную сторону:

    u' = u*/(13L*) + u'w;
    v' = v*/(13L*) + v'w;
    Y = F-1((L* + 16)/116)Yw;
    X = 9Yu'/4v';
    Z = (4X - 15v'Y - v'X)/3u';

    Также CIE в 1976 году с той же целью предложила и другую похожую модель L*a*b*, которая получила несколько более широкое распространение [21]. Эта модель рекомендуется для представления отраженного света.

    В ней используется та же функция F(s), определенная в (1.3), и L* имеет то же самое значение, что в L*u*v*.

    L* = 116F(Y/Yw) - 16;
    a* = 500[F(X/Xw) - F(Y/Yw)];
    b* = 200[F(Y/Yw) - F(Z/Zw)];
    (рис 1.12) Диаграмма цветности для CIE L*u*v*.

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

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

    C = 1 - R;
    M = 1 - G;
    Y = 1 - B;

    То есть это субтрактивная (с точки зрения стандартной модели 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;

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

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

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

    (рис 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;
         }
    }
    {
       // 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;
          }
       }
    }

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

    Цветовая модель HLS (от англ. Нue, Lightness, Saturation - тон, светлота, насыщенность) схожа с моделью HSV. Снова рассмотрим цилиндрические координаты в трехмерном евклидовом пространстве, H - угол в горизонтальной плоскость от оси Ox, S - радиус в горизонтальной плоскости (расстояние до оси Oz ), L - высота (по оси Oz ). Все цветовое пространство представляет из себя две соединенные основаниями шестигранные пирамиды (см. рис. 1.14). На рис. 1.14 для наглядности вырезан один из шести секторов.

    (рис 1.14) Цветовая модель HLS.

    Как видно на рис. 1.14, эта модель получена из HSV вытягиванием вдоль вертикальной оси. Понятия H и S остались теми же, только по вертикальной оси теперь L вместо V. Концептуальное различие состоит в том, что в этой модели считается, что движение от чистых цветов (у которых L = 0,5, S = 1 ) как в направлении белого, так и черного (а не только черного, как в HSV) одинаково приводит к уменьшению информации в H (вплоть до того, что в вершинах H не определено (как впрочем, и на всей вертикальной оси S = 0 )) и сужению диапазона S.

    Алгоритмы преобразования из RGB в HLS и обратно приведены ниже.

    {
       // H - в градусах
       maxVal = maximum(R,G,B);
       minVal = minimum(R,G,B);
       L = (maxVal + minVal) / 2;
    
       if( maxVal == minVal )
       {
          S = 0;
          H = UNDEFINED;
       }
       else
       {
       if( L <= 0.5 )
          S = (maxVal - minVal)/(maxVal + minVal);
       else
          S = (maxVal - minVal)/(2 - (maxVal + minVal));
    
       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;
       }
    }
    {
       // H - в градусах
    
       if( S == 0 )
       {
          // находимся на оси симметрии - оттенки серого
          R = L;
          G = L;
          B = L;
       }
       else
       {
          if( L <= 0.5 )
             M2 = L * (L + S);
          else
             M2 = (L + S) - L * S;
          M1 = 2 * L - M2;
    
          // x mod y возвращает остаток от деления x на y
    
          R = Value(M1,M2,(H + 120) mod 360);
          G = Value(M1,M2,H);
          B = Value(M1,M2,(H - 120) mod 360);
       }
    }
    
    // Вспомогательная функция Value
    
    Value( N1, N2, Hue )
    {
       if( Hue < 60 )
          return N1 + (N2 - N1)*Hue / 60;
       else if( Hue < 180 )
          return N2;
       else if( Hue < 240 )
          return N1 + (N2 - N1)*(240 - Hue) / 60;
       else
          return N1;
    }

    Цветовые модели Y**

    Существует несколько тесно связанных цветовых моделей, которые объединяет то, что в них используется явное разделение информации о яркости и цвете. Компонента Y соответствует одноименной компоненте в модели CIE XYZ и отвечает за яркость. Такие модели находят широкое применение в телевизионных стандартах, так как исторически необходима была совместимость с черно-белыми телевизорами, которые принимали только сигнал, соответствующий Y. Также они применяются в некоторых алгоритмах обработки и сжатия изображений и видео.

    Цветовые модели YUV, YPbPr и YCbCr

    Расcмотрим цветовую модель YUV. U и V отвечают за цветовую информацию и определяются через преобразование из RGB:

    Y  =  0,299R + 0,587G + 0,114B;
    U  =  0,492(B - Y)
       = -0,147R - 0,289G + 0,436B;
    V  =  0,877(R - Y)
       =  0,615R - 0,515G + 0,100B;

    Модель YUV применяется в телевизионной системе PAL.

    (рис 1.15) RGB-куб в пространстве YUV, диаграмма UV при Y = 0,5.

    Цветовые модели YCbCr и YPbPr являются вариациями YUV с другими весами для U и V (им соответствуют Cb/Pb и Cr/Pr ). YPbPr применяется для описания аналоговых сигналов (преимущественно в телевидении), а YCbCr - для цифровых. Для их определения используются два коэффициента: Kb и Kr. Тогда преобразование из RGB в YPbPr описывается так:

    Переход от RGB к YPbPr

    $$Y = Kr \cdot R + (1 - Kr - Kb) \cdot G + Kb \cdot B;$$ $$Pb = \frac{1}{2} \cdot \frac{1}{1-Kb} \cdot (B - Y );$$ $$Pr = \frac{1}{2} \cdot \frac{1}{1-Kr} \cdot (R - Y );$$

    Выбор Kb и Kr зависит от того, какая RGB-модель используется (это в свою очередь зависит от воспроизводящего оборудования). Обычно берется, как и выше, Kb = 0, 114 ; Kr = 0, 299. В последнее время также используют Kb = 0, 0722 ; Kr = 0, 2126, что лучше отражает характеристики современных устройств отображения.

    Из приведенных выше формул следует что при $$R,G,B \in [0, 1]$$ имеем следующие диапазоны $$Y \in [0; 1]$$ ; $$Pb, Pr \in [-0,5; 0,5]$$. Для цифрового представления эти формулы видоизменяют для получения только положительных дискретных коэффициентов в диапазонах$$Y \in [minY,maxY ], Cb,Cr \in [minC,maxC],\\ minY,maxY,minC,maxC \in \mathbb{N} \cup \{0\}:$$

    Переход от RGB к YCbCr

    $$Kg = 1 - Kr - Kb;$$ $$Y = minY + (maxY - minY ) \cdot (Kr \cdot R + Kg \cdot G + Kb \cdot B) ;$$ $$Cb = \frac{minC+maxC}{2}+ \\ \frac{maxC-minC}{2} \cdot \frac{1}{1-Kb} \cdot (-Kr \cdot R - Kg \cdot G + (1 - Kb) \cdot B) ;$$ $$Cr = \frac{minC+maxC}{2}+ \\ \frac{maxC-minC}{2} \cdot \frac{1}{1-Kr} \cdot ((1 - Kr) \cdot R - Kg \cdot G - Kb \cdot B) ;$$

    В телевидении обычно берут minY = 16, maxY = 235, minC = 16, maxC = 240. В стандарте сжатия изображений JPEG (см. раздел 14.4) используется полный 8 -битный диапазон: minY = 0, maxY = 255, minC = 0, maxC = 255.

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

    Цветовая модель YIQ применялась в телевизионной системе NTSC (I - от англ. in-phase, Q - от англ. quadrature; происходят от особенностей систем декодирования). Она тесно связана с моделью YUV, так как переход от YUV к YIQ является поворотом в плоскости UV = IQ на $$33^{\circ}$$.

    Y = 0,299R + 0,587G + 0,114B
    I = 0,735(R - Y) - 0,268(B - Y)
      = 0,596R - 0,274G + 0,321B
    Q = 0,478(R - Y) + 0,413(B - Y)
      = 0,211R - 0, 523G + 0,311B

    Обратные преобразования для всех моделей получаются в результате применения обратной матрицы преобразования.

    Вернуться к учебному плану