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 权重映射与融合

融合不是简单的平均。每个像素的贡献权重,取决于它的质量。什么叫质量?曝光适中、细节丰富、噪声低。

常用的权重因子有三个:

  1. 对比度权重: 梯度大的区域细节多,权重高
  2. 饱和度权重: 颜色鲜艳的区域信息丰富
  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获取方式的流程和关系梳理了一下,你可以对照着看:

HDR图像获取方式知识结构图 HDR图像获取方式 多曝光融合 单帧HDR传感器 HDR视频采集 曝光序列选取 对齐与去鬼影 权重映射融合 双增益读出 分像素曝光 对数响应 帧内融合 帧间融合 硬件编码流水线 选型建议:静态场景用多曝光融合,运动场景用单帧传感器, 视频应用需根据帧率和运动程度选择帧内或帧间融合方案