图像特征点提取与匹配
图像匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点,如二维图像匹配中通过比较目标区和搜索区中相同大小的窗口的相关系数,取搜索区中相关系数最大所对应的窗口中心点作为同名点。其实质是在基元相似性的条件下,运用匹配准则的最佳搜索问题。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 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个文件信息
// 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.em
文件 472 2017-11-18 15:59 jingquepipei3Debug3.exe.em
文件 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 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
文件 2 2017-11-18 16:45 jingquepipei3Debugli
............此处省略37个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)