探测器,提取器和匹配器的分类

我是新来的opencv,并试图实现两个图像之间的图像匹配。 为此,我试图理解特征描述符,描述符提取器和描述符匹配器之间的区别。 我遇到了很多条款,并试图在opencv文档网站上阅读有关条款,但我似乎无法将我的头围绕概念。 我明白了这里的基本区别。 特征检测与描述符提取的区别

但是在研究这个话题的时候我碰到了下面这些术语:

FAST,GFTT,SIFT,SURF,MSER,STAR,ORB,BRISK,FREAK,BRIEF

我明白FAST,SIFT,SURF是如何工作的,但似乎无法弄清楚上面哪些只是检测器,哪些是提取器。

然后是匹配器。

FlannBased,BruteForce,knnMatch和其他一些可能。

经过一番阅读后,我发现某些匹配器只能用于某些提取器,如此处所述。 OpenCV ORB特征检测器如何工作? 给出的分类是相当清楚的,但只有几个提取器,我不明白浮动和uchar之间的区别。

所以基本上,可以请一个人

  1. 如上所述,根据float和uchar分类检测器,提取器和匹配器的types,还是其他types的分类?
  2. 解释float和uchar分类之间的差别还是使用哪种分类?
  3. 提及如何初始化(代码)各种types的检测器,提取器和匹配器?

我知道它要求很多,但我会非常感激。 谢谢。

我明白FAST,SIFT,SURF是如何工作的,但似乎无法弄清楚上面哪些只是检测器,哪些是提取器。

基本上,从特征检测器/提取器列表(链接到文章: FAST , GFTT , SIFT , SURF , MSER , STAR , ORB , BRISK , FREAK , BRIEF ),其中一些仅仅是特征检测器( FAST,GFTT )特征检测器和描述符提取器( SIFT,SURF,ORB,FREAK )。

如果我没有记错的话, BRIEF只是一个描述符提取器,所以它需要使用FAST或ORB等其他algorithm检测到的特征。

为了确定哪个是哪个,您必须浏览与该algorithm相关的文章,或者浏览opencv文档以查看哪些是针对FeatureDetector类实现的,哪些针对DescriptorExtractor类。

Q1:如上所述,根据float和uchar分类检测器,提取器和匹配器的types,还是其他types的分类?

Q2:解释float和uchar分类之间的区别还是使用哪种分类?

关于问题1和2 ,要将它们分类为float和uchar, 你已经发布的链接是我所知道的最好的参考,也许有人能够完成它。

问题3:提及如何初始化(编码)各种types的探测器,提取器和匹配器?

回答问题3 ,OpenCV使得代码使用各种types – 主要是你必须select一个特征检测器。 大部分区别在于select匹配器的types,而您已经提到了OpenCV所具有的3个。 这里最好的select是阅读文档, 代码示例以及相关的Stack Overflow问题。 此外,一些博客文章是一个很好的信息来源,像这些由Ievgen Khvedchenia的function检测器基准系列 (博客不再可用,所以我不得不从谷歌caching创build原始文本副本)。

匹配器用于查找描述符是否与列表中的另一个描述符类似。 您可以将您的查询描述符与列表中的所有其他描述符( BruteForce )进行比较,也可以使用更好的启发式( FlannBased,knnMatch )。 问题是启发式不适用于所有types的描述符。 例如,FlannBased实现只用于float描述符,不能用于uchar (但是从2.4.0开始,FlannBased with LSH index可以应用于uchar描述符)。

引用这个App-Solut关于DescriptorMatchertypes的博客文章 :

DescriptorMatcher有“FlannBased”,“BruteForceMatcher”,“BruteForce-L1”和“BruteForce-HammingLUT”等品种。 “FlannBased”匹配器使用引擎盖下的flann(近似最近邻居的快速库)来执行更快但近似的匹配。 “BruteForce- *”版本彻底地search字典,以find图像特征与字典中单词的最接近的匹配。

一些更受欢迎的组合是:

特征探测器/描述符提取器/匹配器types

  • (FAST,SURF)/ SURF / FlannBased

  • (FAST,SIFT)/ SIFT / FlannBased

  • (FAST,ORB)/ ORB /暴力

  • (FAST,ORB)/ BRIEF / Bruteforce

  • (FAST,SURF)/ FREAK / Bruteforce

您可能还注意到特征检测器中有几个适配器(dynamic,金字塔,网格) 。 App-Solut博客文章很好地总结了他们的用法:

(…),还有一些适配器可以用来改变关键点检测器的行为。 例如Dynamic适配器,其调整检测器types特定的检测阈值,直到在图像中find足够的关键点或者构造高斯金字塔以检测多个尺度上的点的Pyramid适配器。 Pyramid适配器对于不是尺度不变的特征描述符非常有用。

进一步阅读:

  • Yu Lu的这篇博客文章对SIFT,FAST,SURF,BRIEF,ORB,BRISK和FREAK做了很好的总结。

  • Gil Levi的这些系列文章也对这些algorithm(BRIEF,ORB,BRISK和FREAK)做了详细的总结。