1

我正在阅读 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;

请问,谁能向我解释如何推导出这样的算法?我认为它是基于论文的,但我不明白如何......

4

1 回答 1

1

在该论文中,等式(4)在“3.1初始亮度映射”部分中。这不是最终的转变。“3.2 自动闪避”小节是burn变量的由来;燃烧时> 1,闪避< 1。在没有阅读代码的情况下,我假设pre_scale并将post_scale它们的内部任意亮度值转换为实际的色彩空间。

于 2012-11-29T16:20:26.647 回答