zoukankan      html  css  js  c++  java
  • 描述与匹配关键点

    局部模板匹配

    通过特征点匹配,可以将一幅图像的点集和另一幅图像(或一批图像)的点集关联起来。如果两个点集对应着现实世界中的同一个场景元素,它们就应该是匹配的。
    仅凭单个像素就判断两个关键点的相似度显然是不够的,因此要在匹配过程中考虑每个关键点周围的图像块。如果两幅图像块对应着同一个场景元素,那么它们的像素值应该会比较相似。
    最常见的图像块是边长为奇数的正方形,关键点的位置就是正方形的中心。可通过比较块内像素的强度值来衡量两个正方形图像块的相似度。常见的方案是采用简单的差的平方和(Sum of Squared Differences,SSD)算法。
    使用函数:

        void cv::matchTemplate(
            cv::InputArray image, // 用于搜索的输入图像, 8U 或 32F, 大小 W-H
            cv::InputArray templ, // 用于匹配的模板,和image类型相同, 大小 w-h
            cv::OutputArray result, // 匹配结果图像, 类型 32F, 大小 (W-w+1)-(H-h+1)
            int method // 用于比较的方法
        );

    下面重点介绍一下第四个参数,opencv中支持的比较方法有六种,分别如下:

    1、cv::TM_SQDIFF:该方法使用平方差进行匹配,因此最佳的匹配结果在结果为0处,值越大匹配结果越差。

     

    2、cv::TM_SQDIFF_NORMED:该方法使用归一化的平方差进行匹配,最佳匹配也在结果为0处。

     

    3、cv::TM_CCORR:相关性匹配方法,该方法使用源图像与模板图像的卷积结果进行匹配,因此,最佳匹配位置在值最大处,值越小匹配结果越差。

     

    4、cv::TM_CCORR_NORMED:归一化的相关性匹配方法,与相关性匹配方法类似,最佳匹配位置也是在值最大处。

     

    5、cv::TM_CCOEFF:相关性系数匹配方法,该方法使用源图像与其均值的差、模板与其均值的差二者之间的相关性进行匹配,最佳匹配结果在值等于1处,最差匹配结果在值等于-1处,值等于0直接表示二者不相关。

     

    6、cv::TM_CCOEFF_NORMED:归一化的相关性系数匹配方法,正值表示匹配的结果较好,负值则表示匹配的效果较差,也是值越大,匹配效果也好。

    画图所用函数

    // Draws matches of keypints from two images on output image.
    void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints1,
                      const Mat& img2, const vector<KeyPoint>& keypoints2,
                      const vector<vector<DMatch> >& matches1to2, Mat& outImg,
                      const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),
                      const vector<vector<char> >& matchesMask=vector<vector<char> >(), int flags=DrawMatchesFlags::DEFAULT );

    img1 – 源图像1
    keypoints1 – 源图像1的特征点.
    img2 – 源图像2.
    keypoints2 – 源图像2的特征点
    matches1to2 – 源图像1的特征点匹配源图像2的特征点[matches[i]] .
    outImg – 输出图像具体由flags决定.
    matchColor – 匹配的颜色(特征点和连线),若matchColor==Scalar::all(-1),颜色随机.
    singlePointColor – 单个点的颜色,即未配对的特征点,若matchColor==Scalar::all(-1),颜色随机.
    matchesMask – Mask决定哪些点将被画出,若为空,则画出所有匹配点.
    flags – Fdefined by DrawMatchesFlags.

  • 相关阅读:
    ./ 和../ 和 / 区别
    思想笔记-03
    java项目学习
    OA办公管理系统最全设计
    Axure RP 7.0注册码
    Java循环和数组练习题:打印素数升级版
    C语言练习题:水仙花数
    Java与C语言的区别——含面向对象介绍
    .NET Core C# 中级篇2-7 文件操作
    ASP.NET Core Basic 1-1 WebHost与项目配置
  • 原文地址:https://www.cnblogs.com/KAVEI/p/14747848.html
Copyright © 2011-2022 走看看