ORB算法特征匹配
来源:互联网 发布:模拟地理位置的软件 编辑:程序博客网 时间:2024/05/16 12:57
ORB算法是brief算法的改进版。ORB算法比SIFT算法效率高两个数量级。计算速度上ORB是SIFT的100倍,是SURF的10倍。综合性能是最好的。
ORB算法没有解决brief算法的不具备尺度不变性的缺点。但是因为是追求速度的算法,常常适用于视屏流的处理,可以通过跟踪或者一些启发式的策略来解决尺度不变性的问题。
在给出的程序代码中,使用了基于FLANN的描述符对象匹配。
高维数据的快速最近邻算法FLANN
程序中使用的是LinearIndexParams,该结构对应的索引进行线性的、暴力(brute-force)的搜索。
其他的还有基于kd树的索引。
KNN算法与Kd树
kd树原理比较复杂。。。。。。以后有时间再看。。。。。。。。
#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/features2d/features2d.hpp>#include<opencv2/xfeatures2d/nonfree.hpp>#include<iostream>using namespace std;using namespace cv;int main(){ Mat srcImage = imread("1.jpg",1); imshow("原始图",srcImage); Mat srcImage_gray; cvtColor(srcImage,srcImage_gray,CV_BGR2GRAY); Ptr<ORB> Detector = ORB::create(400); Ptr<ORB> Extrator = ORB::create(); vector<KeyPoint>keyPoints; Mat descriptor; Detector->detect(srcImage_gray,keyPoints); Extrator->compute(srcImage_gray,keyPoints,descriptor); flann::Index flannIndex(descriptor,flann::LshIndexParams(12,20,2),cvflann::FLANN_DIST_HAMMING); VideoCapture cap(0); cap.set(CV_CAP_PROP_FRAME_WIDTH,360); cap.set(CV_CAP_PROP_FRAME_HEIGHT,900); unsigned int frameCount = 0; while (1) { double time0 = static_cast<double>(getTickCount()); Mat captureImage, captureImage_gray; cap >> captureImage; if (captureImage.empty()) continue; cvtColor(captureImage,captureImage_gray,CV_BGR2GRAY); vector<KeyPoint>captureKeyPoints; Mat captureDescriptor; Detector->detect(captureImage_gray,captureKeyPoints); Extrator->compute(captureImage_gray,captureKeyPoints,captureDescriptor); Mat matchIndex(captureDescriptor.rows, 2, CV_32SC1); Mat matchDistance(captureDescriptor.rows,2,CV_32FC1); flannIndex.knnSearch(captureDescriptor,matchIndex,matchDistance,2,flann::SearchParams()); vector<DMatch>goodMatches; for (int i = 0; i < matchDistance.rows; i++) { if (matchDistance.at<float>(i, 0) < 0.6*matchDistance.at<float>(i, 1)) { DMatch dmarches(i, matchIndex.at<int>(i, 0), matchDistance.at<float>(i, 0)); goodMatches.push_back(dmarches); } } Mat resultImage; drawMatches(captureImage,captureKeyPoints,srcImage,keyPoints,goodMatches,resultImage); imshow("匹配窗口",resultImage); cout << "帧率:" << getTickFrequency() / (getTickCount() - time0) << endl; if (char(waitKey(1) == 27))break; }![这里写图片描述](http://img.blog.csdn.net/20170609181804860?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHh6eHh6ZGx1dA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) return 0;}
可见帧率比起SURF算法要高出很多。
opencv3.2 SURF实现特征点匹配
阅读全文
0 0
- ORB算法特征匹配
- ORB 特征点检测匹配算法
- 特征点匹配——ORB算法介绍
- 基于ORB特征提取算法图像匹配 python实现
- 特征点匹配——ORB算法介绍
- 特征点匹配——ORB算法介绍
- Android Jni OpenCV-基于ORB算法特征点匹配
- 特征提取算法--ORB
- ORB特征检测算法
- 特征提取算法--ORB
- ORB特征检测与匹配
- ORB特征提取与匹配
- ORB 特征检测与匹配
- ORB特征提取与匹配
- Orb匹配算法代码
- 【转】ORB特征提取算法
- ORB特征检测算法小结
- 【特征检测】ORB特征提取算法
- InfluxDB查询问题
- 忽略证书验证的CloseableHttpClient
- junit4_SpringMVC_Dubbo
- 文章标题
- kotlin开发安卓
- ORB算法特征匹配
- Java泛型中的标记符含义
- 史上最全Python数据分析学习路径图
- 视觉SLAM漫谈
- 139. Word Break Medium
- Xtrabackup物理备份Mysql(Innodb引擎)-全备份和增量备份
- LoadRunner 技巧之 集合点设置
- 一个人才数据网的爬虫软件
- Java基础学习之发送邮件