探测器,提取器和匹配器的分类
我是新来的opencv,并试图实现两个图像之间的图像匹配。 为此,我试图理解特征描述符,描述符提取器和描述符匹配器之间的区别。 我遇到了很多条款,并试图在opencv文档网站上阅读有关条款,但我似乎无法将我的头围绕概念。 我明白了这里的基本区别。 特征检测与描述符提取的区别
但是在研究这个话题的时候我碰到了下面这些术语:
FAST,GFTT,SIFT,SURF,MSER,STAR,ORB,BRISK,FREAK,BRIEF
我明白FAST,SIFT,SURF是如何工作的,但似乎无法弄清楚上面哪些只是检测器,哪些是提取器。
然后是匹配器。
FlannBased,BruteForce,knnMatch和其他一些可能。
经过一番阅读后,我发现某些匹配器只能用于某些提取器,如此处所述。 OpenCV ORB特征检测器如何工作? 给出的分类是相当清楚的,但只有几个提取器,我不明白浮动和uchar之间的区别。
所以基本上,可以请一个人
- 如上所述,根据float和uchar分类检测器,提取器和匹配器的types,还是其他types的分类?
- 解释float和uchar分类之间的差别还是使用哪种分类?
- 提及如何初始化(代码)各种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关于DescriptorMatcher
types的博客文章 :
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)做了详细的总结。