Яркость HSL против чувствительности глаз

Способен ли человеческий глаз в монохроматическом спектре различать светлые цвета точно так же, как и более темные? Я имею в виду, действительно ли существует линейная зависимость между свойством Lightness в цветовой модели HSL и воспринимаемой яркостью?

Я не уверен, что это действительно лучший сайт SE для этого вопроса; в моем ответе ниже, по крайней мере, очень мало биологии. Там нет «обмена стеками колориметрии», но я думаю, что это будет по теме, например, в графическом дизайне . Увы, у них нет MathJax... может , физика подошла бы лучше? Или психология и неврология ?

Ответы (1)

Нет, ось L в цветовом пространстве HSL на самом деле не соответствует яркости , воспринимаемой человеческим глазом, за исключением самого грубого смысла, что для заданных значений компонентов H и S увеличение L приводит к увеличению воспринимаемой яркости. .

Компонент L стандартного цветового пространства HSL просто вычисляется как среднее значение самого низкого и самого высокого компонента RGB цвета (в зависимости от используемого цветового пространства RGB ):

л знак равно мин ( р , грамм , Б ) + Максимум ( р , грамм , Б ) 2

Одно только это определение должно сделать очевидным, что значение L не может соответствовать воспринимаемой яркости, поскольку оно полностью игнорирует средний из трех каналов RGB. Таким образом, цвет ( R =0, G =0, B =1), т.е. чистый б л ты е , имеет точно такое же значение L (0,5), что и цвет ( R =0, G =1, B =1), т.е. с у а н , но с первого взгляда видно, что последний цвет визуально намного ярче.

Действительно, цветовое пространство HSL даже не пытается соответствовать воспринимаемой яркости цветов; скорее, определение L - канала выбрано потому, что оно имеет удобную функцию, заключающуюся в том, что оно отображает черный цвет в L = 0, белый — в L = 1 и все шесть максимально насыщенных чистых цветов RGB (красный, желтый, зеленый, голубой, синий). и пурпурный), несмотря на их большие различия в восприятии светлоты, до L = 0,5.


Гораздо лучшим приближением к воспринимаемой яркости цвета является яркость Y ', которая определяется как средневзвешенное значение каналов RGB. Точные веса зависят от определения и используемого цветового пространства RGB, но общий выбор (из Рекомендации МСЭ-R 709 ) таков:

Д знак равно 0,2126 р + 0,7152 грамм + 0,0722 Б

Веса выбраны для учета различной воспринимаемой легкости различных основных цветов RGB. Поразительной особенностью является то, что только на зеленый компонент приходится более 70% яркости, что почти в десять раз больше, чем на синий компонент. Но визуальное сравнение 100 %   б л ты е с 100 %   грамм р е е н действительно ясно подтверждает, что этот выбор весов оправдан: чистый зеленый кажется намного ярче синего и почти таким же ярким, как голубой (который является их суммой) выше.


Однако определение яркости по-прежнему игнорирует нелинейность как стандартных цветовых пространств RGB (таких как sRGB ), так и человеческого глаза. Хотя эти два эффекта частично компенсируют друг друга, позволяя использовать яркость в качестве разумного приближения к воспринимаемой яркости, для получения действительно точных результатов их необходимо учитывать. Это включает в себя несколько шагов:

  1. Преобразуйте цвет RGB в линейное цветовое пространство. Для sRGB можно использовать следующую формулу : р л знак равно ф ( р ) , грамм л знак равно ф ( грамм ) , Б л знак равно ф ( Б ) , куда:

    ф ( С ) знак равно { С / 12,92 если  0 С 0,04045 ( ( С + 0,055 ) / 1,055 ) 2,4 если  0,04045 < С 1
    (Здесь, р , грамм а также Б — значения компонента sRGB, а р л , грамм л а также Б л линейные, оба масштабированные в диапазоне от 0,0 до 1,0.) В качестве альтернативы, очень близкое приближение к приведенной выше формуле дается простым гамма-расширением с γ знак равно 2.2 : ф ( С ) знак равно С 2.2 .

  2. Рассчитайте относительную яркость как средневзвешенное значение линейного компонента RGB:

    Д знак равно 0,2126 р л + 0,7152 грамм л + 0,0722 Б л
    (Веса точно такие же, как и для приведенной выше формулы яркости, потому что они берутся оттуда; расчет яркости просто слепо применяет их к гамма-сжатым значениям RGB.)

  3. Преобразуйте значение относительной яркости в приближенное значение воспринимаемой яркости, используя что-то вроде формулы CIELAB : * знак равно 1,16 грамм ( Д ) 0,16 , куда:

    грамм ( Д ) знак равно { 1 3 ( 29 6 ) 2 Д + 4 29 если  0 Д ( 6 29 ) 3 Д 1 / 3 в противном случае
    (Примечание: в стандарте CIELAB л * значение находится в диапазоне от 0 до 100, но ради согласованности в приведенной выше формуле я решил определить * знак равно л * / 100 , так что его диапазон также составляет от 0 до 1.)