Advertisement

(二)OpenCV特征提取与检测_15_BRISK特征匹配

阅读量:

Brisk(Binary Robust Invariant Scalable Keypoints)的关键点检测方法介绍 包括多尺度空间构建过程 在此过程中使用FAST9-16算法进行特征识别 并通过 FAST9-16 方法提取关键点位置 进而确定关键点在图像中的具体位置信息 最后生成关键区域的描述向量

复制代码
    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char** argv)
    {
    	//步骤一:读取图片并将图片灰度化
    	Mat src_obj, src_scene;
    	src_obj = imread("../path_obj.jpg", IMREAD_GRAYSCALE);
    	src_scene = imread("../path_scene.jpg", IMREAD_GRAYSCALE);
    
    	if (src_obj.empty() || src_scene.empty())
    	{
    		cout << "could not load image1..." << endl;
    		return -1;
    	}
    
    	/*
    	//BRISK特征点检测
    	Ptr<Feature2D> detector = BRISK::create();
    	vector<KeyPoint> keypoints;
    	detector->detect(src_scene, keypoints, Mat());
    	// 绘制关键点
    	Mat Brisk_dst;
    	drawKeypoints(src_scene, keypoints, Brisk_dst, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    	imshow("Brisk_dst", Brisk_dst);
    	*/
    	//AKAZE特征点检测
    	Ptr<Feature2D> detector = BRISK::create();//创建一个AKAZE类对象并初始化
    	vector<KeyPoint> keypoints_obj;
    	vector<KeyPoint> keypoints_scene;
    
    	//定义描述子
    	Mat descriptor_obj, descriptor_scene;
    
    	//检测的同时计算描述子
    	detector->detectAndCompute(src_obj, Mat(), keypoints_obj, descriptor_obj);//关键点//描述子
    	detector->detectAndCompute(src_scene, Mat(), keypoints_scene, descriptor_scene);
    
    	//步骤三:特征点匹配
    	BFMatcher matcher(NORM_L2);//暴力匹配
    	vector<DMatch> matches;//对象源图像1的特征点匹配源图像2的特征点[matches[i]]
    	matcher.match(descriptor_obj, descriptor_scene, matches);
    
    	//步骤四:获取优秀匹配点
    	//步骤五:绘制特征匹配图
    	Mat brisk_match_dst;
    	drawMatches(src_obj, keypoints_obj, src_scene, keypoints_scene, matches, brisk_match_dst);
    	namedWindow("match_dst", WINDOW_AUTOSIZE);
    	imshow("match_dst", brisk_match_dst);
    
    	waitKey(0);
    	return 0;
    }

输出结果:

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~