4. 多帧融合基础:光流估计、图像配准、亚像素精度对齐
多帧融合,说白了就是把多张拍糊了、拍抖了的照片,合成一张清晰的。但这里有个前提——你得知道每张照片里的像素点,到底对应到真实世界的哪个位置。这就是本章要聊的核心:光流估计、图像配准,以及亚像素精度对齐。
我刚开始做多帧融合时,踩过一个坑。当时直接拿原始帧做平均,结果运动物体全是重影。后来才明白,不做对齐的融合,就是耍流氓。嗯,咱们一步步来。
4.1 光流估计:像素级别的运动追踪
光流,就是图像中每个像素点的运动矢量。你想想看,两帧之间,同一个物体移动了,它在图像上的位置就变了。光流就是描述这个变化的。
光流估计的核心假设有两个:
- 亮度恒定:同一个点在前后帧的亮度不变。
- 小运动:运动幅度不能太大,否则追踪会失败。
实际工程中,这两个假设都不太成立。比如手机夜景拍摄,亮度变化大,运动也大。所以我们需要更鲁棒的方法。
4.1.1 经典方法:Lucas-Kanade 光流
Lucas-Kanade(LK)光流是最经典的稀疏光流方法。它假设一个局部窗口内的像素运动一致,然后解一个最小二乘问题。
// 伪代码:LK光流核心
// 输入:图像I1, I2,窗口大小w
// 输出:每个特征点的光流(u, v)
for each feature point (x, y) in I1:
// 构建梯度矩阵
A = [[Ix(x,y)^2, Ix(x,y)*Iy(x,y)],
[Ix(x,y)*Iy(x,y), Iy(x,y)^2]]
// 构建时间梯度向量
b = [-Ix(x,y)*It(x,y), -Iy(x,y)*It(x,y)]
// 解线性方程
[u, v] = solve(A, b)
我在项目中遇到过一个问题:LK光流在纹理稀疏的区域(比如白墙)会完全失效。因为梯度矩阵A是奇异的,解不出来。这时候就得靠图像金字塔了。
4.1.2 金字塔光流:处理大运动
金字塔光流,就是把图像缩小,在低分辨率上估计大运动,再逐层上采样,细化到高分辨率。这样就能处理比较大的运动了。
关键点:金字塔层数一般取3-5层。层数太少,大运动追不上;层数太多,计算量爆炸,而且小尺度细节会丢失。
4.1.3 深度学习光流:RAFT 与 FlowNet
现在工业界用得更多的是深度学习光流。比如 RAFT(Recurrent All-pairs Field Transforms),它用4D相关体来建模像素间的匹配关系,精度比传统方法高一个量级。
我个人的习惯是:
- 如果算力有限(比如手机端),用金字塔LK + 稀疏特征点。
- 如果算力充足(比如云端服务器),直接用RAFT,精度高,鲁棒性好。
4.2 图像配准:把多帧对齐到同一坐标系
光流估计出来的是每个像素的运动。但图像配准更宏观——它要找到一个全局的变换,把一张图映射到另一张图的坐标系里。
常见的配准模型有几种:
| 模型 | 自由度 | 适用场景 | 缺点 |
|---|---|---|---|
| 平移模型 | 2 | 纯平移抖动 | 不能处理旋转 |
| 仿射模型 | 6 | 平移+旋转+缩放 | 不能处理透视 |
| 单应性模型 | 8 | 透视变换 | 对平面场景有效 |
| 非刚性模型 | 高 | 人脸、变形物体 | 计算量大 |
我曾经在一个项目中,用仿射模型去配准一个旋转很大的场景,结果重影严重。后来换成单应性模型,效果立竿见影。选模型这事,得看实际运动类型。
4.2.1 特征点配准流程
工业界最常用的配准流程是这样的:
- 特征提取:用SIFT、ORB或SuperPoint提取关键点。
- 特征匹配:用暴力匹配或FLANN找到对应点对。
- 剔除误匹配:用RANSAC或MAGSAC剔除外点。
- 求解变换:用最小二乘或加权最小二乘求解变换矩阵。
- 图像重采样:用双线性插值或双三次插值把图像变换到参考帧。
避坑指南:我曾经在特征匹配阶段,直接用最近邻匹配,结果大量误匹配导致配准失败。后来加了比率测试(ratio test),阈值设0.7,误匹配率从30%降到了5%以下。
4.3 亚像素精度对齐:为什么整数像素不够?
你想想看,一个像素对应的是真实世界的一个小区域。如果两帧之间的运动是0.3个像素,整数像素对齐就没办法了。这时候就需要亚像素精度。
亚像素对齐的核心思想:用插值或拟合的方法,在像素之间找到更精确的对应位置。
4.3.1 亚像素光流
在LK光流中,我们解出的(u, v)本身就是浮点数,天然就是亚像素的。但前提是图像梯度计算要准确,而且迭代收敛。
我常用的做法是:
- 先用整数像素估计一个初始运动。
- 然后用双线性插值在亚像素位置采样。
- 再迭代优化,直到收敛。
4.3.2 亚像素配准
对于全局配准,亚像素精度通常通过以下方式实现:
- 相位相关法:在频域计算亚像素位移,精度可达0.01像素。
- 梯度下降法:在图像空间直接优化,用梯度信息迭代调整。
- 深度学习回归:用网络直接回归亚像素偏移量。
注意:亚像素精度不是越高越好。0.1像素的精度对大多数超分辨率任务已经足够。追求0.01像素的精度,计算量翻10倍,收益却微乎其微。工程上要懂得取舍。
4.4 本章知识体系
下面这张图,把本章的核心逻辑串起来了。你可以看到,从原始多帧输入,到最终对齐输出,中间经历了光流估计、图像配准、亚像素优化三个关键步骤。
4.5 工程落地要点
最后,我总结几个工程落地的关键点:
- 先粗后细:先做全局配准,再做局部光流。这样既稳定又精确。
- 鲁棒性优先:宁可漏匹配,不要错匹配。一个错误的光流点,会毁掉整个融合结果。
- 计算效率:手机端用稀疏光流+仿射配准,服务器端用稠密光流+非刚性配准。
- 亚像素精度:0.1像素是性价比最高的精度。再高就边际效益递减了。
一句话总结:多帧融合的核心,就是让每一帧的像素都找到它在参考帧中的精确位置。光流估计告诉你「动了多少」,图像配准告诉你「怎么对齐」,亚像素精度告诉你「对齐到多细」。