我正在阅读 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)在“3.1 初始亮度映射”部分。这不是最终的转变。 “3.2 自动闪避”一节是burn
变量的由来;燃烧时 > 1,躲避时 < 1。没有阅读代码,我会假设 pre_scale
和 post_scale
并将它们的内部任意亮度值转换为实际颜色空间。
关于algorithm - Reinhard 色调映射 2002,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13629836/