Что мне делать с отрицательными значениями при вычислении цветов sRGB из спектров? - Фотопедия
2 голосов
/ 03 сентября 2015

Этот вопрос с вычислительной стороны вещей. Может быть, некоторые из вас, кто занимается компьютерной фотографией, могут мне помочь.

Если у меня есть нормализованный вектор CIE XYZ tristimulus, как этот:

(x, y, z)  =  (0.2, 0.7, 0.1)

и я следую процессу деривации sRGB, как в википедии , спецификации w3 , или прямо здесь photo.SE , я получаю следующее значение для предварительная гамма-коррекция r:

r = 3.2406 * x   - 1.5372 * y   - 0.4986 * z
  = 3.2406 * 0.2 - 1.5372 * 0.7 - 0.4986 * 0.1
  = -0.47778

Поскольку это значение меньше 0,0031308, масштабируйте его на 12,92, чтобы получить окончательное значение R с гамма-коррекцией:

R = 12.92 * r
  = 12.92 * -0.47778
  = -6.173

Теперь в википедии говорится об этом окончательном значении с гамма-коррекцией, а соответствующие значения G и B здесь не показаны

Эти значения с гамма-коррекцией находятся в диапазоне от 0 до 1. Если требуются значения в диапазоне от 0 до 255, например, для отображения видео или 8-битной графики обычным методом является умножение на 255 и округление до целого числа.

-6.173 определенно не в диапазоне от 0 до 1. Я что-то не так делаю? Если нет, что мне делать с таким значением?

Ответы [ 2 ]

2 голосов
/ 04 сентября 2015

Вы не обрезаете промежуточные значения RGB.

Из статьи sRGB Wikipedia , на которую вы ссылались,

Промежуточные параметры R, G и B для цветов в гамме определены в диапазоне [0,1], ... Линейные значения RGB обычно ограничиваются этим диапазоном дисплей белого цвета представлен как (1,1,1)

Из спецификации W3C sRGB , с которой вы связаны,

... XYZ нормированы так, что Y = 1 для эталонного белого и значений RGB снаружи 0-1 обрезаются .

Обратите внимание, что ваши значения (x, y) примерно полярны, противоположны красному, в зеленой области в верхнем левом углу диаграммы цветности цветового пространства CIE. По сути, вы «так далеко от красного», это почти как «отрицательный красный». Обрезать значение R: в sRGB ваш красный будет решительно равен нулю.

0 голосов
/ 04 сентября 2015

-6.173 определенно не в диапазоне от 0 до 1. Я что-то не так делаю? Если нет, что мне делать с таким значением?

Значения, выходящие за пределы диапазона 0..1, являются значениями, выходящими за пределы целевого цветового пространства sRGB, т. Е. SRGB не может их описать. Таким образом, хотя -6.173 кажется огромным значением для канавы, его нужно обрезать до нуля. Если я вычисляю это правильно, результирующее значение RGB после отсечения будет 0, 1, 0 (0, 255, 0).

...