旷视CV Master计算摄影学训练营课程笔记2

Aug 13,2021   3073 words   11 min


本篇博客对应旷视CV Master训练营《计算摄影学》专题第二次课,课程视频可以点此查看。笔记在课程内容的基础上加入了一些自己的理解,不一定完全正确,欢迎互相交流。本次课程的主要内容是HDR:概念、融合与渲染。

1.什么是HDR

至少稍微对拍照有些了解的同学对于HDR肯定不陌生。不管是手机还是相机,HDR都是必备的功能之一。HDR是High-Dynamic Range高动态范围的缩写。HDR一个最直接的应用场景就是拍逆光。没开HDR的时候,逆光人像一片黑,开了HDR以后,人脸就可以看清了。或者用HDR来拍夜景,从而提升细节程度。

在正式课程开始之前,首先看下面这张图,是一张夜景影像。可以看到一些较亮的地方全部变“白”了。 如果我们开启HDR以后,原本一些较亮的部分就没那么亮了,同时出现了更多的细节。

(1)什么是动态范围

首先给出动态范围的概念,所谓动态范围,其是指可变化信号(例如声音或光)最大值和最小值的比值。比如某个影像的灰度范围在100到200,那么它的动态范围就是200/100=2;而如果另一张影像的灰度范围是50到150,它的动态范围是150/50=3。这里有一个需要注意的地方就是动态范围的数值不仅仅与最大最小值有关,还与最大最小值的绝对大小有关。比如上面的例子中,虽然最大最小值的差异都是100,但是按照动态范围的定义计算,数值就不同了。我们可以用数学来表示,比如某个影像的最小值为\(x\),最大值为\(x+r\),那么依据动态范围的定义,其计算公式应该为:

\[R_{d}=\frac{x+r}{x}=1+\frac{r}{x}\]

如果我们把\(r\)看做是一个常数,那么就可以很容易画出它的函数曲线。我们设置不同的\(r\),使用Matlab可以画出动态范围数值\(R_{d}\)随灰度级数变化的图像。 可以看到,在最大最小值差异\(r\)一定的情况下,最小值越小,计算出的动态范围\(R_{d}\)越大。而在最小值固定的情况下,最大最小值差异\(r\)越大,计算出的动态范围\(R_{d}\)越大。

其实作为我们学测绘遥感的,一定对量程这个概念不陌生。量程是度量工具的测量范围。其值由度量工具的最小测量值和最大测量值决定。我们可以用最大最小值之差来表示量程。它和上面说的动态范围有一定的相似之处,但也有不同。相似之处在于,都是表示范围概念。不同之处在于,量程一般是和传感器硬件绑定的。虽然没有“静态范围”的概念,但是我们可以类比进行理解。量程就是一种“静态范围”,它是传感器固有属性,不会随着不同数据的输入而产生变化,所以我们叫它“静态”的。而 动态范围则是与传入数据息息相关的,不同传入的数据会对应不同的范围,所以我们叫它“动态”的。举个例子,比如说传感器是8bit的相机,那么它的灰度量程就是0到255,这是不会随着你拍不同的场景而改变的。但是动态范围不同,如果你拍一个暗场景,那么该图像灰度的动态范围可能是0到100,而如果你拍了个亮的场景,可能就变成150到240了。量程和动态范围没有必然关系,动态范围衡量的是输入信号的最大最小值,量程衡量的是传感器所能接收信号的最大最小值。如果硬要说关系的话,那就是,当输入信号的最大最小值恰好等于量程的最大最小值时,信号的动态范围和传感器量程相等。

最后,还需要注意的一个概念是分辨率。这个其实也是和传感器绑定的,可以看作是硬件参数之一。分辨率顾名思义就是传感器能够分辨的两个最小观测值之间的差异。比如说,我们某个相机的灰度量程是0到255,第一个相机灰度分辨率是1,那么在这个量程中,一共可观测的个数为256个(级)灰度。而另一个相机,灰度分辨率是0.5,那么一共可以观测到512个(级)灰度。所以可以看到,动态范围也不是可观测到的量化级数。不管你可以观测到512还是256个级别,只要你的最小最大值是一样的,那么它们对应的动态范围就是一样的。而比如说,像上面图中,我们一个是0到255,一个是0到4095,那么显然,下面的动态范围要更高。

(2)高动态范围

通过上面的介绍,简单了解了动态范围的概念。所以当你以后再遇到高动态范围这个概念的时候,你就应该知道这个图像或者场景中,最大亮度和最小亮度的差异非常大。所以,高动态范围图像,顾名思义就是要让图像的动态范围尽可能的高,这样对比度才更强、更好看。 在自然界中,高动态范围也是随处可见的,如下图所示。 可能从零点几lux到上万lux。或者在日常生活中,不同光源的对比也是十分明显的。 而实际我们的相机传感器量程基本是达不到这么高的范围的,所以有时我们需要根据一些准则事先估计一个场景的亮度(lux)。 那么传感器的动态范围一般是多少呢? 动态范围可以通过专业的灯箱设备测量。 如何提高动态范围,从软件层面来说就是设计不同的算法。 下图展示了曝光对于动态范围的影响。 通过调整相机传感器对光线的敏感度,如减小光圈、减少曝光时间等,确实可以让一些原本非常亮的区域变得不那么亮,提升对于外界光线感知的上限。但这也并不是说降的越低越好。因为这里还涉及到一个下限的问题。如果你减小的太多,那么影像中就可能出现太多噪声,信噪比太低,从而导致影像无法使用。所以如何设计算法,合理地权衡上界和下界是需要考虑的问题。

(3)多帧合成

上面说了,既然一味地增加或降低感光度会有这样那样的问题,那么我们就用多套参数进行拍摄,然后从多个影像中选取最好的部分。这也就是多帧合成的核心思想之一。所以多帧合成的关键在于,选择标准的确立。

2.HDR重建、渲染、显示

HDR本身是一个很大的话题,典型有三种应用,重建、渲染、显示,如下图所示。 HDR渲染:Tone-mapping operator任务介绍如下。它做的事情就是用低位宽图像(如8bit)显示高动态范围影像。 如下是一个显示图像的例子。可以看到如果直接显示原图的数据,影像非常暗(因为动态范围很高)。同时乘以16、64和256以后,影像看起来就会亮多了。 Tone mapping一个可行的思路是对于一张图像,我们乘以不同的提亮系数,从而获得不同亮度的影像,这一步可以看作是“虚拟曝光”。然后对于多张不同的影像,再进行“多曝光合成”,获得HDR影像。 除了这种思路,也有一些其它经典算法,如下图基于双边滤波的Tone Mapping所示。 另外也有一些网站集成了大量TM实现,如下图所示。 相关的文献如下。 一个典型的Tone Mapping方法就是之前我们就已经非常熟悉的直方图均衡化。 核心思路就是将亮度映射问题建模成亮度分配问题。基于这个思想,又产生了很多衍生算法,如限制对比度过高的直方图均衡化(CLAHE)。之所以有这么多衍生算法,是因为原始算法有些时候会产生对比度过高的情况,如下图所示。 而使用CLAHE的效果如下所示。 可以看到虽然对比度不如上一张,但是可视效果好了很多。另一种基于拉普拉斯金字塔思路的TMO如下。 前面介绍了很多传统HDR算法,上面介绍的传统方法都有各自适用的场景,如何做到算法的场景自适应其实是有一定难度的。但是深度学习就可以很好的解决这个问题。因此目前也有基于深度学习的HDR融合方法,如下。

3.HDR硬件方案

目前在工业界也有一些HDR硬件方案,比如digital overlap,如下图所示。 BME。 SME。 QBC。 DCG。 一些厂家介绍的双原生ISO技术就是这个原理。

4.日常生活中的HDR

本文作者原创,未经许可不得转载,谢谢配合

返回顶部