C++ 探测器、提取器和匹配器的分类
我是opencv新手,正在尝试实现两个图像之间的图像匹配。为此,我试图理解特征描述符、描述符提取器和描述符匹配器之间的区别。我遇到了很多术语,并试图在opencv文档网站上阅读它们,但我似乎无法理解这些概念。我理解这里的基本区别 但我在研究这个话题时遇到了以下术语: 快速、GFTT、筛选、冲浪、MSER、星星、球体、轻快、畸形、简短 我知道SIFT和SURF的工作速度有多快,但似乎无法确定上面哪一个只是检测器,哪一个是提取器 然后是配对者 弗兰贝斯、布鲁特福、肯尼马特和其他一些人 经过一些阅读,我认为某些匹配器只能与某些提取器一起使用,如这里所解释的。 给出的分类非常清楚,但它只适用于少数提取器,我不理解float和uchar之间的区别 所以基本上,有人能请你吗C++ 探测器、提取器和匹配器的分类,c++,image-processing,opencv,computer-vision,feature-detection,C++,Image Processing,Opencv,Computer Vision,Feature Detection,我是opencv新手,正在尝试实现两个图像之间的图像匹配。为此,我试图理解特征描述符、描述符提取器和描述符匹配器之间的区别。我遇到了很多术语,并试图在opencv文档网站上阅读它们,但我似乎无法理解这些概念。我理解这里的基本区别 但我在研究这个话题时遇到了以下术语: 快速、GFTT、筛选、冲浪、MSER、星星、球体、轻快、畸形、简短 我知道SIFT和SURF的工作速度有多快,但似乎无法确定上面哪一个只是检测器,哪一个是提取器 然后是配对者 弗兰贝斯、布鲁特福、肯尼马特和其他一些人 经过一些阅读,
FeatureDetector
类实现的,或者哪个是为DescriptorExtractor
类实现的
Q1:根据以下内容对检测器、提取器和匹配器的类型进行分类
如前所述,浮动和uchar,还是其他类型的分类
问题2:解释浮动和uchar分类之间的区别
或者使用哪种分类
关于问题1和问题2,将它们分为float和uchar,这是我所知道的最好的参考资料,也许有人能够完成它
问题3:提及如何初始化(编码)各种类型的探测器,
提取器和匹配器
在回答问题3时,OpenCV使使用各种类型的代码完全相同——主要是您必须选择一个特征检测器。最大的区别在于选择匹配器的类型,您已经提到了OpenCV的3种类型。您最好阅读文档和相关的堆栈溢出问题。此外,一些博客文章也是一个很好的信息来源,比如这些(博客不再可用,所以我不得不从它的谷歌缓存中创建一个原始文本副本)
匹配器用于查找一个描述符是否与列表中的另一个描述符相似。您可以将查询描述符与列表中的所有其他描述符进行比较(BruteForce),或者使用更好的启发式(flannbase,knnMatch)。问题是,启发式算法并不适用于所有类型的描述符。例如,基于法兰的实现仅用于float
描述符,而不用于uchar
(但自2.4.0以来,基于法兰的LSH索引可应用于uchar描述符)
引用有关描述符的信息
类型:
描述符有“法兰基”两种类型,
“蛮力匹配器”、“蛮力L1”和“蛮力哈明路德”。这个
“FlannBase”匹配器使用flann(快速库)进行近似匹配
最近邻居)引擎盖下的库,执行速度更快,但
近似匹配。“BruteForce-*”版本进行了详尽的搜索
用于查找图像特征与目标最近匹配的词典
字典里的单词
一些比较流行的组合是:
特征检测器/描述器提取器/匹配器类型
- (快速,冲浪)/冲浪/法兰基
- (快速,筛分)/筛分/法兰基
- (快速,圆球)/圆球/蛮力
- (快速,圆球)/简短/暴力
- (快速、冲浪)/怪胎/蛮力
动态
调整检测器类型特定检测阈值的适配器
直到在图像或金字塔
适配器中找到足够的关键点
它构造了一个高斯金字塔来检测多个平面上的点
规模棱锥体
适配器对于以下特性描述符非常有用:
它们不是尺度不变的
进一步阅读:
- 对SIFT、FAST、SURF、BRIEF、ORB、BRISK和FREAK做了很好的概述
- 这些算法还对其中的几个算法进行了详细的总结(简短、ORB、BRISK和FREAK)