ECC是什么?

ECC 在 OpenCV 中的全称是 Enhanced Correlation Coefficient(增强相关系数)
它是一种用于图像配准(Image Alignment)的方法,核心思想是通过最大化两张图像的相关系数(Correlation Coefficient)来找到它们之间的几何变换。


1. ECC 的用途

ECC 常用于 图像配准 (Image Registration),也就是将两张不同时间、不同视角或不同传感器拍摄的图像对齐。
典型应用包括:

  • 视频稳定(video stabilization)
  • 医学图像对齐
  • 图像拼接
  • 运动估计

2. ECC 的原理

  • ECC 算法试图寻找一个几何变换矩阵(如仿射矩阵、单应性矩阵等),让模板图像 (templateImage) 与输入图像 (inputImage) 的重叠区域的相关性最大。
  • 在 OpenCV 中,这个优化过程由 cv::findTransformECC(EmguCV 对应 CvInvoke.FindTransformECC 或类似封装)实现。

3. FindTransformECC 的参数解释

例如 C# 封装版本:

csharp复制编辑public static double FindTransformECC(
    IInputArray templateImage,
    IInputArray inputImage,
    IInputOutputArray warpMatrix,
    MotionType motionType,
    MCvTermCriteria criteria,
    IInputArray inputMask = null);
  • templateImage:模板图像(通常是参考图像)。
  • inputImage:要对齐的图像。
  • warpMatrix:输出的几何变换矩阵。
  • motionType:运动模型(Translation, Euclidean, Affine, Homography)。
  • criteria:优化终止条件,如最大迭代次数、最小变化阈值。
  • inputMask:可选的掩码,用于定义参与计算的区域。
  • 返回值:最终的相关系数值(越接近 1 表示越匹配)。

4. ECC 和光流(Farneback)区别

  • Farneback光流:逐像素估计运动场(Dense Optical Flow)。
  • ECC:找到全局变换矩阵(例如平移、旋转、缩放),整体对齐图像。

简单说:Farneback 是“像素级别的局部运动”,ECC 是“整体的几何对齐”。

发表回复