Рейнхард тон-карт 2002

Я читаю статью Эрика Рейнхарда и др. называется "Воспроизведение фотографического тона для цифровых изображений", это также здесь:

http://www.cs.utah.edu/~reinhard/cdrom/

Вот это уравнение № 4:

Ld(x,y) = L(x,y)(1 + L(x,y)/L_white^2) / (1 + L(x,y))

"[Если] значение L_white установлено на максимальную яркость в сцене L_max..."

Существует также исходный код авторов и различных реализаций онлайн.

У меня вопрос, есть один вариант формулы выше, который я не могу понять, как и из чего она была получена. Посмотрите, например, на исходный код Luxrender:

http://src.luxrender.net/lux/rev/f48943145d29

scale[i] = ( post_scale * (1.0f + lum*recip_Y_white2) / (1.0f + lum) ); //* maxDisplayY;

Появились новые переменные "pre_scale", "post_scale" и "burn", которые в статье не упоминаются. Они также вычисляют L_white (= Y_white) очень по-разному:

const float Y_white = pre_scale * alpha * burn;

Пожалуйста, кто-нибудь может объяснить мне, как получить такой алгоритм? Я предполагаю, что это основано на бумаге, но я не понимаю, как...

1 ответ

В этой статье уравнение (4) находится в разделе "3.1 Начальное отображение яркости". Это не окончательное преобразование. Раздел "3.2 Автоматическое уворачивание" является источником burn переменная; это будет> 1 для горения и < 1 для уклонения. Не прочитав код, я бы предположил, что pre_scale а также post_scale и преобразование их внутренних произвольных значений яркости в фактическое цветовое пространство.

Другие вопросы по тегам