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 是“整体的几何对齐”。