algorithm - Reinhard 色调映射 2002

标签 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))

[如果]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_scalepost_scale 并将它们的内部任意亮度值转换为实际颜色空间。

关于algorithm - Reinhard 色调映射 2002,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13629836/

相关文章:

c# - 线程池为什么要这样管理线程呢?

c - 使用 Cairo 和 C 旋转和合成 PNG 文件

c - 在 c-> 无限循环中用中点算法填充绘制的圆?

algorithm - 哈希表 : Why deletion is difficult in open addressing scheme

javascript - 使用 Javascript 和 HTML Canvas 创建类似于 Photoshop 的颜色选择器

android - 安卓游戏的 Sprite 和动画制作工具

c++ - 写入 gl_FragDepth,同时仍然执行深度预测试

android - 无法解析资源 @style/Widget.Holo.Light.ActionMode.Inverse

algorithm - 是否有任何算法可以使真实照片更像假照片?

c++ - 所有可能的游戏分数的总和