我正在阅读 Erik Reinhard 等人的论文。被称为“数字图像的摄影色调再现”,它也在这里:
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#l3.77
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;
请问,谁能向我解释如何推导出这样的算法?我认为它是基于论文的,但我不明白如何......