基于SURF算法的图像拼接


基于SURF算法的图像拼接处理,运用RANSAC算法,单向性等原理进行图像拼接。
资源截图
代码片段和文件信息
#include 
#include   
#include   
#include
#include 
#include 
#include   
#include   
#include
using namespace cv; 
using namespace std; 

int main()
{
//读入图像并进行灰度处理 
Mat srcImage1 = imread(“1.jpg“0);  
Mat srcImage2 = imread(“2.jpg“0);  
//cout<<“img1矩阵大小:“< //cout<<“img2矩阵大小:“< Mat tmpImage1img1;
Mat tmpImage2img2;
//对原图像进行两次缩放处理
pyrDown(srcImage1tmpImage1Size(srcImage1.cols/2srcImage1.rows/2));
pyrDown(tmpImage1img1Size(tmpImage1.cols/2tmpImage1.rows/2));
pyrDown(srcImage2tmpImage2Size(srcImage2.cols/2srcImage2.rows/2));
pyrDown(tmpImage2img2Size(tmpImage2.cols/2tmpImage2.rows/2));
imshow(“Src1“img1);  
imshow(“Src2“img2);
//imwrite(“12.jpg“img1);
//imwrite(“13.jpg“img2);
//第一步,用SURF算子检测关键点;
     int minHessian=400;
    SurfFeatureDetector detector(minHessian);
    std::vector m_LeftKeym_RightKey;//构造2个专门由点组成的点向量用来存储特征点
    detector.detect(img1m_LeftKey);//将img1图像中检测到的特征点存储起来放在m_LeftKey中
    detector.detect(img2m_RightKey);//同理
cout<<“图像1特征点的个数:“< cout<<“图像2特征点的个数:“< //计算特征向量
    SurfDescriptorExtractor extractor;//定义描述子对象
    cv::Mat descriptors1 descriptors2;//存放特征向量的矩阵
    extractor.compute(img1m_LeftKeydescriptors1);
    extractor.compute(img2m_RightKeydescriptors2);
cout<<“图像1特征描述矩阵大小:“<riptors1.size()  
<<“,特征向量个数:“<riptors1.rows<<“,维数:“<riptors1.cols< cout<<“图像2特征描述矩阵大小:“<riptors2.size()  
<<“,特征向量个数:“<riptors2.rows<<“,维数:“<riptors2.cols< //画出特征点  
Mat img_m_LeftKeyimg_m_RightKey;  
drawKeypoints(img1m_LeftKeyimg_m_LeftKeyScalar::all(-1)0);  //cvScalar(25500)画的圈圈是蓝色,对应于特征点的颜色DrawMatchesFlags::DRAW_RICH_KEYPOINTS表示关键点上圆圈的尺寸与特征的尺度成正比,对应于0,是“标志位”的意思
drawKeypoints(img2m_RightKeyimg_m_RightKeyScalar::all(-1)0);  
imshow(“Keysrc1“img_m_LeftKey);  
imshow(“Keysrc2“img_m_RightKey);  
imwrite(“图像1的特征点.jpg“img_m_LeftKey);
imwrite(“图像2的特征点.jpg“img_m_RightKey);
//匹配两幅图像的描述子 
//用burte force进行匹配特征向量
    BruteForceMatcher>matcher;//定义一个burte force matcher对象
vector matches;//定义数据类型为matches的vector容器
matcher.match( descriptors1 descriptors2 matches );//匹配两个图像的特征矩阵  
cout<<“Match个数:“< //计算匹配结果中距离的最大和最小值  
//距离是指两个特征向量间的欧式距离,表明两个特征的差异,值越小表明两个特征点越接近  
double max_dist = 0;  
double min_dist = 100;  
for(int i=0; i {  
double dist = matches[i].distance;  
if(dist < min_dist) min_dist = dist;  
if(dist > max_dist) max_dist = dist;  
}  
cout<<“最大距离:“< cout<<“最小距离:“<
//筛选出较好的匹配点  
vector goodMatches;  
for(int i=0; i {  
if(matche

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-03-19 21:44  Project17
     目录           0  2015-03-15 12:29  Project17Debug
     文件      179712  2015-03-19 21:39  Project17DebugProject17.exe
     文件      737700  2015-03-19 21:39  Project17DebugProject17.ilk
     文件     2739200  2015-03-19 21:39  Project17DebugProject17.pdb
     目录           0  2015-03-19 21:39  Project17Project17
     文件    17498112  2015-03-19 21:44  Project17Project17.sdf
     文件         894  2015-01-23 11:00  Project17Project17.sln
     文件       22016  2015-03-19 21:44  Project17Project17.v11.suo
     文件     1261106  2015-03-08 12:36  Project17Project171.jpg
     文件     1272244  2015-03-08 12:36  Project17Project172.jpg
     文件     1300181  2015-03-08 12:36  Project17Project173.jpg
     文件     1284305  2015-03-08 12:36  Project17Project174.jpg
     文件     1313911  2015-03-08 12:36  Project17Project175.jpg
     文件     1305019  2015-03-08 12:36  Project17Project176.jpg
     目录           0  2015-03-19 21:39  Project17Project17Debug
     文件         560  2015-03-19 21:39  Project17Project17Debugcl.command.1.tlog
     文件       22222  2015-03-19 21:39  Project17Project17DebugCL.read.1.tlog
     文件         402  2015-03-19 21:39  Project17Project17DebugCL.write.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink-cvtres.read.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink-cvtres.write.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink-rc.read.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink-rc.write.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10096-cvtres.read.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10096-cvtres.write.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10096-rc.read.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10096-rc.write.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10096.read.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10096.write.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10160-cvtres.read.1.tlog
     文件           2  2015-03-19 21:39  Project17Project17Debuglink.10160-cvtres.write.1.tlog
............此处省略109个文件信息

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

发表评论

评论列表(条)