2、HDR成像原理:多帧合成HDR、单帧HDR(DOL-HDR)、HDR的噪声特性分析
HDR成像,说白了就是让相机同时看清亮部和暗部。普通单帧图像受限于传感器动态范围,亮处过曝、暗处欠曝是家常便饭。我刚开始做ISP时,总觉得HDR不就是多拍几张合成嘛,后来踩了不少坑才明白——HDR的核心不是合成,而是噪声管理。
这一章我们拆开来看:多帧合成HDR怎么工作?单帧DOL-HDR又是什么?以及,HDR模式下噪声为什么特别棘手。
2.1 多帧合成HDR
多帧合成HDR的原理很直观:对同一场景,用不同曝光时间拍多张RAW图,然后合成一张高动态范围的图像。
典型的流程是这样的:
- 短曝光帧:保留高光细节,但暗部噪声大
- 中曝光帧:中间调正常,兼顾亮暗
- 长曝光帧:暗部信噪比高,但高光容易过曝
合成时,算法会为每个像素选择最合适的帧,或者做加权融合。我在项目中遇到过一个问题:如果场景中有快速移动的物体(比如行人、汽车),多帧之间会产生鬼影。嗯,鬼影消除是另一个大话题,这里先提一嘴。
核心指标:多帧合成HDR的动态范围提升 ≈ log2(最长曝光时间 / 最短曝光时间) [stops]。比如长曝光30ms、短曝光1ms,理论上能提升约5档动态范围。
2.2 单帧HDR(DOL-HDR)
DOL-HDR(Digital Overlap HDR)是另一种思路。它不依赖多帧拍摄,而是在单帧曝光时间内,通过传感器内部的分时读出机制,实现不同曝光量的像素数据同时输出。
DOL-HDR的典型工作模式:
- 长曝光积分:传感器先进行长曝光积分
- 短曝光积分:在长曝光尚未结束时,插入短曝光积分
- 分时读出:长曝光和短曝光的数据在同一个帧周期内依次读出
- 片上合成:在传感器内部或ISP前端完成合成
我个人习惯把DOL-HDR叫做“伪单帧HDR”。它避免了多帧合成的鬼影问题,但代价是传感器读出噪声会翻倍——因为你要读出两套数据。
| 对比项 | 多帧合成HDR | DOL-HDR |
|---|---|---|
| 帧数需求 | 2~3帧 | 1帧(内部多曝光) |
| 鬼影问题 | 严重,需额外消除 | 无鬼影 |
| 读出噪声 | 单次读出 | 多次读出,噪声叠加 |
| 运动适应性 | 差 | 好 |
| 传感器要求 | 支持多帧触发 | 支持分时读出 |
避坑指南:我曾经在DOL-HDR项目里忽略了读出噪声的叠加效应,结果合成后的暗部信噪比反而比单帧还差。后来加了片内降噪才救回来。记住:DOL-HDR的读出噪声 = 长曝光读出噪声 + 短曝光读出噪声。
2.3 HDR的噪声特性分析
HDR模式下的噪声,比普通模式复杂得多。为什么?因为不同曝光帧的噪声特性不一样,合成时噪声会被“混合”和“放大”。
我总结了HDR噪声的三个关键特性:
- 噪声非均匀性:短曝光帧的暗部噪声大,长曝光帧的高光噪声小。合成后,不同区域的噪声水平差异明显。
- 时间域噪声:多帧合成时,每帧的随机噪声(如读出噪声、光子散粒噪声)会叠加。虽然平均能降低随机噪声,但固定模式噪声(FPN)反而会被保留甚至放大。
- 合成算法引入的噪声:加权融合、运动补偿等操作,会引入额外的计算噪声。尤其是非线性映射(如gamma校正、色调映射),会改变噪声的分布特性。
注意:HDR合成后的噪声,往往在暗部和高光过渡区最明显。暗部因为短曝光帧的信噪比低,高光过渡区因为帧间权重切换,容易产生“噪声条带”。
举个例子。假设短曝光帧的暗部噪声标准差为σ_short,长曝光帧的暗部噪声标准差为σ_long。合成时如果采用线性加权,合成后的噪声标准差 ≈ sqrt(w_short² * σ_short² + w_long² * σ_long²)。权重w_short和w_long取决于像素亮度。你想想看,如果权重分配不当,合成后的噪声可能比单帧还大。
所以,HDR噪声抑制的关键,不是合成后再降噪,而是在合成过程中就控制噪声。我习惯的做法是:在RAW域先做帧间对齐和噪声估计,再根据噪声水平动态调整合成权重。这样能最大程度保留细节,同时抑制噪声。
2.4 HDR成像流程与噪声来源
下面这张图展示了HDR成像的完整流程,以及每个环节的噪声来源。我特意把噪声源标红了,方便你对照。
从这张图可以清楚看到:噪声不是只在合成后才出现,而是从曝光阶段就开始累积。我个人习惯把HDR噪声抑制的起点放在曝光控制阶段——通过合理分配曝光时间,让各帧的噪声水平尽量接近,这样合成后的噪声分布会更均匀,后续降噪也更容易。
经验之谈:我做过一个对比实验:同样场景下,曝光时间比1:4:16的三帧合成,比1:8:64的三帧合成,噪声均匀性好30%以上。曝光跨度太大,反而会让噪声管理更难。
2.5 本章小结
HDR成像不是简单的“多拍几张再合成”。多帧合成HDR和DOL-HDR各有优劣,选择哪种取决于你的应用场景和对噪声的容忍度。而HDR噪声的特性——非均匀性、时间域叠加、合成算法引入——决定了噪声抑制必须前置到合成阶段,而不是事后补救。