图像拼接算法总结(二)

本文介绍了图像拼接过程中关键步骤,包括使用OpenCV的SURF算法提取特征点,通过BruteForceMatcher和FlannBasedMatcher匹配特征,利用RANSAC去除误匹配,最终通过图像配准和融合技术实现无缝拼接。
摘要由CSDN通过智能技术生成

2、特征提取与匹配

OpenCV中关于SURF算法的部分,常常涉及到的是SURF、SurfFeatureDetector、SurfDescriptorExtractor这三个类;

features2d.hpp头文件中,有:typedef SURF SurfFeatureDetector;和typedef SURF SurfDescriptorExtractor;typedef声明是为现有类型创建一个新的名字,类型别名,即SURF类有了两个新名字SurfFeatureDetector以及SurfDescriptorExtractor。

也就是说,SurfFeatureDetector类和SurfDescriptorExtractor类,其实就是SURF类,他们三者等价。

因此包含必要的头文件:

#include<iostream>

#include<stdio.h>

#include"highgui/highgui.hpp"  

#include"opencv2/nonfree/nonfree.hpp"  

#include"opencv2/legacy/legacy.hpp" 

usingnamespace cv;

usingnamespace std;

 

2.1 拼接图像的加载:

实例:

MatimageRgbLeft = imread("img_left_1.JPG");

MatimageRgbRight = imread("img_right_1.JPG");

 

//灰度图转换,在特征提取与匹配模块使用灰度图像,因此需要将图像转为灰度图

MatimageGrayLeft, imageGrayRight;

cvtColor(imageRgbLeft,imageGrayLeft, CV_RGB2GRAY);

cvtColor(imageRgbRight,imageGrayRight, CV_RGB2GRAY);

 

2.2 提取特征点   

实例:

intminHessian = 800; //设定阈值minHessian,关系到最后提取的特征点,这个是surf算法的一个参数;

SurfFeatureDetectorsurfDetector(minHessian);   // 海塞矩阵阈值

vector<KeyPoint>keyPointLeft, keyPointRight;// 定义两个KeyPoint 向keypoints_object, keypoints_scene来存放检测出来的特征点;

surfDetector.detect(imageGrayLeft,keyPointLeft);

surfDetector.detect(imageGrayRight,keyPointRight);

 

2.3 drawKeypoints()

作用:绘制关键点。

形式:void drawKeypoints(const Mat&image, constvector<KeyPoint>& keypoints, Mat& outImage, constScalar&color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT );

参数:

image:const Mat&类型的src,输入图像;

keypoints:const vector<KeyPoint>&类型的keypoints,根据源图像得到的特征点,它是一个输出参数;

outImage:Mat&类型的outImage,输出图像,其内容取决于第五个参数标识符falgs;

color:const Scalar&类型的color,关键点的颜色,有默认值Scalar::all(-1);

flags:int类型的flags,绘制关键点是的特征标识符,有默认值DrawMatchesFlags::DEFAULT;

实例:

MatimageLeftPoint, imageRightPoint;

drawKeypoints(imageRgbLeft,keyPointLeft, imageLeftPoint, Scalar::all(-1), DrawMatchesFlags::DEFAULT);

imshow("imageLeftPoint",imageLeftPoint);

drawKeypoints(imageRgbRight,keyPointRight, imageRightPoint, Scalar::all(-1), DrawMatchesFlags::DEFAULT);

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值