Как преобразовать HSL (оттенок, насыщенность, яркость) в HSLum (оттенок, насыщенность, яркость) и HSLum/RGB?
Я хочу преобразовать некоторые значения цвета из хорошо известного HSL в менее известный HSLum, как это сделать?
hsl(0, 1.0, 0.5) - rgb red is hslum(0, 1.0., 0.54)
hsl(120, 1.0, 0.5 - rgb green is hslum(0, 1.0, 0.80)
hsl(240, 1.0, 0.5) - rgb blue is hslum(0, 1.0, 0.44)
Насколько я знаю, яркость (не легкость) рассчитывается так:
Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
Я прочитал несколько статей: яркость (относительная), 21296247, HSL и HSV, яркость, легкость, Munsell, но не нашли решение?
Насколько я знаю, формула CIELab 1976 близка к Манселлу:
1.16*(Y/Ymax)^1.16*(Y/Ymax)^(1.0/3.0)-0.16 where Y/Ymax > 0.01
Или лучше интерполяция /
1.16*(Y/Ymax)^(1.0/3.0)-0.16 where Y/Ymax > (6/29)^3
1.16*(841.0/108.0)*(Y/Ymax)+(4.0/29.0)-0.16 where Y/Ymax <= (6/29)^3
Как сделать такие преобразования?
- HSL -> HSLum
- HSLum -> HSL
- HSLum -> RGB
Будут приветствоваться любые подсказки - предложения по алгоритмам.
Вот какой-то инструмент, делающий HSLum.
2 ответа
Если вы собираетесь создавать и работать с воспринимаемыми однородными цветами, вы можете использовать HSLuv, библиотеку, созданную Алексеем Борониным, которая доступна на нескольких языках программирования.
Он основан на цветовом пространстве CIELUV и реализует различные процедуры преобразования цветов, такие как rgbToHsluv, hsluvToRgb, hexToHsluv, hsluvToHex и т. Д.
Библиотека не поддерживает прямое преобразование из HSL в HSLuv, но вы можете преобразовать HSL в RGB, как описано здесь, а затем использовать rgbToHsluv.
Вы можете найти эту ссылку из часто задаваемых вопросов о гамме Чарльза Пойнтона интересной:
'22. Что такое компоненты I, B, L и V в HSI, HSB, HLS и HSV?
Чтобы соответствовать определению яркости как пропорциональной физической мощности, I-компонент HSI должен представлять величину линейного света. CIE не определил объективную меру для яркости, но это явно воспринимаемая величина. Легкость - это величина восприятия, которая была довольно точно определена CIE. В CIE не определено значение, но используются несколько различных определений, например, значение Манселла, и все они основаны на восприятии и сопоставимы с легкостью.
В большинстве формулировок HSI, HSB, HLS и HSV, используемых в компьютерной графике, величины вычисляются из первичных компонентов R, G и B, но не делается ссылка на нелинейность в первичных компонентах, то есть взаимосвязь праймериз к линейному свету. Таким образом, невозможно определить, представляет ли вычисленный HSI, HSB, HLS или HSV физическую или воспринимаемую величину.
Компонент яркости HSI, HSB, HLS и HSV должен основываться на яркости, вычисленной как правильно взвешенная сумма красного, зеленого и синего. Но в обычных формулировках компонент яркости вычисляется либо как максимум из трех компонентов, либо как среднее из минимума и максимума из трех. Этот крайне нелинейный расчет вводит спицы в круг оттенка.
Наконец, цвет, создаваемый тройкой RGB, переведенной из HSI, HSB, HLS или HSV, зависит от цветности основных цветов RGB, но ни одна из обычных формулировок HSI, HSB, HLS или HSV не учитывает первичную цветность.
По этим причинам любое использование в компьютерной графике величин I, B, L и V является подозрительным. Подробности см. В разделе " Часто задаваемые вопросы о цвете".
Я полагаю, что это означает, что во всех случаях вы должны перейти на RGB, чтобы переходить между любыми из этих формулировок, и, кроме того, эти формулировки несколько плохо определены.