4. 图像预处理

各位同学,欢迎来到第四章。前面我们讲了HDR的基础理论和曝光策略,但说实话,那些都是“理想状态”。真正到了实战环节,你会发现拿到的多帧曝光照片,几乎不可能直接拿来合成。

为什么?因为手持拍摄会抖动,场景里可能有行人车辆在动,长曝光还会带来传感器噪声。这些问题不解决,合成出来的HDR就是一团糊。今天我们就来啃下这几块硬骨头。

4.1 图像去噪:别让噪声毁了你的高动态范围

先说说噪声。HDR合成里,暗部区域是最容易出噪声的。你想想看,为了保留高光细节,我们通常会欠曝几档,结果暗部信号被压缩到传感器底噪附近,一拉曲线,满屏噪点。

核心认知:HDR合成中的噪声问题,本质是“信号放大”与“噪声放大”的博弈。欠曝帧的暗部信噪比极低,必须预处理。

我个人习惯把去噪分为两个阶段:

  1. 帧内去噪——对每一帧单独处理,消除传感器噪声。
  2. 帧间去噪——利用多帧冗余信息,进一步压制噪声。

帧内去噪,我推荐用 双边滤波 或 非局部均值去噪。双边滤波保边效果好,不会把细节磨平。非局部均值更猛,但计算量也大,适合离线处理。

我的经验:在移动端实时HDR里,我一般用快速双边滤波 + 小波阈值去噪的组合。先做一次轻度双边滤波,再在小波域里把高频噪声砍掉。效果够用,速度也快。

帧间去噪呢?说白了就是利用多帧之间的相关性。比如你拍了3帧,同一位置的像素值应该是接近的,取个中值或均值,噪声就压下去了。但这里有个坑——如果场景在动,直接平均就会糊。所以帧间去噪必须和对齐配合使用。

4.2 图像对齐:让每一帧都“站对位置”

对齐是HDR预处理里最基础也最关键的环节。手持拍摄,哪怕你练过铁手功,几帧之间也会有微小的偏移。不对齐就合成,边缘会出现重影,像没对上焦一样。

对齐方法我分成三类:

方法 原理 适用场景 精度
全局平移对齐 假设整幅图像只有平移运动 三脚架固定拍摄,仅有微小抖动 低
仿射变换对齐 允许旋转+平移+缩放 手持拍摄,相机有轻微旋转 中
光流法对齐 逐像素计算运动矢量 场景中有局部运动(如树叶晃动) 高

实际项目中,我建议这样选:

  • 如果是固定机位拍建筑,全局平移对齐就够了,速度快,不容易出错。
  • 手持拍风景,用仿射变换。我习惯先提取ORB特征点,再用RANSAC剔除误匹配,最后算变换矩阵。
  • 场景里有动态物体?那就得上光流法了。不过光流计算量大,而且对噪声敏感,需要先做去噪。

注意:对齐不是越精确越好。过度对齐会把真实的运动信息也“对齐”掉,导致去鬼影阶段无法区分运动物体。对齐的目标是消除相机运动,保留场景运动。

4.3 去鬼影:HDR合成中最头疼的问题

好,对齐做完了,你以为就能直接合成了?还不行。对齐只能消除相机自身的运动,但场景里的运动物体——比如行人、汽车、飘动的旗帜——这些是没法对齐的。

如果不处理,合成结果里就会出现半透明的“鬼影”。比如一个人从画面左边走到右边,在长曝光帧里是模糊的,在短曝光帧里是清晰的,一融合,这个人就变成了“幽灵”。

去鬼影的核心思路就一句话:找出运动区域,然后决定用哪一帧的信息。

具体做法分三步:

  1. 运动检测:以参考帧(通常是中间曝光帧)为基准,计算其他帧与参考帧的差异。差异大的像素就是运动区域。
  2. 权重调整:在融合时,降低运动区域中非参考帧的权重,甚至直接丢弃。
  3. 信息填充:如果运动区域在所有非参考帧里都不可用,就用参考帧的像素直接填充。

避坑指南:我曾经在一个项目里,直接用帧差法做运动检测,结果把高光反射也当成了运动区域,导致金属表面出现奇怪的纹理。后来我改用“梯度一致性检测”——不仅看像素值,还看梯度方向。运动物体的梯度方向通常不一致,而高光反射的梯度方向是连续的。这个改进效果很明显。

运动检测的常用方法对比:

方法 优点 缺点
帧差法 简单快速 对光照变化敏感,容易误检
梯度一致性检测 对光照鲁棒,能区分高光和运动 计算量稍大
光流法 能精确描述运动边界 计算量大,对噪声敏感
深度学习法 精度最高,泛化能力强 需要训练数据,推理速度慢

4.4 图像配准基础:从对齐到配准的进阶

对齐和配准,这两个词经常混用。但严格来说,对齐是配准的一种特例。对齐只解决几何变换,而配准还包括光度配准——也就是让不同帧的亮度、对比度保持一致。

为什么要做光度配准?因为不同曝光帧的亮度差异太大了。欠曝帧整体偏暗,过曝帧整体偏亮。如果直接拿它们的像素值做运动检测,结果会非常不靠谱。

光度配准的常用做法:

  • 直方图匹配:把非参考帧的直方图映射到参考帧的直方图上,让它们的亮度分布一致。
  • 增益补偿:对每一帧计算一个全局增益系数,把亮度拉到同一水平。
  • 局部亮度校正:用双边滤波提取低频成分,分别校正不同区域的亮度。

我的建议:如果只是做简单的HDR合成,直方图匹配就够了。但如果你要做高质量的去鬼影,我建议用局部亮度校正。因为运动物体和背景的亮度关系可能很复杂,全局校正会丢失细节。

好了,到这里我们把预处理的核心环节都过了一遍。下面这张图总结了整个流程:

HDR图像预处理流程 多帧曝光图像 帧内去噪 光度配准(亮度校正) 几何对齐(仿射/光流) 去鬼影(运动检测+权重调整) 关键原则 先光度校正,再几何对齐 对齐保留场景运动 去鬼影只处理运动区域 常见陷阱 过度对齐→丢失运动信息 去噪过度→细节模糊 光度校正不足→误检运动

嗯,到这里你应该明白了。预处理不是可有可无的步骤,而是决定HDR合成质量的关键。去噪、对齐、去鬼影、配准,这四个环节环环相扣,少一个都不行。