OpenCV中feature2D——BFMatcher和FlannBasedMatcher
作者:holybin
原文:https://blog.csdn.net/holybin/article/details/40926315
Brute Force匹配和FLANN匹配是opencv二维特征点匹配常见的两种办法,分别对应BFMatcher(BruteForceMatcher)和FlannBasedMatcher。BFMatcher的构造函数如下:
C++: BFMatcher::BFMatcher(int normType=NORM_L2, bool crossCheck=false )
Parameters: |
|
FlannBasedMatcher的构造函数如下:
class FlannBasedMatcher : public DescriptorMatcher
{
public:
FlannBasedMatcher(
const Ptr<flann::IndexParams>& indexParams=new flann::KDTreeIndexParams(),
const Ptr<flann::SearchParams>& searchParams=new flann::SearchParams() ); virtual void add( const vector<Mat>& descriptors );
virtual void clear(); virtual void train();
virtual bool isMaskSupported() const; virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const;
protected:
...
};
二者的区别在于BFMatcher总是尝试所有可能的匹配,从而使得它总能够找到最佳匹配,这也是Brute Force(暴力法)的原始含义。而FlannBasedMatcher中FLANN的含义是Fast Library forApproximate Nearest Neighbors,从字面意思可知它是一种近似法,算法更快但是找到的是最近邻近似匹配,所以当我们需要找到一个相对好的匹配但是不需要最佳匹配的时候往往使用FlannBasedMatcher。当然也可以通过调整FlannBasedMatcher的参数来提高匹配的精度或者提高算法速度,但是相应地算法速度或者算法精度会受到影响。
此外,使用特征提取过程得到的特征描述符(descriptor)数据类型有的是float类型的,比如说SurfDescriptorExtractor,
SiftDescriptorExtractor,有的是uchar类型的,比如说有ORB,BriefDescriptorExtractor。对应float类型的匹配方式有:FlannBasedMatcher,BruteForce<L2<float>>,BruteForce<SL2<float>>,BruteForce<L1<float>>。对应uchar类型的匹配方式有:BruteForce<Hammin>,BruteForce<HammingLUT>。所以ORB和BRIEF特征描述子只能使用BruteForce匹配法。
最新文章
- win7下virtualbox装linux共享win7文件问题(已测试可用)
- Part 1 What is SSMS?
- 解决EnableVisualStyles Bug
- 【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 二)
- c 按输入的字母来输出对应效果
- 201521123071 《JAVA程序设计》第七周学习总结
- EF(二)Model Fiirst
- matlab练习程序(点云下采样)
- [数据可视化之一]Pandas单变量画图
- laravel 接口跨域
- Python Selenium element is not reachable by keyboard
- 图像识别___YUV学习手记
- IE下css bug集合-翻译自haslayout.net
- React Native之进度条ProgressViewIOS的使用
- 【树形DP】洛谷P1352_没有上司的舞会
- Hibernate-【查询】
- 【laravel54】创建控制器、模型
- 学习:100个高质量Java开发者博客
- javaWeb 使用线程池+队列解决";订单并发";问题
- 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)