我正在阅读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))
“[If] 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;
拜托,有谁可以向我解释如何推导出这样的算法?我认为这是基于论文,但我不知道如何......
答案 0 :(得分:1)
在该论文中,等式(4)在“3.1初始亮度映射”部分中。这不是最后的转变。 “3.2自动躲避和燃烧”一节是burn
变量的起源;它将是> 1用于燃烧和< 1躲避。没有阅读代码,我假设pre_scale
和post_scale
并将其内部任意亮度值转换为实际色彩空间。