:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте ::
Путь: Графика » Перевод цветов из режима RGB в HSV
На правах рекламы
https://market.lardi-trans.com/catalog/tractor_cabin
  Перевод цветов из режима RGB в HSV



Взято из книги Д. Роджерс
"Алгоритмические основы машинной графики"

Смит предложил построить модель субъективного восприятия в виде объемного тела HSV (цветовой тон, насыщенность, светлота).

Hасыщенность меняется от 0 до 1. Отметим, что насыщенность зависит от цветового охвата те от расстояния от оси до границы для каждого V. При S=1 цвета или их дополнения полностью насыщенны. Hенулевая линейная комбинация 3 основных цветов не может быть полностью насыщенна. Если S=0, то тон H неопределен, те на центральной оси находятся ахроматические, серые цвета.

Модель HSV соотвествует тому, как составляют цвета художники. Чистым пигментам отвечают значения S=1, V=1; разбелам - цвета с увеличенным содержанием белого, те с меньшим S; оттенкам - цвета с уменьшенным V, к-рые получаются при добавлении черного. Тон изменяется при уменьшении как V так и S.

Преобразование из цветового пространства RGB->HSV проводиться по данному ниже алгоритму, также взятому у Смита:

  RGB - остновные цвета (0-1),
  H - цветовой тон (0-360ш), 0ш - красный
  S - насыщенность (0-1)
  V - светлота (0-1)

  MAX - функция определения максимума
  MIN - функция определения минимума

   /Определение светлоты/

   V=MAX(R, G, B)

   /Определение насыщенности/

   TEMP=MIN(R, G, B)
   if V=0 then S=0 else S=(V-TEMP)/V end if

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

   if S=0 then

    H=Hеопределенность

   else

    Cr=(V-R)/(V-TEMP)
    Cg=(V-G)/(V-TEMP)
    Cb=(V-B)/(V-TEMP)

    /Цвет между желтым и пурпурным/

    if R=V then H=Cb-Cg

    /Цвет между голубым и желтым/

    if G=V then H=2+Gr-Cb

    /Цвет между пурпурным и голубым/

    if B=V then H=4+Cg-Cr
    H=H*60

    /Приведение к положительным величинам/

    if H<0 then H=H+360 end if

  finish