带有Lowe’s算法的SIFT特征提取和匹配
采用Lowe‘s的算法选出优秀匹配点。
#include "highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/legacy/legacy.hpp"
#include <iostream> using namespace cv;
using namespace std;int main()
{Mat image01 = imread("C:\\Users\\Administrator\\Desktop\\1_A.jpg", 1);Mat image02 = imread("C:\\Users\\Administrator\\Desktop\\1_B.jpg", 1);imshow("p1", image01);imshow("p2", image02);//灰度图转换 Mat image1, image2;//声明表示图像的向量cvtColor(image01, image1, CV_RGB2GRAY);//将彩色图像灰度化,输出为image1cvtColor(image02, image2, CV_RGB2GRAY);//提取特征点 SiftFeatureDetector siftDetector(800);//构造SIFT特征检测器,Hessian矩阵阈值,在这里调整精度,值越大点越少,越精准 vector<KeyPoint> keyPoint1, keyPoint2;//特征点的向量siftDetector.detect(image1, keyPoint1);//检测SIFT特征siftDetector.detect(image2, keyPoint2);//特征点描述,为下边的特征点匹配做准备 SiftDescriptorExtractor SiftDescriptor;//构造SIFT描述子提取器Mat imageDesc1, imageDesc2;//声明表示图像的向量SiftDescriptor.compute(image1, keyPoint1, imageDesc1);//提取SIFT描述子SiftDescriptor.compute(image2, keyPoint2, imageDesc2);FlannBasedMatcher matcher;//构造匹配器vector<vector<DMatch> > matchePoints;//匹配点的向量vector<DMatch> GoodMatchePoints;//更好匹配点的向量//不太明白vector<Mat> train_desc(1, imageDesc1);matcher.add(train_desc);matcher.train();matcher.knnMatch(imageDesc2, matchePoints, 2);cout << "total match points: " << matchePoints.size() << endl;//一共的匹配点数// Lowe's algorithm,获取优秀匹配点for (int i = 0; i < matchePoints.size(); i++){if (matchePoints[i][0].distance < 0.6 * matchePoints[i][1].distance)//如果最近的距离除以次近的距离得到的比率ratio少于某个阈值T,则接受这一对匹配点{GoodMatchePoints.push_back(matchePoints[i][0]);}}Mat first_match;drawMatches(//使用函数 drawMatches来绘制检测到的匹配点image02, keyPoint2, //第一幅图像及其特征点image01, keyPoint1, //第二幅图像及其特征点GoodMatchePoints, //匹配结果first_match//生成的图像);imshow("first_match ", first_match);imwrite("C:\\Users\\Administrator\\Desktop\\first_match.jpg", first_match);waitKey();return 0;
}
输入图像:
输出图像:
匹配点明显减少
带有Lowe’s算法的SIFT特征提取和匹配相关推荐
- 烟雾环境下对RGB图SIFT特征提取,匹配及深度图有效值的影响
烟雾环境下对RGB图SIFT特征提取,匹配及深度图有效值的影响 文章目录 烟雾环境下对RGB图SIFT特征提取,匹配及深度图有效值的影响 1 环境配置 1.1 opencv_contrib 1.2 M ...
- SIFT特征提取和匹配
一.sift特征原理部分: SIFT特征详解 - Brook_icv - 博客园 (cnblogs.com) sift特征提取算法_July_Zh1的博客-CSDN博客_sift特征提取算法 二.si ...
- OpenCV实现SIFT特征提取与匹配
前言 本文介绍如何利用OpenCV从两幅图像中提取定位精度较高的尺度不变特征变换(SIFT)特征,并结合特征匹配方法建立两幅图像的特征对应关系. 1. 程序架构 利用MFC实现了简易的Demo程序以便 ...
- SIFT特征提取算法总结
转自:http://www.jellon.cn/index.php/archives/374 一.综述 Scale-invariant feature transform(简称SIFT)是一种图像特征 ...
- 计算机视觉——SIFT特征提取与检索+匹配地理标记图像+RANSAC算法
SIFT特征提取与检索 1. SIFT算法 1.1 基本概念 1.2 SIFT算法基本原理 1.2.1 特征点 1.2.2 尺度空间 1.2.3 高斯函数 1.2.4 高斯模糊 1.2.5 高斯金字塔 ...
- 图像特征提取与匹配——SIFT算法
图像特征提取与匹配--SIFT算法 尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种用来侦测与描述影像中局部性特征的算法,它在空间尺度中寻找极 ...
- SIFT算法详解——图像特征提取与匹配
文章目录 前言 一.建立高斯差分金字塔 1.建立高斯金字塔 2.建立高斯差分金字塔 3.建塔过程中参数的设定及相关细节问题 二.关键点(key points)位置确定 1.阈值化 2.在高斯差分金字塔 ...
- 基于sift特征提取的图像配准算法matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 SIFT 是一种从图像中提取独特不变特征的方法,其特点为基于图像的一些局部特征,而与图像整体的大小和 ...
- sift特征提取算法
简介 SIFT算法是用来提取图像局部特征的经典算法,SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向.SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音 ...
- 计算机视觉(二)HARRIS角点检测算法与SIFT
文章目录 前言 一.HARRIS角点检测算法 1.什么是角点(corner points) 2.角点检测算法的基本思想 3.什么是好的角点检测算法 4.角点特征的数学刻画 5.度量角点响应 6.HAR ...
最新文章
- bash脚本【一】——批量处理文件
- Mybatis二级缓存原理
- 《研磨设计模式》chap14 迭代器模式(3) 举例
- JavaScript——易班优课YOOC课群在线测试自动答题解决方案(五)简单插件
- centos设置服务开机启动
- 第四章 Tomcat服务器的安装及配置2
- 网络流--最大流--POJ 1273 Drainage Ditches
- 操作系统——实验壹——熟悉Linux基础命令及进程管理
- 媒体控件的暂停与播放 0130 winform
- * Dijkstra 堆优化
- Android图片加载之初步认识bitmap
- 算法与数据结构 第1章 当我们谈论算法的时候,我们在谈论什么?
- matlab求两个向量均值,matlab求两个总体的均值向量和协方差矩阵
- ESD笔记(二)_ESD测试
- 解析函数的孤立奇点-复变函数
- 浙大玉泉校区-武林门民航售票处-萧山机场
- 【学习方法】无论学什么东西,三个步骤:①大致粗通 ②重点精通 ③融会贯通...
- win10家庭版系统 修改docker为国内镜像
- Android O(SDK 8.0)新特性,刘海屏
- 【调剂】苏州科技大学电子与信息工程学院2021年硕士研究生招生第二批调剂信息公告...