Re[15]: Восприятие цвета
От: McSeem2 США http://www.antigrain.com
Дата: 20.10.05 13:38
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Тут я не очень понимаю что значит "перцептуальной линейности" , если постоянной яркости , тогда в YUV или LAB или еще что то , там линейно , потом обратно в RGB и применяем гамма корекцию к монитору.


M>Опять не согласен СОВСЕМ. только так — перевод в ленейное представление — операции — перевод опять в гама скоректированное


"Гамма-скорректированное" — это и есть перцептуально линейное (естественно с оговоркой — приблизительно). Это то, что мы пишем в битмап, а потом вызываем BitBlt. Там визуальная яркость прямо пропорциональна длине вектора RGB и расстояние между цветами расчитывется в Евклидовой метрике.
То, что ты называешь "линейным" — это физически линейное, когда интенсивность излучения прямо пропорциональна значению (опять же, с оговоркой — приблизительно, там все приблизительно). Очевидно, что в этом случае используется метрика Манхеттена (r+g+b), поскольку интенсивности излучения каналов складываются (каждый со своим коэффициентом, но это не важно).

Воспринимаемая (перцептуальная) яркость в первом приближении пропорциональна корню квадратному от интенсивности излучения (две одинаковые фары воспринимаются примерно в sqrt(2) раз ярче, чем одна).
Но при этом, ЭЛТ дает интенсивность излучения (физическую) примерно пропорциональную квадрату напряжения на модуляторе и соответственно, значению в RGB. Грубо говоря, эти две зависимости компенсируются (не совсем, конечно же) и таким образом, мы уже имеем перцептуально линейное представление, не делая ничего. Пиксел RGB(127,127,127) дает примерно вчетверо меньше света, чем RGB(255,255,255), но глазами он воспронимается примерно вдвое темнее.
Более того, перцептуально линейное представление — это все, что у нас есть, и цвета представлены там наиболее компактно — 8 бит на канал вполне достаточно.

Гамма 2.2 — это функция преобразования из перцептуально линейного пространства в физически линейное и обратно. Эта гамма учитывает все — и нелинейность восприятия и нелинейность монитора. Линейная интерполяция цветов должна выполняться именно в физически линейном пространстве, после чего накладывается гамма для преобразования в перцептуально линейное. Здесь мы имеем дело с чистой геометрией.

Почему бы в видеокарте не настроить функцию преобразования, так, чтобы мы всегда работали в физически линейном пространстве и не заморачивались преобразованиями? По одной единственной причине — в физически линейном пространстве восьми бит на канал — мало. Надо 12-14. И соответственно, надо иметь в виду, что для работы без потерь, нам картинку (например, из PNG) надо переводить в 16 бит на канал и работать с ними. А потом опять преобразовывать в 8. RGB24 в физически линейном представлении — это примерно как RGB555 в перцептуально линейном. В каких-то задачах это не так уж и важно. В других — очень важно.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.