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 特征点配准流程

工业界最常用的配准流程是这样的:

  1. 特征提取:用SIFT、ORB或SuperPoint提取关键点。
  2. 特征匹配:用暴力匹配或FLANN找到对应点对。
  3. 剔除误匹配:用RANSAC或MAGSAC剔除外点。
  4. 求解变换:用最小二乘或加权最小二乘求解变换矩阵。
  5. 图像重采样:用双线性插值或双三次插值把图像变换到参考帧。

避坑指南:我曾经在特征匹配阶段,直接用最近邻匹配,结果大量误匹配导致配准失败。后来加了比率测试(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 本章知识体系

下面这张图,把本章的核心逻辑串起来了。你可以看到,从原始多帧输入,到最终对齐输出,中间经历了光流估计、图像配准、亚像素优化三个关键步骤。

多帧融合基础:光流估计、图像配准、亚像素对齐 多帧融合基础:核心流程 多帧输入序列 光流估计 LK / 金字塔 / RAFT 图像配准 特征匹配 + RANSAC + 变换求解 亚像素精度对齐 插值 / 相位相关 / 梯度优化 对齐后的多帧 关键指标 • 光流精度:0.1~1.0 px • 配准成功率:>95% • 亚像素精度:0.01~0.1 px • 处理速度:实时/离线 常见陷阱 • 纹理稀疏区域失效 • 大运动导致匹配失败 • 光照变化影响光流 • 过拟合亚像素噪声

4.5 工程落地要点

最后,我总结几个工程落地的关键点:

  • 先粗后细:先做全局配准,再做局部光流。这样既稳定又精确。
  • 鲁棒性优先:宁可漏匹配,不要错匹配。一个错误的光流点,会毁掉整个融合结果。
  • 计算效率:手机端用稀疏光流+仿射配准,服务器端用稠密光流+非刚性配准。
  • 亚像素精度:0.1像素是性价比最高的精度。再高就边际效益递减了。

一句话总结:多帧融合的核心,就是让每一帧的像素都找到它在参考帧中的精确位置。光流估计告诉你「动了多少」,图像配准告诉你「怎么对齐」,亚像素精度告诉你「对齐到多细」。