当前位置: 首页 > article >正文

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;
}

运行结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/380405.html

相关文章:

  • PS等软件学习笔记
  • “游戏信息化”:游戏后台系统的未来发展
  • 通过交叉实现数据触底分页效果new IntersectionObserver()(html、react、vue2、vue3)中使用
  • WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)
  • Linux网络——TCP的运用
  • Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!
  • 【C语言】C程序的编译+链接
  • 机场电子采购信息系统
  • APScheduler:强大的Python定时任务调度器
  • Flutter鸿蒙next中的按钮封装:自定义样式与交互
  • AI绘画大热门!用AI做副业兼职3个月赚了10w,想辞职了
  • stl_list
  • 利用蒙特卡洛方法求定积分
  • Redis 初学者指南
  • 论文阅读-用于图像识别的深度残差学习
  • 应用targetsdk版本低于30,不符合华为应用市场审核标准
  • 【学习】软件测试中V模型、W模型、螺旋模型三者介绍
  • Docker Compose部署XXL-JOB
  • STM32实现串口接收不定长数据
  • 【专题】基于服务的体系结构
  • JS实现漂亮的登录页面(氛围感页面)
  • 【linux 多进程并发】0203 网络资源的多进程处理,子进程完全继承网络套接字,避免“惊群”问题
  • TypeScript实用笔记(三):泛型<T>的使用 <T>的12种工具类型的使用
  • python代码主要实现了对供水网络的水质模拟,并对模拟结果进行一系列处理
  • ‌5G SSB(同步信号块)位于物理层‌
  • Python淘宝数据挖掘与词云图制作指南