4、多帧融合基础:多帧采集原理、图像配准(光流法、特征匹配)、帧间一致性假设
多帧融合,说白了就是让多张照片“拧成一股绳”。你单帧拍得再好,也扛不住暗光下的噪点。但多帧不一样——它用时间换信噪比。这一章,我们先把地基打牢。
4.1 多帧采集原理
多帧采集不是简单连拍。它背后有一套严谨的物理逻辑。我刚开始做这个方向时,以为就是按快门按得快一点。后来发现,事情没那么简单。
核心思路:同一场景,多次采样,平均降噪。因为噪声是随机的,信号是确定的。多帧平均后,噪声的方差会降为原来的 1/N(N 是帧数)。
信噪比增益公式:
SNR多帧 = SNR单帧 + 10·log₁₀(N) (dB)
N=4 时,增益约 6dB;N=16 时,增益约 12dB。但前提是——帧间必须对齐。
采集方式主要有三种:
| 采集模式 | 特点 | 典型场景 |
|---|---|---|
| 手持连拍 | 帧间有随机位移,需配准 | 手机夜景模式 |
| 三脚架固定 | 帧间位移极小,配准简单 | 长曝光堆栈 |
| 视频抽帧 | 帧率高,但存在运动模糊 | 监控/运动场景 |
我个人习惯,手持连拍是最有挑战性的。因为手抖、呼吸、甚至心跳都会引入亚像素级的偏移。这些偏移,就是配准要解决的问题。
4.2 图像配准:光流法
配准,就是把多帧图像“对齐”到同一个坐标系下。光流法是我用得最多的方法之一。
光流的基本假设:亮度恒定 + 小运动 + 空间一致。说白了,就是同一个像素点在相邻帧之间,亮度不变,位置只挪了一点点,而且它邻居也挪了差不多。
经典的光流方程:
I(x, y, t) = I(x + dx, y + dy, t + dt)
泰勒展开后得到:
Ix * u + Iy * v + It = 0
其中:
- Ix, Iy 是空间梯度
- It 是时间梯度
- (u, v) 是光流向量
嗯,这里要注意。一个方程两个未知数,解不唯一。所以需要加约束。Lucas-Kanade 方法假设局部窗口内运动一致,用最小二乘法求解。
我的经验:LK 光流对小位移效果很好,但遇到大运动(比如快速摇镜头)就容易崩。我曾在一次夜景堆叠项目里,因为手抖幅度太大,光流直接算出了“飞点”。后来加了图像金字塔,从粗到细逐层优化,才稳住。
光流法的优缺点:
- 优点:稠密匹配,每个像素都有位移向量;亚像素精度高。
- 缺点:计算量大;对光照变化敏感;大运动容易失效。
4.3 图像配准:特征匹配
光流法算的是“每个像素去哪了”。特征匹配则是“找几个关键点,算它们怎么变”。
流程很清晰:
- 特征点检测:用 SIFT、ORB、AKAZE 等算法找到角点、斑点。
- 特征描述:给每个特征点算一个“指纹”(描述子)。
- 特征匹配:用暴力匹配或 FLANN 找到两帧间的对应点对。
- 变换估计:用 RANSAC 剔除误匹配,算出单应性矩阵或仿射变换。
你想想看,特征匹配和光流法本质上是互补的。光流法擅长精细对齐,特征匹配擅长粗对齐和应对大运动。
| 对比维度 | 光流法 | 特征匹配 |
|---|---|---|
| 输出 | 稠密位移场 | 稀疏变换矩阵 |
| 计算量 | 大 | 中等 |
| 大运动 | 弱 | 强 |
| 亚像素精度 | 高 | 依赖插值 |
| 光照鲁棒性 | 差 | 较好(SIFT) |
我曾经踩过的坑:在纹理稀疏区域(比如白墙、夜空),特征匹配几乎找不到点。这时候强行用特征匹配,配准结果就是一坨。我的建议是:纹理丰富用特征匹配,纹理稀疏用光流法,或者两者融合。
4.4 帧间一致性假设
这是多帧融合的“信仰”。没有这个假设,后面所有算法都是空中楼阁。
帧间一致性假设包含三层:
- 几何一致性:场景中的同一个物理点,在不同帧中对应同一个像素位置(经过配准后)。
- 光度一致性:同一个物理点的亮度值,在不同帧中应该相同(不考虑噪声和曝光差异)。
- 运动一致性:运动物体的位移在短时间内是平滑的、连续的。
说白了,就是“同一个东西,看起来应该差不多”。但现实往往打脸——
举个例子:树叶在风中摇晃。你拍 8 帧,每帧树叶位置都不一样。这时候几何一致性就被破坏了。怎么办?
我的做法是:检测运动区域,做局部自适应处理。静止区域用多帧平均,运动区域用单帧或短时融合。这个思路在后续章节会展开讲。
一致性假设的数学表达:
对于配准后的像素位置 (x', y'):
I₁(x, y) ≈ I₂(x', y') ≈ ... ≈ Iₙ(x', y')
残差 = Iᵢ(x', y') - Iⱼ(x', y') 应服从零均值高斯分布(仅含噪声)。
如果残差出现结构性偏差,说明配准失败或存在运动物体。
4.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。我建议你多看几遍,理清脉络。
4.6 本章小结
多帧融合的第一步,不是写代码,而是理解“帧与帧之间的关系”。
- 采集方式决定了配准的难度。手持连拍最常用,也最考验算法。
- 光流法给每个像素算位移,精度高但怕大运动。
- 特征匹配找关键点算变换,鲁棒性好但纹理稀疏时失效。
- 帧间一致性假设是融合的理论基石。现实场景中,这个假设经常被打破——运动物体、光照变化、遮挡,都是你需要处理的“例外”。
我个人觉得,这一章最难的不是算法本身,而是理解“什么时候该用哪种方法”。没有银弹。多帧融合的工程实践,就是在各种方法之间做权衡。
一个小建议:刚开始做多帧项目时,先用特征匹配做粗配准,再用光流法做精配准。这个“粗到细”的流程,能帮你省掉很多调试时间。我自己的第一个多帧项目就是这么调通的。