Bootstrap

OpenCV视觉分析之目标跟踪(9)计算扩展相关系数computeECC()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算两幅图像之间的增强相关系数值 78

Enhanced Correlation Coefficient (ECC):增强相关系数是一种用于图像配准的技术,通过最大化两个图像之间的相关系数来找到最佳的仿射变换矩阵。ECC 相比传统的相关系数方法,具有更好的鲁棒性和准确性。

函数原型

double cv::computeECC
(
	InputArray 	templateImage,
	InputArray 	inputImage,
	InputArray 	inputMask = noArray() 
)		

参数

  • 参数templateImage:模板图像(参考图像),通常是固定不变的。
  • inputImage:输入图像(待对齐图像),需要通过仿射变换对齐到模板图像。
  • inputMask:可选的掩码图像,用于指定哪些像素参与计算。默认值为 noArray(),表示没有掩码。

返回值

double:返回相关系数的最大值

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 读取两幅图像
    Mat src1 = imread( "/media/dingxin/data/study/OpenCV/sources/images/referrence.png", IMREAD_GRAYSCALE );
    Mat src2 = imread( "/media/dingxin/data/study/OpenCV/sources/images/target.png", IMREAD_GRAYSCALE );

    if ( src1.empty() || src2.empty() )
    {
        cerr << "Error: Could not read images." << endl;
        return -1;
    }
    // 预处理图像
    equalizeHist( src1, src1 );
    equalizeHist( src2, src2 );

    // 初始化仿射变换矩阵
    Mat warp_matrix = Mat::eye( 2, 3, CV_32F );

    // 设置终止条件
    TermCriteria criteria( TermCriteria::COUNT + TermCriteria::EPS, 5000, 1e-11 );

    // 计算 ECC 并找到最佳的仿射变换矩阵
    double correlation_coefficient = findTransformECC( src1, src2, warp_matrix, MOTION_AFFINE, criteria );

    // 检查是否成功
    if ( correlation_coefficient < 0 )
    {
        cerr << "Error: The algorithm stopped before its convergence. The correlation is going to be minimized. Images may be uncorrelated or non-overlapped." << endl;
        return -1;
    }

    // 输出结果
    cout << "Correlation Coefficient: " << correlation_coefficient << endl;
    cout << "Warp Matrix:\n" << warp_matrix << endl;

    // 应用仿射变换
    Mat aligned_image;
    warpAffine( src2, aligned_image, warp_matrix, src1.size() );

    // 显示结果
    imshow( "Reference Image", src1 );
    imshow( "Target Image", src2 );
    imshow( "Aligned Image", aligned_image );

    waitKey( 0 );
    return 0;
}

运行结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

;