(论文)[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
2
3
4
5
6
7
8
vec3 ACESFilm(vec3 x){
float a = 2.51f;
float b = 0.03f;
float c = 2.43f;
float d = 0.59f;
float e = 0.14f;
return saturate((x*(a*x+b))/(x*(c*x+d)+e));
}
  • 计算 \(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}}\)

\[ 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
2
3
HOST_DEVICE_FOR_CUDA static inline float linearRGBToLuminance(color3 linearRGB) {
return 0.2126f * linearRGB.r + 0.7152f * linearRGB.g + 0.0722f * linearRGB.b;
}

Error

  • Computing and Visualizing the Error
  • 现在有了 \(c_{\text{start}}\)\(c_{\text{stop}}\),生成 \(N\) 组曝光度的 LDR 图片(均匀间隔的曝光度)
    • LDR 生成
      • exposure compensation
      • tone mapping
      • clamp 到 \([0,1]\)

\[ 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:区别是没有把最小值映射为黑色