27. HDR - 高动态范围成像

27. HDR - 高动态范围成像

本文同步发表在我的微信公众号“计算摄影学”,欢迎扫码关注

【转载请注明来源和作者】

如果你有关注目前各大手机厂商对手机拍照能力的宣传词,经常会留意到HDR、高动态范围等关键字。而著名的相机评测网站DXOMark在评测手机拍照能力时也特别重视对高动态范围的评测:

华为 P30 Pro 前置摄像头评测(引自DXOMark官网)

那么什么是动态范围,什么是高动态范围,高动态范围成像是如何进行的呢?今天通过这篇文章给大家做一些基本的介绍。

一、动态范围

动态范围(英语:dynamic range)是可变化信号(例如声音或光)最大值和最小值的比值。(百度百科)。

在图像领域,动态范围则是指图像能捕捉的场景中的光亮度的范围。这里要介绍一个物理量发光强度:发光强度简称光强,国际单位是candela(坎德拉),简写cd。1cd是指频率为 540\times10^{12} HZ的单色光源,在给定方向上的单位立体角发出的光通量。

光亮度是表示发光面明亮程度的,指发光表面在指定方向的发光强度与垂直且指定方向的发光面的面积之比,单位是坎德拉/平方米。我们自然界中各种场景的光亮度变化是非常大的,这里有一些自然场景的最大光亮度比较:

典型的自然场景中,最大亮度和最小亮度的比值可以高达10000:1。但我们人类的视觉系统却有个很神奇的能力,即它可以自动调整,适应非常宽广的亮度变化范围

人类视觉系统可以覆盖常见的自然场景的动态范围

然而,我们通过数码相机所成的图像却通常只有很有限的动态范围。这里有一个有趣的例子:你知道下面这张图里面纯黑和纯白部分的光亮度比值吗?

如果我们看像素值,那当然是255/0=∞, 但事实上从发光亮度上来比较,一般来说却只有50倍的差异!

事实上不管是在高亮度情况下还是在低亮度情况下,数码相机成像的动态范围都只是典型自然场景的动态范围的很小一部分:

数码相片在低光下的动态范围
数码相片在高光下的动态范围

如果我们回顾相机内的成像流程,你可能会认为是一系列的相机内部处理导致了动态范围的缩小

但事实上,图像传感器本身从物理特性上来讲,也只有有限的动态范围(当然通常比最终所成像要大)

我们可以看看常见事物的对比度与典型真实场景的对比度差异有多大:

因此要想尽可能还原真实的世界,就需要能够捕捉更大的动态范围。这就是高动态范围成像的意义。那么如何进行高动态范围成像呢?目前广泛使用的一种方法是通过多重曝光的图像合成,来生成高动态范围的图像。接下来就仔细分析下这种方法。

二、多重曝光高动态范围成像

多重曝光高动态范围成像的核心思想非常简单,即拍摄同一场景不同曝光度下的多张照片并将它们合理的融合起来:

我们知道曝光越强,图像越亮。 数码相机上有多种改变曝光强度的方法:

现在手机上一般是对不同的曝光ev值,调整不同的曝光时间和ISO值。在室外亮度下一般是主要调整曝光时间,而室内较低亮度下两者都会动态调整。

那么如何把多张照片混合在一起呢? 这首先取决于我们使用的是RAW格式图像,还是非线性化后的RGB图像。

2.1 多张RAW图像混合生成HDR图像

正如我们之前所学到的,RAW格式图像没有经过系统的各种非线性处理,因此其像素值与场景的辐照度是呈线性关系的

RAW格式图像像素值和辐照度呈线性关系

我们可以把线性图像的像素值和场景的辐照度表述为:

I_{linear}(x,y) = clip[ t_i ⋅ L(x,y) + noise ]

这里假设是通过改变曝光时间从而改变了图像的像素值,其中L是场景的辐照度, ti是第i帧的曝光时间。我们现在的目的是要通过已知的 I_{linear} (x, y),来恢复L, 典型的方法如下:

这里面我们用了一个简单的方法来寻找有效的像素值,即认为有效的像素值范围是(0.05,0.95),而值过大和过小的像素都不合法,原因是因为过大和过小的像素值不满足线性原则,意味着过曝和曝光不足:

我们看到,对同一场景,有点地方亮度过高曝光过度,变成了纯白色,而有的地方则又亮度过低曝光不足,出现了很多噪声,所以上面公式中利用clip和noise对tL值作出一些约束。

另外上面的权重值非常简单,是(pixel value)/ti, 事实上还有很多不同策略的权重分配方法,后面还会提到更多。

2.2 多张RGB图像混合生成HDR图像

RGB图像由于经过了系统的非线性处理(例如tone reproduction等),因此其像素值与场景的辐照度之间不再是线性关系:

RGB图像像素值和辐照度呈非线性关系

此时要生成HDR图像需要比之前多两个步骤:

我们来描述下如何获取响应曲线:

设图像k的RGB像素值I和场景辐照度之间的关系用函数f来描述:

那么我们的目的是想获取 f^{-1} 。 由于人眼的敏感度函数其实接近对数函数,所以实际上我们可以通过恢复g := log( f^{-1} )达到同样的目的,这里

等号两边取对数,则有

定义 g=ln(f^{-1}) , 那么有:

这里面由于非线性图像有256中可能的像素值,所以g实际上是一个256维的向量(或查找表),Δtj是第j张图像的曝光时间。

我们目前已知的量是Z和t, 未知的量是E和g。 为了求出g, 我们可以在固定的场景,对着同一物体拍摄多张照片,这样就多了一个约束条件,即在多次拍摄时,场景的辐照度E是不变的。如果再加上假设g是一个单调递增函数(辐照度越强,图像亮度值越大),且g是平滑的,那么我们可以通过下式求出未知量:

这是一个典型的线性最小二乘问题,其中:

这里面,N是选取的像素点的个数,P是图像的数量,Zmin和Zmax是有效的像素值范围,实际中为了求取,我们还会加入一个约束条件g(Zmid)=0, 其中Zmid=(Zmin+Zmax)/2。于是可以把问题转换为一个最小二乘问题:

一旦我们求到了g,就可以很方便的将非线性图像用以下公式进行转换:

我们刚才提过有多种获取权重的方式,下面是一些典型的权重计算方法:

其中一般来说Zmin取0.01,Zmax取0.99,实际工程项目中可以做必要的调整,在使用上面这些式子时,首先需要将图像像素值归一化到0到1之间。

参考论文[1]中给出了一个通过非线性图像恢复响应函数g的例子:

通过上图恢复的DCS460的响应曲线

2.3 加权融合

不管是用RAW图像,还是使用非线性的RGB图像,最后一步都是加权融合生成HDR图像。那么如何进行加权融合呢?这里面有两种基本方法:线性加权和对数加权

线性加权公式如下:

非线性加权公式如下:

由于对数加权考虑到了人眼的感知特性,因此一般来说其效果更优一些。

三、色调映射

3.1 基本映射

第二节解决了如何进行HDR成像的问题,我们已经把图像用一个值域很宽广的矩阵来表示了。参考论文[1]特意用一个例图说明了值域的宽广:

这里面可以看到,在HDR图像中几个用方框标注的像素点的最大值和最小值比例超过了15000:1。

但是我们通常的显示设备(比如你的LCD显示器)只是8位的,其动态范围非常有限

因此我们需要把HDR图像的值压缩到有限的范围——这个过程就叫做色调映射(tonemapping)

如果你采用最基础的线性映射,即把HDR图像的最大值映射为1,那么你将得到非常糟糕的图像,此时图像显得非常暗,这是因为人眼对暗光更加敏感。

更好的映射方法(这里称作photographic tonemapping)必须考虑到这个因素,例如这种方式:

我们可以比较下photographic tonemapping和linear tonemapping(这里为了让linear tonemapping不显得太暗,我们把>0.1Zmax的像素都映射为1)的结果,很明显还是photographic tonemapping的效果更好

再来看看和低动态范围的LDR图像的比较(下面左图是HDR图像色调映射后的结果,右边两张是不同曝光值的LDR图像),可见HDR图像确实扩宽了整个画面的动态范围

左:HDR图像 中/右:LDR图像

3.2 处理颜色

如果我们对3个颜色通道做同样的tonemapping,那么最终图像的颜色相比原来的LDR图像会显得没有那么鲜艳

论文[2]提出了将图像转换到新的颜色空间,从而仅仅对亮度通道做色调映射,而颜色通道则只是用亮度通道的变化比例来做简单压缩的方法:

相比起前面的方法,我们这里确实得到了更加饱和的颜色:

如果你仔细观察,还会发现右图由于色调映射的原因丢失了一些细节。有一种方法是只对图像亮度通道的低频信息做色调映射,而对高频信息,以及颜色通道,则用上面提到的变化比例来做调整的方法:

注意看图像下面的建筑物,确实更多的细节凸显出来了。但树顶却出现了光晕现象,这是由于在拆分图像的高频区域和低配区域时所用的低通滤波器(一般是高斯滤波)将图像的不同亮度的区域加权混合在一起的原因,于是论文[2]提出了利用快速双边滤波器来分离图像的高频和低频信息的方法:

对比下普通的滤波器和快速双边滤波器分离高低频信号的效果,可以看到由于双边滤波器的保边效应,光晕现象确实没有了:


把刚才提到的几种tonemapping方法的效果连在一起看一看:

  • 左上:三个通道做同等的色调映射
  • 右上:亮度通道做色调映射,颜色通道做基本的比例变换
  • 左下:低频信息做色调映射,高频信息和颜色通道做基本的比例变换
  • 右下:利用保边滤波器分离高低频信号

论文[3]还提出了一种在梯度域进行色调映射的方法,它依然在亮度通道做色调映射,其步骤思想是先求取HDR图像的梯度,并压缩梯度的幅值,再重建图像。这个方法能得到更好的效果,当然好与坏是主观感受,你可以比较下几种方法的效果,看看你更喜欢哪一种:

四、总结

本文讨论了什么是动态范围,什么是高动态范围图像,还介绍了基本的HDR成像方法即多重曝光HDR成像,特别花了一些篇幅介绍了如何从非线性的RGB图像生成HDR图像的方法,最后介绍了集中色调映射的方法,并做了比较。

HDR成像方法在正确使用时可以得到非常震撼的效果:

但是不正确的使用,特别是不正确的进行色调映射,则会得到非常夸张和不自然的效果,例如下面这几个例子,这也是为什么DXOMark这样的组织将HDR作为相机的一个重要评价维度的原因。

五、参考文献

  1. Debevec and Malik, “Recovering High Dynamic Range Radiance Maps from Photographs,” SIGGRAPH 1997.
  2. Durand and Dorsey, “Fast bilateral filtering for the display of high-dynamic-range images,” SIGGRAPH 2002.
  3. Fattal et al., “Gradient Domain High Dynamic Range Compression,” SIGGRAPH 2002
  4. dxomark.com/cn/huawei-p
  5. CMU 2017 Fall Computational Photography Course 15-463, Lecture 12

希望这篇文章能够给你带来启发,别忘了给我点赞哦^_^

编辑于 2019-11-22 19:06