FLANN特征点匹配问题

使用FLANN进行特征点匹配:
使用FlannBasedMatcher接口以及函数FLANN()函数实现快速高效的匹配(快速最近邻逼近搜索函数库)FLANN
FlannBasedMatcher类也是继承自DescriptorMatcher,并且也是match方法进行匹配,
找到最佳的匹配方法:DescriptorMatch::match方法match函数从每个描述符中查询集中找到最佳匹配,C++ void DescriptorMatch::matcher(const Mat& queryDescriptors,const Mat& trainDescriptors,vector& matches,const Mat& mask=Mat())
1.查询描述符
2.训练描述符
3.得到的匹配,若查询描述符有在腌膜中被标记出来,则没有匹配添加到描述符中去,
4.指定输入查询和训练描述符循序匹配的腌膜
采用FLANN算法匹配描述符向量的过程和暴力匹配的过程程序是一致的
FlannBasedMatcher matcher;
vector matches;
matcher.match(Descriptors1,Descriptors2,matches); matches就是匹配到的向量
可以使用FLANN结合SURF进行关键点的描述和匹配:
1.用SURF进行关键点和描述符的提取。
SURF detector.detect(),extractor.compute();
2.接下来就是用FLANN进行匹配的
创建基于FLANN的描述符匹配对象
FlannBasedMatcher matcher;
vector train_desc_collection(1,srcImgDescriptors);
matcher.add(train_desc_collection);
matcher.train();

在摄像头下要进行连续匹配的:
匹配训练和测试描述符
vector matches;
matcher.knnMatch(captureDescriptors,matches,2); matches就是匹配到的特征向量

传说中的劳式算法: 目的就是得到优秀的匹配点
vector goodMatches;
for(unsigned int i=0;i {
if(matches[i][0].distance < 0.6*matches[i][1].distance)
goodMatches.push_back(matches[i][0]);
}goodMatches就是最佳的匹配了。

你可能感兴趣的:(FLANN特征点匹配问题)