(论文)[2021-EG-ShortPaper] Visualizing Errors in Rendered High Dynamic Range Images
HDR-FLIP
- Visualizing Errors in Rendered High Dynamic Range Images
- 为了方便,下文都直接用 FLIP 代替 ꟻLIP
- Pontus Andersson, NVIDIA
- 项目主页
- 代码
Introduction
- 输入 HDR 没有负值,输出 error map
HDR- FLIP
- 只是使用 LDR 图片计算 error,我们没法准确评估两张图片之间的区别
- 在不同的 exposure compensation(曝光补偿)之下,输出的 error map 相差挺大的
- 不同曝光补偿体现了不同亮度部分的 error
- 计算一组 exposures 的图片,分别计算他们的 FLIP,然后再综合这些 error
map
- 考虑 exposure compensation 以及 tone mapping
Exposures
- Computing Start and Stop Exposures
- \(c_{\text{start}}\),\(c_{\text{stop}}\)
- Exposure compensation
\[ T(I)=2^cI \]
- tone mapper functions,很多都是有理多项式
- 输入 HDR,输出 LDR
\[ y(x)=\dfrac{k_0x^2+k_1x+k_2}{k_3x^2+k_4x+k_5} \]
- 本文使用的是 ACES(用其他的也 ok)
1 | vec3 ACESFilm(vec3 x){ |
- 计算 \(c_{\text{start}}\),\(c_{\text{stop}}\)
- LDR 记作 \(t\),得到二阶方程
\[ (tk_3-k_0)x^2+(tk_4-k_1)x+tk_5-k_2=0 \]
- \(x\ge0\Rightarrow y\ge0\),\(y(x)\) 在 \([0,\infty)\) 单调递增
- 画图可知,一定有一个负零点(\(\le0\),\(k_2=0\) 时,\(y(0)=0\) 比较特殊)
- \(y(0)=0\) 或者 \(y(0)>0\) 分类
- 取其正零点 \(x_{\text{p}}\)
- 画图可知,一定有一个负零点(\(\le0\),\(k_2=0\) 时,\(y(0)=0\) 比较特殊)
\[ x_{\text{p}}=2^cI\Rightarrow c=\log_2(x_{\text{p}}/I) \]
- 根据上面两个式子计算
- \(c_{\text{start}}\):\(t=0.85,I=Y_{\max}\)
- \(c_{\text{stop}}\):\(t=0.85,I=Y_{\text{med}}\)
1 | HOST_DEVICE_FOR_CUDA static inline float linearRGBToLuminance(color3 linearRGB) { |
Error
- Computing and Visualizing the Error
- 现在有了 \(c_{\text{start}}\)、\(c_{\text{stop}}\),生成 \(N\) 组曝光度的 LDR 图片(均匀间隔的曝光度)
- LDR 生成
- exposure compensation
- tone mapping
- clamp 到 \([0,1]\)
- LDR 生成
\[ N=\max(2,\lceil{c_{\text{stop}}-c_{\text{start}}}\rceil) \]
- 最终的 error 定义为:不同曝光度下 error 的最大值
\[ E(x,y)=\max_{c\in C}\Delta E(x,y,c) \]
- 可视化:“false coloring” (also called “pseudocolor” or “color map”)
- 要求:zero error should map to black, and high errors should look “hot”
- magma color map
- viridis map:区别是没有把最小值映射为黑色