Люблю шейдеры и разные задачки. Введу новый формат "рабочие заметки". Чтобы было где писать о небольших интересных задачках. Итак про Luminance или яркость.
Преобразование цвета в чб через luminance (яркость) — это техника, где мы вычисляем воспринимаемую яркость цвета, используя взвешенную сумму его RGB-компонентов.
Типичная формула в шейдерах:
float luminance = dot(color.rgb, vec3(0.299, 0.587, 0.114));Коэффициенты 0.299, 0.587, 0.114 — это не случайные числа, а научно обоснованные веса:
0.299 — вес для красного канала
0.587 — вес для зеленого канала
0.114 — вес для синего канала
Эти значения основаны на относительной воспринимаемой яркости человеческим глазом. Наш глаз наиболее чувствителен к зеленому свету, затем к красному и наименее — к синему. Коэффициенты основаны на фотометрических исследованиях человеческого зрения, проведенных в начале 20 века. Для простого наблюдателя CIE 1931 было Y = 0.17697R + 0.81240G + 0.01063B. С появлением мониторов на основе электронно лучевой трубки были получиены новые коэффициенты Y = 0.299R + 0.587G + 0.114B.
Чем это лучше обычного усреднения? Потому что усреднение как раз-таки не учитвает особенности человеческого глаза и поэтому делает восприятие яркости неестественным. Яркий зеленый будет казаться слишком темным, а темные синие цвета слишком светлыми.
Зачем это надо знать? Перевод в чб частая техника в двух ключевых задачах. Создание визуальных эффектов (особенно пост обработки) и задачах компьютерного зрения. Когда мы создаем визуальные эффекты основанные на яркости, то лучше использовать формулу яркости с весами учитывающими восприятие. Если же мы занимаемся задачами компьютерного зрения, то у камеры нет таких особенностей, у неё "объективное восприятие", поэтому для анализа лучше обычное усреднение.
Использование luminance-коэффициентов — это не просто "так принято", а физиологически и технически обоснованный подход, который дает наиболее естественное для человеческого глаза преобразование цвета в яркость.
#оработе #интересное
