добавление/смешивание цветов в HSV Space

Я пытался получить визуализацию в течение нескольких дней. Я создаю дифракционное изображение и хочу раскрасить его в зависимости от длины волны света.
Самый простой способ получить правильный цвет — использовать пространство HSV с H, изменяющимся в зависимости от длины волны, и S, V, установленным на 1,0< br> Увы, я не могу найти формулу/алгоритм/способ смешивания разных цветов в пространстве HSV.

Есть ли формула смешивания в HSV или может быть другой понятный способ?


person Nox    schedule 11.09.2011    source источник
comment
Вы можете найти этот предыдущий вопрос информативным: " title="алгоритм поиска цвета между двумя другими в цветовом пространстве окрашенного"> stackoverflow.com/questions/6130621/   -  person Mark Ransom    schedule 12.09.2011


Ответы (2)


Честно говоря, я бы преобразовал RGB, усреднил компоненты и преобразовал обратно в HSV.

Это не самый эффективный способ, но вы, вероятно, будете иметь или нуждаетесь в коде RGB‹->HSV, и вычисление RGB, вероятно, будет намного проще.

person andrewmu    schedule 12.09.2011
comment
Это больше похоже на 1. для каждой длины волны: рассчитать интенсивность для каждого пикселя. Нормировать, добавить в двойной массив (рисунок). 2. Перед записью: Нормализуйте массив изображений, масштабируйте на 255,0, преобразуйте в int 3. Наконец, сохраните в файл (сырой PPM или с небольшой доработкой PNG). Единственное, что останется, это зафиксировать каким-то образом, являются ли изображения физически правильными. - person Nox; 20.09.2011
comment
Я не совсем понимаю, хотя звучит интересно. Если вы нормализуете цвета RGB, вы будете проецировать их на некоторую искривленную область цветового пространства. Tbh для сохранения, в эти дни я просто писал необработанные байты и использовал ImageMagick в командной строке, чтобы превратить их в PNG. - person andrewmu; 20.09.2011

Один из стандартных справочников Компьютерная графика: принципы и практика, автор Foley et al. в разделе 13.3.7 «Интерполяция в цветовом пространстве» говорится следующее:

«Когда два изображения смешиваются [...], цвета могут быть довольно далекими, и подходит аддитивная модель, такая как RGB. Если, с другой стороны, цель состоит в том, чтобы интерполировать между двумя цветами фиксированного оттенка (или насыщенность) и поддерживать фиксированный оттенок (или насыщенность) для всех интерполированных цветов, тогда предпочтительнее использовать HSV или HLS. Но обратите внимание, что интерполяция с фиксированной насыщенностью в HSV или HSL не рассматривается как имеющая фиксированную насыщенность зритель [...]»

Поэтому они согласны с предложением @andrewmu, которое в целом кажется лучшим.

person user786653    schedule 12.09.2011
comment
Что делать, если вы хотите смешать более двух цветов в пространстве HSV (яркость и насыщенность установлены на 1)? Можете ли вы просто сложить цветовые векторы на цветовом круге? Если вы добавите таким образом весь цвет радуги (по всему кругу), вы должны получить белый цвет, верно? - person pkout; 02.04.2013