在描述一个场景的时候,动态范围(Dynamic Range)指的是其最亮部与最暗部的亮度比值。高动态范围的场景(High Dynamic Range Scene)指的是场景里同时存在非常明亮和非常暗淡的部分。
图像传感器所能捕捉的动态范围是有限的,它受到两个因素的限制,一个是满阱容量(Full Well Capacity,FWC),另一个则是它的本底噪声。
要想在一张照片里记录尽可能多的明暗细节,就需要尽可能扩大传感器的 FWC,并尽可能地抑制其本底噪声,然而,受制于使用场景所能容纳的传感器尺寸,以及当前可用的技术,传感器能获得的提升是有限的。
因此,工程师们另辟蹊径,通过其他的方法来捕捉这种高动态范围的场景,这就是高动态范围成像技术(HDR Imaging)。
HDR 成像这个概念最早被大众熟知可以追溯到 2011 年发布的 iPhone 4S。
iPhone 4S 是首次引入 HDR 成像的手机之一,它使用的是多帧异曝光 HDR,原理也非常通俗易懂,如果一张图片无法容纳场景所有的动态范围,那么我们多拍几张,让它们的亮部和暗部信息进行接力不就好了:
在上面的示意图中,红色部分表示传感器的本底噪声,淹没在本底噪声中的信息是无法被获取的,但通过多帧接力,我们就可以将它们拼接起来,获得宽广的动态范围。
这种技法一般通过调节曝光时间来获得不同曝光的画面,最终通过多张不同曝光的图片来把整个动态范围包起来,因此也被称作包围曝光(Bracketing)。
包围曝光是的具体操作是:一次拍摄后,以中间曝光值和减少曝光值和增加曝光值的方式,形成3张或者更多不同曝光量的照片。这个例子是以1eV为步进拍摄的3张包围照片。
我们在包围曝光拍摄得到多张不同曝光值照片后,使用后期软件的蒙版功能,取低曝光值照片的高光处与高曝光值的暗光处,与正常曝光的照片进行合成。实际成片效果就比合成前好多了,暗处能看见,亮处有细节,每个部分都清晰可见。
包围曝光(多帧异曝光HDR)是大部分HDR算法的基础,包围曝光的基本思路:“取长补短,合为一个”深深影响了之后的HDR算法演进。
多帧同曝光这个做法非常简单,效果也不错,但很容易就发现一个问题,它对运动物体的效果不好。因为这种多帧异曝光 HDR 需要拍摄多张曝光时间不同的画面,在这个过程中如果出现运动物体,它在每一帧中移动的程度都不同,在不同帧里的位置也不同,在最终合成时就会出现各种各样此外,曝光较长的帧也更容易因为手抖而糊片,这种拍摄方式在应对弱光 + 大光比场景下可用性会大幅降低。
工程师针对早期HDR技术的种种弊病提出了全新的修补方案。
拍照时手会抖?没关系,我们祭出多帧防抖对齐算法,拍摄后通过标记不同照片中的特征点位置(比如眉毛,衣襟,肩膀),然后把这些照片叠起来,将特征点对齐,这样就能大大改善重影的问题。
拍照时被摄物会动?如果被摄物体在持续运动中,比如运动场上冲刺的运动员。该怎么办?没关系,我们选取其中一张为主图,保留运动员与他身后的背景,把其它照片中稳定可用的部分(比如背景)叠加到主图当作超采样的原料。如果被摄物体不过偶尔动几下,比如合影时的儿童,则可以筛选拍摄时没有运动残影的有效帧进行合成,而对有运动残影的图片予以舍弃。这种办法能有效避免重影。
暗光下噪点多?没关系,我们可以借助时间超采样理念,用多张照片重复叠加,不同照片在同一位置出现的红绿噪点可以相互重合,在进一步处理后,去除这些无序噪点。
若不是HDR+技术的出现,这类HDR技术还将会在手机市场长久占据大量市场。可惜技术的迭代是相当快的 。
包围曝光这种方法有一个很明显的缺点,过曝那张照片拍摄时间过长,浪费了大量时间与图片信息。使整组照片拍摄时间达到了拍摄一张普通非HDR照片时间的3倍左右。如果在明亮的室外晴天这问题倒是不大,快门时间都在千分之一秒以上。可是到了光照条件先天不足的室内,那张过曝的照片拍摄时长会大大超出安全快门速度,非常容易因抖动引起模糊,至于被摄物移动导致合成失败等问题,则更难以处理。
Google 的工程师在提出了一种新的 HDR 实现方法,他们认为这种方法较传统的多帧异曝光 HDR 提升很大,所以取名叫 HDR+。
整个HDR目标可以简单总结就是“高光不过曝,暗处有细节” 。HDR +是如何实现高光不过曝的呢?很简单,让所有照片都欠曝就行了。
这便是HDR+的核心思路。捕获曝光不足的帧,对齐和合并这些帧以产生高比特深度的单个中间图像,并对该图像进行色调映射以产生高分辨率照片。
下面举例进行说明。
如上图,HDR+用4张1/40秒快门时间的照片堆在一起,4*(1/40秒)=1/10秒 达到正常曝光的1/10秒。而按正常曝光时间是1/10秒,“KABB”字样是过曝的。而1/40s的照片曝光时间太短,“KABB”处是不会过曝的,能完好保存亮处的色彩信息。用4张1/40s的照片堆栈为最终成品时,既能获得足够的亮度,也能控制住高光处的过曝情况。
在实际操作中要实现4帧的合成的话,实际照片数量比4张多呢,一方面是因为暗处可能需要更多帧来进行降噪处理,另一方面是因为因抖动或其它因素会产生无用的帧,被当作废片舍弃。当然其它原因也有不少。具体的实现过程相当复杂。谷歌白皮书给出的流程如下图:
现在很多手机的超级夜景模式就是基于HDR+的,如华为从P20 Pro开始的超级夜景,自此把手机的夜拍表现提升了整整一个档次。
上面提到的的HDR都是走的多帧的路子,但多帧又会带来合成的问题。而且多帧异曝光和多帧同曝光的路子分别被苹果和 Google 走了,那么接下来还有什么可以提升呢?
我们还是要把目光放回软硬件结合上——软件的路走过了,我们可以走硬件的路嘛。
下面介绍一些硬件 HDR 实现,它们都是由上游厂商提供的(Sony,OV)。
这种sensor的设计是:每个像素是有四个子像素组成,他们公用一个color filter。
这种特殊的排列不是为了扩充像素数,而是进行单次多张HDR。按分区进行不同时长的曝光。比如所有标号为 1 的像素曝光 1/25 秒,所有标号为 2 的像素曝光 1/20 秒,所有标号为 3 的像素曝光 1/15 秒,所有标号为 4 的像素曝光 1/10 秒,相当于在这块传感器的一个拍照周期上执行了 4 次明暗各异的曝光,获得了 4 张图片。然后用 HDR算法 合成为最终图片。
主流上游厂都提出了自己的处理方案,Sony的称为QBC(Quad bayer coding),OV的称为4-cell(four-cell color-filter pattern HDR),下面分别介绍。
在非HDR模式下,四个像素合并成一个输出值,与当年Nokia 用的4100万像素出8百万像素的照片的所谓超采样是一个原理,具有降噪,增加动态范围的好处。在HDR模式时,会把四个像素分成两组,对角线方向的分到同一组,135度的那组曝光要短于45度的那组,然后再进行scale+combine,这样就生成完全pixel位置的HDR图像。
这种4cell HDR与sony的QBC类似,也可以看作一个大像素由四个小像素构成。它由两种HDR设置:
1、按照对角线分成两个不同的曝光输出。
2、每个4-cell 单元,右小角的单元用不同的曝光,其余三个用相同的曝光。 (这个有点像大小像素的处理,后面介绍 Spatial HDR)。
大家都知道CMOS成像是一行一行扫描的,而iHDR技术的原理,以完整的RGGB拜尔排列作为一行,对其设置交错改变的曝光参数。比如奇数行长曝光,偶数行短曝光。扫描过程就是从上到下读完奇数行,然后再从上到下读完偶数行,使每一行都被读取(扫)一遍。
但是iHDR的问题就在于,在列方向会损失一半的分辨率。这个很好理解,iHDR用奇数行与偶数行合成为一行,从而得到HDR照片,每行像素数不变,总行数只有拍摄时的一半。
因此,运用iHDR技术的设备在开启HDR功能的时候是会掉画质的。不过好在人眼对纵向分辨率的增减没有像横向分辨率那样敏感,只要不是细密斜向线条,人眼都不能明确的感知到画质下降。
这种方式类似对图像进行了Binning操作,因此,Sony也把提出的技术称为Binning Multiplexed Exposure (BME-HDR) ;对应地,OV也提出了类似的方案,称为Alternate row HDR。
这种sensor每隔两行的曝光时间分别设为短曝光和长曝光。然后融合长短曝光的两帧图像,成为行数减半的一帧HDR图像。空间分辨率损失了一半,就好像是做了1x2binning,所以叫做binned multiplexed exposure。
这个alternate row HDR是每两行用一个曝光,long或者short。对应长曝光、短曝光行的gain也可以分开控制。与sony 的BME HDR 类似,这个alternate row HDR会损失一半的空间分辨率。
iHDR这种方式,优势就在于快,只要ISP处理速度足够,那么拍摄HDR的速度和拍摄一张普通照片并无差别,按照最简单的情况看,读取过程就是ISP从上到下读完奇数行,然后再从上到下读完偶数行,使每一行都被ISP读取一遍。所需时间与普通照片自上而下曝光没有太大差别。
因为交替曝光几乎就是同时发生,所以抑制重影的表现比HDR+还好不少。只不过这种方法面对画质动态范围全面提升的HDR+没有很好的对应方案。
相比先前的iHDR,zHDR则是一种拍摄高动态范围影片的改进方式。在iHDR理念的基础上,把隔行交替曝光改成了特殊排列的 高 中 低 曝光。相比隔行的iHDR,行列都交替曝光的zHDR的处理过程比iHDR要复杂不少。相比分辨率砍半的iHDR,zHDR能够输出全分辨率的图像,这可以算是个不小的进步。
这里主要是Sony了自己的方案:SME-HDR(Spatially multiplexed exposure)
这种sensor在空间上以棋盘格的pattern排列着长曝光和短曝光的像素。下图中颜色的深浅代表曝光时间的长短 。然后通过算法处理融合两个曝光的图像成为一帧HDR图像。按照Sony的说法,这种SME技术只损失20%的空间分辨率,而前边BME会损失一半的空间分辨率。也有别的ISP公司,用更好的算法来融合两个曝光的图像,能够更少地损失空间分辨率。
从技术上来说,单帧HDR要比多帧HDR简单不少,在早期设备处理能力不足的时候,速度快,没拖影,性能要求低的单帧HDR反而要更有优势。到了HDR+时代,单帧HDR渐渐不敌多帧合成HDR。技术的迭代就是这么残酷。这些技术曾经短暂地在部分手机上应用过,但是很快因为效果不佳也退出了市场。
数次尝试结果都很一般,硬件 HDR 的出路在何方呢?后面将继续介绍。