莱因哈德色调映射2002

时间:2012-11-29 16:07:18

标签: algorithm graphics rendering hdrimages

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

拜托,有谁可以向我解释如何推导出这样的算法?我认为这是基于论文,但我不知道如何......

1 个答案:

答案 0 :(得分:1)

在该论文中,等式(4)在“3.1初始亮度映射”部分中。这不是最后的转变。 “3.2自动躲避和燃烧”一节是burn变量的起源;它将是> 1用于燃烧和< 1躲避。没有阅读代码,我假设pre_scalepost_scale并将其内部任意亮度值转换为实际色彩空间。