2、HDR图像获取:多曝光融合技术、单帧HDR传感器、HDR视频采集
好,咱们进入第二章。上一章聊了HDR是什么、为什么需要它。这一章,咱们得解决一个实际问题——HDR图像从哪来?
说白了,传感器能记录的动态范围有限。普通相机拍一张,亮部过曝、暗部死黑,这是常态。那怎么才能拿到高动态范围的数据?目前主流就三条路:多曝光融合、单帧HDR传感器、HDR视频采集。我挨个跟你讲透。
2.1 多曝光融合技术
这是最经典、最成熟的方法。你想想看,一张照片亮部过曝,那就拍一张欠曝的;暗部死黑,那就拍一张过曝的。把不同曝光量的图像合在一起,各取所长——这就是多曝光融合的核心思路。
核心流程: 拍摄多帧不同曝光 → 对齐去鬼影 → 权重映射 → 融合合成
2.1.1 曝光序列的选取策略
拍几帧?曝光差多少?这有讲究。我个人习惯,静态场景用3~5帧,EV步长1~2。比如-2EV、0EV、+2EV,基本能覆盖10档以上的动态范围。
| 场景类型 | 推荐帧数 | EV步长 | 动态范围覆盖 |
|---|---|---|---|
| 室内静物 | 3 | 2.0 | ~12档 |
| 室外逆光 | 5 | 1.5 | ~16档 |
| 夜景灯光 | 7 | 1.0 | ~18档 |
我在项目中遇到过一个问题:拍夜景时用了7帧,结果中间几帧曝光太接近,融合后出现带状伪影。后来我改成非均匀步长——暗部区域步长小一点,亮部区域步长大一点,效果就好多了。
2.1.2 对齐与去鬼影
多帧拍摄,手会抖,场景里可能有移动物体。不对齐直接融合,画面就糊了。对齐算法我常用光流法或相位相关。光流法精度高,但慢;相位相关快,但对大位移效果差。
注意: 对齐只能解决相机运动。场景中的运动物体(行人、汽车、树叶晃动)会产生鬼影。去鬼影是融合前必须做的。
我曾经踩过一个坑:用简单的均值融合,结果画面里有个行人,在-2EV帧里在左边,+2EV帧里走到了右边,融合出来一个半透明的人影……嗯,从那以后我再也不敢省去鬼影检测这一步了。
去鬼影的常用方法:
- 基于中值/众数: 对每个像素在多帧中取中值,能剔除异常运动像素
- 基于运动掩膜: 检测运动区域,只融合静态区域,运动区域取单帧
- 基于深度学习: 用CNN预测运动区域和融合权重,效果最好但计算量大
2.1.3 权重映射与融合
融合不是简单的平均。每个像素的贡献权重,取决于它的质量。什么叫质量?曝光适中、细节丰富、噪声低。
常用的权重因子有三个:
- 对比度权重: 梯度大的区域细节多,权重高
- 饱和度权重: 颜色鲜艳的区域信息丰富
- 曝光度权重: 像素值接近中间灰(0.5)的权重高,远离的权重低
融合公式其实很简单:
// 伪代码:多曝光融合
for each pixel (x, y):
total_weight = 0
total_value = 0
for each frame i:
w = contrast_weight(i, x, y) *
saturation_weight(i, x, y) *
exposure_weight(i, x, y)
total_weight += w
total_value += w * pixel_value(i, x, y)
hdr_pixel(x, y) = total_value / total_weight
你想想看,这个权重设计其实很巧妙——每帧只贡献它最擅长的部分。欠曝帧贡献亮部细节,过曝帧贡献暗部细节,中间帧贡献主体。
2.2 单帧HDR传感器
多曝光融合有个硬伤——不能拍运动物体。你拍个奔跑的运动员,多帧融合出来全是重影。那怎么办?硬件上想办法。
单帧HDR传感器,说白了就是一次曝光,同时记录高、中、低三种灵敏度的信号。目前主流方案有三种:
| 方案 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 双增益/多增益 | 每个像素同时输出高增益和低增益信号 | 无鬼影,速度快 | 芯片面积大,成本高 |
| 分像素曝光 | 相邻像素用不同曝光时间 | 实现简单 | 分辨率损失,有伪影 |
| 对数响应传感器 | 像素响应曲线呈对数关系 | 天生高动态范围 | 噪声大,色彩还原差 |
我在做车载摄像头项目时,用过索尼的IMX490,它就是双增益方案。每个像素有两个读出路径:高增益路径负责暗部,低增益路径负责亮部。芯片内部直接合成HDR数据,输出就是10~12档动态范围。嗯,这个方案在自动驾驶领域用得特别多,因为车在动,没法拍多帧。
小提示: 单帧HDR传感器输出的数据,通常还是线性RAW格式,只是动态范围更宽。后续仍然需要做色调映射才能显示。别以为传感器输出HDR就能直接看了——那是两码事。
2.3 HDR视频采集
视频HDR比静态图像难一个数量级。为什么?因为帧率限制。你拍静态可以拍3帧、5帧、7帧,但视频每秒要输出25~60帧,每帧的采集时间被严格限制。
2.3.1 帧内融合 vs 帧间融合
HDR视频采集有两种思路:
- 帧内融合: 在一帧时间内,交替采集长短曝光,然后合成。比如一帧里先拍短曝光、再拍长曝光,合成后输出一帧HDR。优点是每帧都是HDR,缺点是帧率减半。
- 帧间融合: 奇数帧短曝光,偶数帧长曝光,两帧合成一帧HDR。优点是帧率不变,缺点是运动模糊——两帧之间有运动,合成出来就糊了。
我记得有一次帮客户调试HDR视频采集系统,他们用了帧间融合,结果拍快速摇镜时画面全是撕裂的。后来我建议他们换成帧内融合,虽然帧率从60fps降到30fps,但画面干净多了。说白了,运动场景选帧内,静态场景选帧间。
2.3.2 硬件编码与流水线
HDR视频的数据量很大。以10-bit HDR为例,数据量是普通8-bit视频的1.5倍。如果传感器输出12-bit甚至14-bit,那带宽压力更大。
实际工程中,HDR视频采集流水线通常长这样:
传感器采集 → 双增益读出 → HDR合成(硬件) →
色调映射(硬件/软件) → 编码(H.265/H.266) → 存储/传输
这里有个关键点:HDR合成最好在硬件层面完成。如果传到CPU再合成,带宽和延迟都扛不住。现在的ISP芯片(比如高通Spectra、索尼CXD系列)都内置了HDR合成模块,直接输出HDR RAW或YUV。
避坑指南: 我曾经遇到过HDR视频编码后出现色带的问题。原因是色调映射后的数据是10-bit,但编码器配置成了8-bit主档次。HDR视频必须用HEVC Main 10或AV1 10-bit档次编码,否则细节全丢了。
2.4 三种方案对比与选型
好,三种方案都讲完了。咱们做个对比,方便你选型时参考:
| 维度 | 多曝光融合 | 单帧HDR传感器 | HDR视频采集 |
|---|---|---|---|
| 动态范围 | 高(可叠加帧数) | 中高(受硬件限制) | 中(受帧率限制) |
| 运动适应性 | 差(需去鬼影) | 好(单帧完成) | 中(帧内融合尚可) |
| 成本 | 低(纯软件) | 高(专用传感器) | 中高(硬件流水线) |
| 适用场景 | 静态摄影、产品拍摄 | 车载、安防、工业检测 | 影视制作、直播 |
我个人建议:做产品原型阶段,先用多曝光融合验证算法,成本低、迭代快。等算法稳定了,再根据场景决定是否上专用传感器。别一上来就买昂贵的HDR传感器,万一算法不匹配,钱就白花了。
2.5 本章知识结构
下面这张图,把三种HDR获取方式的流程和关系梳理了一下,你可以对照着看: