探测器,提取器和匹配器的分类
c++
computer-vision
feature-detection
image-processing
7
0

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

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

快速,GFTT,SIFT,SURF,MSER,STAR,ORB,BRISK,FREAK,简述

我了解FAST,SIFT,SURF的工作原理,但似乎无法弄清楚上面的哪些仅是检测器,哪些是提取器。

然后是匹配器。

FlannBased,BruteForce,knnMatch以及其他一些可能。

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

所以基本上,有人可以

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

我知道它要求很多,但我将不胜感激。谢谢。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

我了解FAST,SIFT,SURF的工作原理,但似乎无法弄清楚上面的哪些仅是检测器,哪些是提取器。

基本上,从特征检测的该列表/提取(链接篇: FASTGFTTSIFTSURFMSERSTARORBBRISKFREAK简介 ),有的则是只配备了检测器(FAST,GFTT)别人特征检测器和描述符提取器( SIFT,SURF,ORB,FREAK )。

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

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

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

问题2:请解释float和uchar分类之间的区别,或者使用哪种分类?

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

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

回答问题3 ,OpenCV使代码使用相同的类型完全相同-主要是您必须选择一个特征检测器。大部分差异在于选择匹配器的类型,您已经提到了OpenCV具有的三个匹配器。最好的选择是阅读文档, 代码示例以及相关的Stack Overflow问题。此外,某些博客文章也是很好的信息来源,例如Ievgen Khvedchenia的这些功能检测器基准测试系列 (该博客不再可用,因此我不得不从其Google缓存创建原始文本副本)。

匹配器用于查找一个描述符是否类似于列表中的另一个描述符。您可以将查询描述符与列表中的所有其他描述符进行比较( BruteForce ),或者使用更好的启发式方法( FlannBased,knnMatch )。问题在于试探法不适用于所有类型的描述符。例如,FlannBased实现仅用于float描述符,而不能与uchar一起使用(但是从2.4.0版本开始,具有LSH索引的FlannBased可以应用于uchar描述符)。

引用有关DescriptorMatcher类型的此App-Solut博客文章

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

一些更流行的组合是:

特征检测器/提取器提取器/匹配器类型

  • (快速,SURF)/ SURF / FlannBased

  • (快速,SIFT)/ SIFT / FlannBased

  • (快速,ORB)/ ORB /暴力破解

  • (快速,ORB)/简介/ Bruteforce

  • (快速,冲浪)/怪胎/蛮力

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

(...),还可以使用几个适配器来更改关键点检测器的行为。例如, Dynamic适配器可调整特定于检测器类型的检测阈值,直到在图像中找到足够的关键点为止;而Pyramid适配器Pyramid构建高斯金字塔以检测多个尺度上的点。 Pyramid适配器对于不变比例的特征描述符很有用。

进一步阅读:

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题