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

hri*_*dle 58 c++ opencv image-processing computer-vision feature-detection

我是opencv的新手,并尝试在两个图像之间实现图像匹配.为此,我试图理解特征描述符,描述符提取器和描述符匹配器之间的区别.我遇到了很多术语,试图在opencv文档网站上阅读它们,但我似乎无法理解这些概念.我理解这里的基本区别.特征检测与描述符提取的区别

但是在研究这个主题时我遇到了以下术语:

快速,GFTT,SIFT,SURF,MSER,STAR,ORB,BRISK,FREAK,Brief

我理解FAST,SIFT,SURF是如何工作的,但似乎无法弄清楚上面哪些只是探测器,哪些是提取器.

然后是匹配者.

FlannBased,BruteForce,knnMatch以及其他一些人.

经过一些阅读后,我认为某些匹配器只能与某些提取器一起使用,如此处所述.OpenCV ORB功能检测器如何工作? 给出的分类非常清楚,但它仅适用于少数提取器,我不理解float和uchar之间的区别.

所以基本上,有人可以请

  1. 如上所述,基于float和uchar,或其他类型的分类,对检测器,提取器和匹配器的类型进行分类?
  2. 解释float和uchar分类之间的区别或者使用哪种分类?
  3. 提到如何初始化(代码)各种类型的探测器,提取器和匹配器?

我知道它要求很多,但我将非常感激.谢谢.

Rui*_*ues 78

我理解FAST,SIFT,SURF是如何工作的,但似乎无法弄清楚上面哪些只是探测器,哪些是提取器.

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

如果我没记错的话,BRIEF只是一个描述符提取器,因此它需要一些其他算法检测到的功能,如FAST或ORB.

要确定哪个是哪个,您必须浏览与算法相关的文章或浏览opencv文档以查看哪个是为FeatureDetector类实现的,哪个是为DescriptorExtractor类实现的.

Q1:如上所述,基于float和uchar,或其他类型的分类,对检测器,提取器和匹配器的类型进行分类?

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

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

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

回答问题3,OpenCV使得代码使用各种类型相同 - 主要是你必须选择一个特征检测器.大多数差异在于选择匹配器的类型,并且您已经提到了OpenCV具有的3个.这里最好的选择是阅读文档,代码示例和相关的Stack Overflow问题.此外,一些博客文章是一个很好的信息来源,如Ievgen Khvedchenia的这些系列特征检测器基准测试(博客不再可用,所以我不得不从谷歌缓存创建一个原始文本副本).

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

引用这篇关于DescriptorMatcher类型的App-Solut博客文章:

DescriptorMatcher有各种各样的"FlannBased","BruteForceMatcher","BruteForce-L1"和"BruteForce-HammingLUT"."FlannBased"匹配器使用引擎盖下的flann(快速库用于近似最近邻居)库来执行更快但近似匹配."BruteForce-*"版本详尽地搜索字典,以找到图像特征与字典中单词最接近的匹配.

一些比较流行的组合是:

特征检测器/ Decriptor Extractors/Matchers类型

  • (快速,SURF)/ SURF/FlannBased

  • (快速,SIFT)/ SIFT/FlannBased

  • (快速,ORB)/ ORB/Bruteforce

  • (FAST,ORB)/ Brief/Bruteforce

  • (快速,冲浪)/ FREAK /暴力

您可能还注意到功能检测器有一些适配器(动态,金字塔,网格).App-Solut博客文章很好地总结了他们的用法:

(...)并且还有一些适配器可用于改变关键点检测器的行为.例如,Dynamic 适配器调整检测器类型特定检测阈值,直到在图像中找到足够的关键点或Pyramid适配器,其构造高斯金字塔以检测多个尺度上的点.该Pyramid适配器是未尺度不变特征描述有用.

进一步阅读:

  • +1 - 很好.如果你能为这些东西添加一些易于理解的参考资料和学习资料,那将是很棒的. (5认同)
  • FREAK不是功能检测器,在您的第一段中说 (2认同)