图像特征点提取与匹配


图像匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点,如二维图像匹配中通过比较目标区和搜索区中相同大小的窗口的相关系数,取搜索区中相关系数最大所对应的窗口中心点作为同名点。其实质是在基元相似性的条件下,运用匹配准则的最佳搜索问题。
资源截图
代码片段和文件信息
// 3.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“


int _tmain(int argc _TCHAR* argv[])
{
return 0;
}

#include “opencv2/core/core.hpp“  
#include “opencv2/features2d/features2d.hpp“  
#include “opencv2/highgui/highgui.hpp“  
#include “opencv2/calib3d/calib3d.hpp“  
#include “opencv2/nonfree/nonfree.hpp“  
#include   
#include
using namespace cv;  
using namespace std;  
  
int main(  )  
{  
    //【0】改变console字体颜色  
    system(“color 1F“);   
  
  
    //【1】载入原始图片  
    Mat srcImage1 = imread( “A1.jpg“ 1 );  
    Mat srcImage2 = imread( “A2.jpg“ 1 );  
    Mat copysrcImage1=srcImage1.clone();  
    Mat copysrcImage2=srcImage2.clone();  
  
    if( !srcImage1.data || !srcImage2.data )  
    { printf(“读取图片错误,请确定目录下是否有imread函数指定的图片存在~! 
“); return false; }    
  
    //【2】使用SURF算子检测关键点  
    int minHessian = 400;//SURF算法中的hessian阈值  
    SurfFeatureDetector detector( minHessian );//定义一个SurfFeatureDetector(SURF) 特征检测类对象    
    vector keypoints_object keypoints_scene;//vector模板类,存放任意类型的动态数组  
  
    //【3】调用detect函数检测出SURF特征关键点,保存在vector容器中  
    detector.detect( srcImage1 keypoints_object );  
    detector.detect( srcImage2 keypoints_scene );  
////SIFT特征检测
//    SiftFeatureDetector detector;        //定义特点点检测器
//    //vector keypoint01keypoint02;//定义两个容器存放特征点
//    detector.detect(srcImage1keypoints_object);
//    detector.detect(srcImage2keypoints_scene);
  
    //【4】计算描述符(特征向量)  
    SurfDescriptorExtractor extractor;  
    Mat descriptors_object descriptors_scene;  
    extractor.compute( srcImage1 keypoints_object descriptors_object );  
    extractor.compute( srcImage2 keypoints_scene descriptors_scene );  
  
    ////【5】使用FLANN匹配算子进行匹配  
    //FlannbasedMatcher matcher;  
    //vector< DMatch > matches;  
    //matcher.match( descriptors_object descriptors_scene matches );  

BruteForceMatcher> matcher;
    vector matches;
   
    matcher.match(descriptors_objectdescriptors_scenematches);
   

double max_dist = 0; double min_dist = 100;//最小距离和最大距离  
  
    //【6】计算出关键点之间距离的最大值和最小值  
    for( int i = 0; i < descriptors_object.rows; i++ )  
    {   
        double dist = matches[i].distance;  
        if( dist < min_dist ) min_dist = dist;  
        if( dist > max_dist ) max_dist = dist;  
    }  
  
    printf(“>Max dist 最大距离 : %f 
“ max_dist );  
    printf(“>Min dist 最小距离 : %f 
“ min_dist );  
  
    //【7】存下匹配距离小于3*min_dist的点对  
    std::vector< DMatch > good_matches;  
    for( int i = 0; i < descriptors_object.rows; i++ )  
    {   
        if( matches[i].distance < 3*min_dist )  
        {   
            good_matches.push_back( matches[i]);  
        }  
    }  
  
    //绘制出匹配到的关键点  
    Mat img_matches;  
    drawMatches( srcImage1 keypoints_object srcImage2 keypoints_scene  
        good_matches img_matches Scalar::all(-1) Scalar::all(-1) 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-12-08 20:04  jingquepipei
     目录           0  2017-11-10 09:56  jingquepipei3
     文件        6099  2017-11-18 16:45  jingquepipei33.cpp
     文件        4356  2017-11-10 09:55  jingquepipei33.vcxproj
     文件        1305  2017-11-10 09:55  jingquepipei33.vcxproj.filters
     文件         143  2017-11-10 09:55  jingquepipei33.vcxproj.user
     文件       30411  2009-04-23 20:42  jingquepipei3A1.jpg
     文件       26986  2009-04-23 20:43  jingquepipei3A2.jpg
     目录           0  2017-12-08 20:04  jingquepipei3Debug
     文件         406  2017-11-10 09:56  jingquepipei3Debug3.exe.embed.manifest
     文件         472  2017-11-18 15:59  jingquepipei3Debug3.exe.embed.manifest.res
     文件         381  2017-11-18 16:45  jingquepipei3Debug3.exe.intermediate.manifest
     文件          52  2017-12-08 20:04  jingquepipei3Debug3.lastbuildstate
     文件         848  2017-12-08 20:04  jingquepipei3Debug3.log
     文件      415813  2017-11-18 16:45  jingquepipei3Debug3.obj
     文件     1179648  2017-11-18 15:59  jingquepipei3Debug3.pch
     文件         192  2017-11-10 09:56  jingquepipei3Debug3_manifest.rc
     文件       19068  2017-11-18 16:45  jingquepipei3DebugCL.read.1.tlog
     文件        1000  2017-11-18 16:45  jingquepipei3DebugCL.write.1.tlog
     文件        2522  2017-11-18 16:45  jingquepipei3Debugcl.command.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink-cvtres.read.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink-cvtres.write.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.33488-cvtres.read.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.33488-cvtres.write.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.33488.read.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.33488.write.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.35720-cvtres.read.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.35720-cvtres.write.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.35720.read.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.35720.write.1.tlog
     文件           2  2017-11-18 16:45  jingquepipei3Debuglink.35752-cvtres.read.1.tlog
............此处省略37个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)