2、多帧对齐技术:基于特征点的对齐、基于光流的对齐、对齐误差对噪声抑制的影响
多帧HDR合成的第一步,就是把几帧图像对齐。
你想想看,手持拍摄时手会抖,场景里可能有树叶在动,行人走过。这些运动如果不处理,合成出来的HDR图像就会重影、模糊。噪声抑制更是无从谈起——因为对齐不准,时域滤波会把不同物体的像素混在一起,噪声没去掉,细节先糊了。
我个人习惯把对齐技术分成两大类:基于特征点的稀疏对齐和基于光流的稠密对齐。它们各有各的脾气,选错了,后面噪声抑制再努力也白搭。
2.1 基于特征点的对齐
这是最经典的做法。核心思路是:先找图像里那些“好认”的点,比如角点、边缘交叉点,然后匹配这些点,算出一个全局变换矩阵。
2.1.1 特征点提取与匹配
常用的特征点检测器有SIFT、SURF、ORB。我早期做项目时喜欢用SIFT,因为它对旋转和尺度变化最鲁棒。但后来发现,在HDR场景里,不同曝光帧的亮度差异很大,SIFT的梯度描述子有时会失效。
举个例子,过曝帧的天空一片白,什么特征点都提不出来。欠曝帧的暗部全是噪声,提出来的点也不靠谱。
匹配阶段,我常用FLANN快速最近邻搜索,再用RANSAC剔除误匹配。RANSAC的阈值我一般设2-3个像素,太松了会把错误匹配放进来,太紧了又可能丢掉正确匹配。
2.1.2 变换模型选择
匹配完特征点后,需要拟合一个几何变换。常见的有这几种:
| 变换模型 | 自由度 | 适用场景 | 我的评价 |
|---|---|---|---|
| 平移变换 | 2 | 纯手持抖动,无旋转 | 太简单,基本不用 |
| 仿射变换 | 6 | 小角度旋转+缩放+平移 | 大部分手持场景够用 |
| 透视变换 | 8 | 大角度旋转、视角变化 | HDR里很少用,容易过拟合 |
| 单应性矩阵 | 8 | 平面场景、远距离拍摄 | 如果场景近似平面,效果不错 |
我建议大多数手持HDR场景用仿射变换就够了。它既能处理旋转和缩放,又不会像透视变换那样引入奇怪的畸变。
2.1.3 特征点对齐的局限
特征点对齐有个硬伤:它假设整个图像的运动可以用一个全局模型描述。但现实场景里,运动往往是局部的——前景的人在动,背景的墙没动。一个全局变换根本搞不定。
我曾经在一个街景HDR项目里吃过这个亏。行人走过时,特征点对齐把背景对齐了,但行人区域全是重影。后来我不得不引入局部运动检测来补救。
2.2 基于光流的对齐
光流法就不一样了。它给每个像素都算一个运动向量,是稠密对齐。说白了,它能告诉你图像里每个点从上一帧移动到了哪里。
2.2.1 光流的基本原理
光流基于一个假设:同一个物体点在相邻帧之间,亮度保持不变。公式很简单:
I(x, y, t) = I(x + dx, y + dy, t + dt)
展开后就是光流约束方程。但一个方程有两个未知数(dx, dy),解不了。所以需要加额外的约束,比如Lucas-Kanade方法假设局部窗口内运动一致,Farnebäck方法用多项式展开来近似。
2.2.2 常用光流算法对比
| 算法 | 类型 | 速度 | 精度 | 适合HDR吗? |
|---|---|---|---|---|
| Lucas-Kanade | 稀疏/稠密 | 快 | 中等 | 小运动可以,大运动不行 |
| Farnebäck | 稠密 | 中等 | 较高 | 适合,但亮度变化大时容易漂 |
| DeepFlow | 稠密(深度学习) | 慢 | 高 | 效果好,但算力要求高 |
| RAFT | 稠密(深度学习) | 中等 | 很高 | 目前HDR领域最推荐 |
我个人在移动端HDR项目里常用Farnebäck的改进版。它速度快,精度也够用。但要注意,HDR帧之间的亮度差异会破坏光流的基本假设——亮度不变。所以我会先做一次亮度归一化,再算光流。
2.2.3 光流对齐的坑
光流法也不是万能的。我踩过几个坑:
- 大运动失效:如果两帧之间物体移动超过几十个像素,光流基本算不准。这时候需要多尺度金字塔,从粗到细逐层优化。
- 遮挡问题:物体移走后露出的背景,光流是算不出来的。这些区域需要标记为“无效”,不参与后续合成。
- 亮度变化:HDR帧之间亮度差异大,光流容易算出虚假运动。我试过用梯度图代替原始亮度图来算光流,效果好了不少。
2.3 对齐误差对噪声抑制的影响
这是本章最核心的部分。对齐误差和噪声抑制之间的关系,说白了就是:对齐越差,噪声抑制效果越差,甚至可能让图像更糟。
2.3.1 对齐误差的三种类型
- 全局偏移误差:整张图像没对齐,平移了几个像素。后果是时域滤波后图像模糊,像蒙了一层雾。
- 局部运动误差:运动物体区域没对齐。后果是重影,运动物体边缘出现鬼影。
- 亚像素误差:对齐精度在0.5像素以内。这种误差对噪声抑制影响较小,但会损失高频细节。
2.3.2 误差如何影响时域滤波
时域滤波的核心是:对同一空间位置的多帧像素做加权平均。如果对齐不准,你平均的其实是不同物体的像素。结果就是:
- 噪声虽然被平均掉了,但细节也被平均掉了
- 边缘变模糊,纹理丢失
- 运动区域出现重影
我做过一个实验:用不同对齐精度的帧做3帧时域平均。结果如下:
| 对齐精度(像素) | PSNR(dB) | SSIM | 主观效果 |
|---|---|---|---|
| 0(完美对齐) | 42.3 | 0.98 | 清晰,噪声低 |
| 0.5 | 38.1 | 0.92 | 轻微模糊,可接受 |
| 1.0 | 34.7 | 0.85 | 明显模糊,细节丢失 |
| 2.0 | 30.2 | 0.73 | 重影,不可用 |
你看,对齐误差超过1个像素,PSNR直接掉了8个dB。这个损失,后面再怎么降噪也补不回来。
2.3.3 如何评估对齐质量
我常用的评估方法有两种:
- 残差图分析:对齐后,计算参考帧和对齐帧的像素差。残差图越暗,对齐越好。如果残差图里有明显的物体轮廓,说明那个区域没对齐。
- 结构相似性(SSIM):计算对齐帧和参考帧的SSIM。低于0.9的区域,我建议标记为“运动区域”,在噪声抑制时降低时域权重。
2.4 知识结构总览
下面这张图把本章的核心逻辑串起来了。你可以看到,对齐技术选型直接影响噪声抑制的效果。
嗯,这张图把本章的逻辑理清楚了。从特征点对齐和光流对齐两条路出发,最终都汇聚到对齐误差对噪声抑制的影响上。记住一句话:对齐是噪声抑制的前提,对齐做不好,后面全是白费。