我了解FAST,SIFT,SURF的工作原理,但似乎无法弄清楚上面的哪些仅是检测器,哪些是提取器。
基本上,从特征检测的该列表/提取(链接篇: FAST , GFTT , SIFT , SURF , MSER , STAR , ORB , BRISK , FREAK , 简介 ),有的则是只配备了检测器(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
适配器对于不变比例的特征描述符很有用。
进一步阅读:
Yu Lu的这篇博客文章对SIFT,FAST,SURF,BRIEF,ORB,BRISK和FREAK进行了非常好的摘要描述。
0
我是opencv的新手,正在尝试实现两个图像之间的图像匹配。为此,我试图了解特征描述符,描述符提取器和描述符匹配器之间的区别。我遇到了很多术语,并试图在opencv文档网站上阅读它们,但我似乎无法完全理解这些概念。我了解这里的基本区别。 特征检测与描述符提取之间的区别
但是在研究该主题时,我遇到了以下术语:
我了解FAST,SIFT,SURF的工作原理,但似乎无法弄清楚上面的哪些仅是检测器,哪些是提取器。
然后是匹配器。
经过一番阅读,我发现某些匹配器只能与某些提取器一起使用,如此处所述。 OpenCV ORB功能检测器如何工作?给出的分类非常清楚,但仅适用于少数提取器,我不了解float和uchar之间的区别。
所以基本上,有人可以
我知道它要求很多,但我将不胜感激。谢谢。