在描述一个场景的时候,动态范围(Dynamic Range)指的是其最亮部与最暗部的亮度比值。高动态范围的场景(High Dynamic Range Scene)指的是场景里同时存在非常明亮和非常暗淡的部分。

图像传感器所能捕捉的动态范围是有限的,它受到两个因素的限制,一个是满阱容量(Full Well Capacity,FWC),另一个则是它的本底噪声。

  1. 满阱容量越大,CMOS 就越不容易饱和。如果场景里明亮的部分释放出太多光子,那么图像传感器就会饱和,超出这个容量的光子无法被捕捉,这些高光信息也就无法被保存下来。
  2. 类似地,对于太过暗淡的部分,那些光子的信号强度不够,那么就会淹没在图像传感器的噪声(Noise Floor)中,无法被记录下来。

要想在一张照片里记录尽可能多的明暗细节,就需要尽可能扩大传感器的 FWC,并尽可能地抑制其本底噪声,然而,受制于使用场景所能容纳的传感器尺寸,以及当前可用的技术,传感器能获得的提升是有限的。

因此,工程师们另辟蹊径,通过其他的方法来捕捉这种高动态范围的场景,这就是高动态范围成像技术(HDR Imaging)。

一、最传统:多帧异曝光

HDR 成像这个概念最早被大众熟知可以追溯到 2011 年发布的 iPhone 4S。

iPhone 4S 是首次引入 HDR 成像的手机之一,它使用的是多帧异曝光 HDR,原理也非常通俗易懂,如果一张图片无法容纳场景所有的动态范围,那么我们多拍几张,让它们的亮部和暗部信息进行接力不就好了:

在上面的示意图中,红色部分表示传感器的本底噪声,淹没在本底噪声中的信息是无法被获取的,但通过多帧接力,我们就可以将它们拼接起来,获得宽广的动态范围。

这种技法一般通过调节曝光时间来获得不同曝光的画面,最终通过多张不同曝光的图片来把整个动态范围包起来,因此也被称作包围曝光(Bracketing)。

包围曝光是的具体操作是:一次拍摄后,以中间曝光值和减少曝光值和增加曝光值的方式,形成3张或者更多不同曝光量的照片。这个例子是以1eV为步进拍摄的3张包围照片。

我们在包围曝光拍摄得到多张不同曝光值照片后,使用后期软件的蒙版功能,取低曝光值照片的高光处与高曝光值的暗光处,与正常曝光的照片进行合成。实际成片效果就比合成前好多了,暗处能看见,亮处有细节,每个部分都清晰可见。

包围曝光(多帧异曝光HDR)是大部分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)。


三、四像素拜耳阵列QHDR

这种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),下面分别介绍。

1、QBC(Quad bayer coding)

在非HDR模式下,四个像素合并成一个输出值,与当年Nokia 用的4100万像素出8百万像素的照片的所谓超采样是一个原理,具有降噪,增加动态范围的好处。在HDR模式时,会把四个像素分成两组,对角线方向的分到同一组,135度的那组曝光要短于45度的那组,然后再进行scale+combine,这样就生成完全pixel位置的HDR图像。

2、4-cell(four-cell color-filter pattern HDR)

这种4cell HDR与sony的QBC类似,也可以看作一个大像素由四个小像素构成。它由两种HDR设置:

1、按照对角线分成两个不同的曝光输出。

2、每个4-cell 单元,右小角的单元用不同的曝光,其余三个用相同的曝光。 (这个有点像大小像素的处理,后面介绍 Spatial HDR)。

四、隔行曝光iHDR(interlace HDR)

大家都知道CMOS成像是一行一行扫描的,而iHDR技术的原理,以完整的RGGB拜尔排列作为一行,对其设置交错改变的曝光参数。比如奇数行长曝光,偶数行短曝光。扫描过程就是从上到下读完奇数行,然后再从上到下读完偶数行,使每一行都被读取(扫)一遍。

但是iHDR的问题就在于,在列方向会损失一半的分辨率。这个很好理解,iHDR用奇数行与偶数行合成为一行,从而得到HDR照片,每行像素数不变,总行数只有拍摄时的一半。

因此,运用iHDR技术的设备在开启HDR功能的时候是会掉画质的。不过好在人眼对纵向分辨率的增减没有像横向分辨率那样敏感,只要不是细密斜向线条,人眼都不能明确的感知到画质下降。

这种方式类似对图像进行了Binning操作,因此,Sony也把提出的技术称为Binning Multiplexed Exposure (BME-HDR) ;对应地,OV也提出了类似的方案,称为Alternate row HDR。

1、BME-HDR

这种sensor每隔两行的曝光时间分别设为短曝光和长曝光。然后融合长短曝光的两帧图像,成为行数减半的一帧HDR图像。空间分辨率损失了一半,就好像是做了1x2binning,所以叫做binned multiplexed exposure。

2、Alternate row HDR

这个alternate row HDR是每两行用一个曝光,long或者short。对应长曝光、短曝光行的gain也可以分开控制。与sony 的BME HDR 类似,这个alternate row HDR会损失一半的空间分辨率。

iHDR这种方式,优势就在于快,只要ISP处理速度足够,那么拍摄HDR的速度和拍摄一张普通照片并无差别,按照最简单的情况看,读取过程就是ISP从上到下读完奇数行,然后再从上到下读完偶数行,使每一行都被ISP读取一遍。所需时间与普通照片自上而下曝光没有太大差别。

因为交替曝光几乎就是同时发生,所以抑制重影的表现比HDR+还好不少。只不过这种方法面对画质动态范围全面提升的HDR+没有很好的对应方案。

五、 zHDR(Zig-zag HDR)

相比先前的iHDR,zHDR则是一种拍摄高动态范围影片的改进方式。在iHDR理念的基础上,把隔行交替曝光改成了特殊排列的 高 中 低 曝光。相比隔行的iHDR,行列都交替曝光的zHDR的处理过程比iHDR要复杂不少。相比分辨率砍半的iHDR,zHDR能够输出全分辨率的图像,这可以算是个不小的进步。

这里主要是Sony了自己的方案:SME-HDR(Spatially multiplexed exposure)

1、SME-HDR

这种sensor在空间上以棋盘格的pattern排列着长曝光和短曝光的像素。下图中颜色的深浅代表曝光时间的长短 。然后通过算法处理融合两个曝光的图像成为一帧HDR图像。按照Sony的说法,这种SME技术只损失20%的空间分辨率,而前边BME会损失一半的空间分辨率。也有别的ISP公司,用更好的算法来融合两个曝光的图像,能够更少地损失空间分辨率。

从技术上来说,单帧HDR要比多帧HDR简单不少,在早期设备处理能力不足的时候,速度快,没拖影,性能要求低的单帧HDR反而要更有优势。到了HDR+时代,单帧HDR渐渐不敌多帧合成HDR。技术的迭代就是这么残酷。这些技术曾经短暂地在部分手机上应用过,但是很快因为效果不佳也退出了市场。

数次尝试结果都很一般,硬件 HDR 的出路在何方呢?后面将继续介绍。

HDR 成像技术学习(一)相关推荐

  1. HDR 成像技术学习(三)—— LOFIC

    HDR 成像技术学习(一) HDR 成像技术学习(二) 我们拍摄的照片来自传感器上的像素,它们将光处理为电信号,组合起来输出画面.当捕捉对象亮度过强,大量电荷挤在单个像素内,生成的图像就会过曝. LO ...

  2. HDR 成像技术学习(二)

    回顾下之前介绍的内容: HDR成像技术学习(一) 介绍了从HDR.HDR+等多帧HDR技术到硬件的单帧HDR技术. 从技术上来说,单帧HDR要比多帧HDR简单不少,在早期设备处理能力不足的时候,速度快 ...

  3. 【zzq‘笔记】HDR成像技术学习(一)

    在描述一个场景的时候,动态范围(Dynamic Range)指的是其最亮部分与最暗部分的亮度比值.高动态范围的场景(High Dynamic Range Scene)指的是场景里同时存在非常明亮和非常 ...

  4. 【笔记】HDR 成像技术学习(二)

    从技术上来说,单帧HDR要比多帧HDR简单不少,在早期设备处理能力不足的时候,速度快,没拖影,性能要求低的单帧HDR反而要更有优势.到了HDR+时代,单帧HDR渐渐不敌多帧合成HDR.技术的迭代就是这 ...

  5. OpenCV hdr成像技术的实例(附完整代码)

    OpenCV hdr成像技术的实例 OpenCV hdr成像技术的实例 OpenCV hdr成像技术的实例 #include "opencv2/photo.hpp" #includ ...

  6. Camera和Image sensor技术基础笔记(5) -- HDR相关技术

    动态范围(Dynamic Range) 动态范围最早是信号系统的概念,一种信号系统的动态范围定义为:最大的信号不失真的电平和噪声电平的差,在实际场景中,多用分贝(dB)为单位来衡量一个信号系统的动态范 ...

  7. 各种光学仪器成像技术(上)

    各种光学仪器成像技术(上) 光学是一门很古老的学科,按照Optics的意思,它主要是研究可见光波段的问题. 光学也是一门很有意思的学科.从把光抽象成射线进行处理(光线光学)到把光纳入电磁波的范围(物理 ...

  8. 高光谱知识(1)-高光谱成像技术的理解

    系列文章目录 高光谱技术可以获得待观测目标或场景的连续单色光谱图像,并通过空间维(x, y)数据和光谱维(λ)数据共同组成三维观测数据立方体,从而为研究人员提供探测目标或场景中的每一个点的空间和光谱特 ...

  9. 短波红外成像技术与原理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 短波红外(SWIR)的范围占据了电磁频谱略高于近红外.在1050到 ...

最新文章

  1. T-SQL Cstr函数
  2. Android自动化测试之路——Provider(一)
  3. Druid 连接池的实用 配置详解
  4. 支持向量机原理及scikit-learn实现
  5. 使用 ConfigMap 挂载配置文件
  6. 快学Scala习题解答—第一章 基础
  7. Python语言实现用requests和正则表达式方法爬取猫眼电影排行榜前100部电影
  8. python—单例模式与多例模式的区别与创建
  9. Postgresql_最新版11.2源码编译安装
  10. 【操作系统】为什么需要内核
  11. 八月实施:电动自行车3c认证,电动自行车CCC认证费用周期,办理电动自行车ccc认证机构
  12. 拜腾“难”飞:全球化饮鸩止渴?
  13. QML树控件TreeView的使用(上)
  14. Android应用开发之PNG、IconFont、SVG图标资源优化详解
  15. 优化:java递归实现笛卡尔积算法
  16. iPhone尺寸规格
  17. TI-RTOS学习笔记(三)—— 驱动程序框架
  18. excel----检验
  19. 一个屌丝程序猿的人生(八十二)
  20. 东田纳西州立大学计算机排名,东田纳西州立大学世界排名

热门文章

  1. EBS FORM开发问题总结
  2. android更换工具链
  3. KAFKA分布式消息系统
  4. 手写vue2的Lazyload
  5. Zookeeper基础使用机制原理
  6. android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
  7. 关于OC-省市区习题
  8. 百度富文本编辑器,改变图片上传存储路径
  9. 位运算应用口诀和实例(转自大笨狼)
  10. DOM-8 【兼容】冒泡捕获流、事件与事件源对象、事件委托