ECC 和光流(Farneback)如何选择?

1. 核心区别

ECC(Enhanced Correlation Coefficient)

  • 目标: 找到一组全局的几何变换参数(如平移、旋转、缩放、仿射或单应性)来对齐两张图像。
  • 输出: 一个低维的矩阵(2×3 仿射矩阵或 3×3 单应性矩阵)。
  • 适用场景:
    • 相机拍摄的两张场景相似的图片(场景大部分不变)。
    • 图像稳定(视频防抖)。
    • 图像拼接(Stitching)中求得两张图像的对齐关系。
    • 医学图像配准(MRI、CT 等)。
  • 限制: 假设图像间的差异可用整体变换描述,不适合场景内有大量独立运动的情况。

Farneback 光流(Dense Optical Flow)

  • 目标: 逐像素估计图像间的运动场(motion field),得到每个像素的位移。
  • 输出: 一个与图像大小相同的光流向量场 (u, v)
  • 适用场景:
    • 视频中的局部运动检测(如物体运动)。
    • 动态场景分析(如人、车、动物的运动)。
    • 需要知道像素级别的运动轨迹。
  • 限制:
    • 计算量大(每个像素都计算运动)。
    • 对光照变化敏感。
    • 不适合纯全局运动的场景(如只需求整体平移时,ECC更快)。

2. 举例对比

  • 视频防抖:
    相机抖动是整体移动,ECC 通过一个仿射矩阵就能描述这种全局变换,比 Farneback 快且稳。
  • 运动检测(如跟踪跑步的人):
    场景中每个像素运动不同,用 ECC 不可能对齐整张图像,Farneback 更适合。

3. 如何选择

  • 如果你要 找两张图的整体对齐关系 → 用 ECC
  • 如果你要 计算像素级运动场(局部运动分析) → 用 Farneback 光流

上面那张图演示的是 图像配准与运动估计的不同方法:ECC 和 Farneback 光流

  • 左边的 ECC
    展示的是 图像配准(Image Alignment) 问题:
    给定两张相似但有平移/旋转/缩放差异的图像(如教堂的两张照片),通过 ECC 算法找到一个 全局仿射矩阵 来对齐它们。
  • 右边的 Farneback Optical Flow
    展示的是 逐像素运动估计(Dense Optical Flow) 问题:
    对视频帧中的运动物体(如跑步的人),通过光流算法计算出每个像素点的运动方向和速度,用彩色的流场(Flow)表示局部运动信息。

总结:
这张图用可视化的方式对比了 ECC 用于 全局对齐,而 Farneback 光流用于 局部运动场估计 的场景和结果。

发表回复