检测器,提取器和匹配器的分类 [英] Classification of detectors, extractors and matchers

查看:291
本文介绍了检测器,提取器和匹配器的分类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是opencv的新手,试图实现两个图像之间的图像匹配。为此,我试图理解特征描述符,描述符提取器和描述符匹配器之间的区别。我遇到了很多条款,并试图在opencv文档网站上阅读它们,但我似乎不能围绕这些概念。我理解这里的基本区别。 特征检测和描述符提取之间的差异



但我在学习这个主题时遇到了以下术语:


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




我理解FAST,SIFT,SURF如何工作,似乎找出上面哪些只是检测器和哪些是提取器。



然后有匹配器。


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


在一些阅读后,我想到某些匹配器只能用于这里解释的特定提取器。 OpenCV ORB功能检测器如何工作?
分类给定是相当清楚,但它只为几个提取器,我不明白float和uchar之间的区别。



基本上,有人可以请


  1. 分类检测器,

  2. 解释float和uchar分类之间的差异,或者使用哪种分类?

  3. 提及如何初始化(代码)各种类型的检测器,提取器和匹配器?

很多,但我会非常感激。
谢谢。

解决方案


我理解FAST,SIFT,SURF如何工作,


基本上,从上面的例子中可以看出,特征检测器/提取器列表(链接到文章: FAST GFTT SIFT SURF MSER STAR ORB BRISK FREAK 简报),其中一些只是特征检测器( FAST,GFTT )其他都是特征检测器和描述符提取器( SIFT,SURF,ORB,FREAK )。



如果我记得正确,简要只是一个描述符提取器,因此它需要某些其他算法检测的功能,如FAST或ORB。 p>

要确定哪个是哪个,您必须浏览与算法相关的文章或浏览opencv文档,以了解哪个是为 FeatureDetector 类或 DescriptorExtractor 类。


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



Q2:解释


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


Q3:提及如何初始化各种类型的检测器,
提取器和匹配器?


回答问题3 ,OpenCV代码使用各种类型完全相同 - 主要是你必须选择一个特性检测器。大部分的区别在于选择匹配器的类型,你已经提到了OpenCV的3个。您最好在这里阅读文档,代码示例,以及相关的Stack Overflow问题。此外,一些博客帖子是一个很好的信息来源,像这些 Ievgen Khvedchenia的一系列功能检测器基准



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



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


DescriptorMatcher属于FlannBased,
BruteForceMatcher,BruteForce-L1和BruteForce-HammingLUT的品种。
FlannBased匹配器使用flann(快速库近似
最近邻)库在引擎盖下执行更快,但
近似匹配。 BruteForce- *版本穷尽地搜索
字典找到图像特征到字典中的
字的最接近的匹配。


一些更受欢迎的组合是:



Feature Detectors / Decriptor Extractors / Matchers types




  • (FAST,SURF)/ SURF / FlannBased


  • (FAST,ORB)/ ORB / Bruteforce

  • $ p>(FAST,ORB) b $ b

    (FAST,SURF)/ FREAK / Bruteforce

    (FAST,ORB)/ BRIEF / Bruteforce

    / li>


您可能也注意到有几个适配器(动态,金字塔,网格) App-Solut博客文章总结了他们的用途:



< blockquote>

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


进一步阅读:




I am new to opencv and trying to implement image matching between two images. For this purpose, I'm trying to understand the difference between feature descriptors, descriptor extractors and descriptor matchers. I came across a lot of terms and tried to read about them on the opencv documentation website but I just can't seem to wrap my head around the concepts. I understood the basic difference here. Difference between Feature Detection and Descriptor Extraction

But I came across the following terms while studying on the topic :

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

I understand how FAST, SIFT, SURF work but can't seem to figure out which ones of the above are only detectors and which are extractors.

Then there are the matchers.

FlannBased, BruteForce, knnMatch and probably some others.

After some reading, I figured that certain matchers can only be used with certain extractors as explained here. How Does OpenCV ORB Feature Detector Work? The classification given is quite clear but it's only for a few extractors and I don't understand the difference between float and uchar.

So basically, can someone please

  1. classify the types of detectors, extractors and matchers based on float and uchar, as mentioned, or some other type of classification?
  2. explain the difference between the float and uchar classification or whichever classification is being used?
  3. mention how to initialize (code) various types of detectors, extractors and matchers?

I know its asking for a lot but I'll be highly grateful. Thank you.

解决方案

I understand how FAST, SIFT, SURF work but can't seem to figure out which ones of the above are only detectors and which are extractors.

Basically, from that list of feature detectors/extractors (link to articles: FAST, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, BRIEF), some of them are only feature detectors (FAST, GFTT) others are both feature detectors and descriptor extractors (SIFT, SURF, ORB, FREAK).

If I remember correctly, BRIEF is only a descriptor extractor, so it needs features detected by some other algorithm like FAST or ORB.

To be sure which is which, you have to either browse the article related to the algorithm or browse opencv documentation to see which was implemented for the FeatureDetector class or which was for the DescriptorExtractor class.

Q1: classify the types of detectors, extractors and matchers based on float and uchar, as mentioned, or some other type of classification?

Q2: explain the difference between the float and uchar classification or whichever classification is being used?

Regarding questions 1 and 2, to classify them as float and uchar, the link you already posted is the best reference I know, maybe someone will be able to complete it.

Q3: mention how to initialize (code) various types of detectors, extractors and matchers?

Answering question 3, OpenCV made the code to use the various types quite the same - mainly you have to choose one feature detector. Most of the difference is in choosing the type of matcher and you already mentioned the 3 ones that OpenCV has. Your best bet here is to read the documentation, code samples, and related Stack Overflow questions. Also, some blog posts are an excellent source of information, like these series of feature detector benchmarks by Ievgen Khvedchenia (The blog is no longer available so I had to create a raw text copy from its google cache).

Matchers are used to find if a descriptor is similar to another descriptor from a list. You can either compare your query descriptor with all other descriptors from the list (BruteForce) or you use a better heuristic (FlannBased, knnMatch). The problem is that the heuristics do not work for all types of descriptors. For example, FlannBased implementation used to work only with float descriptors but not with uchar's (But since 2.4.0, FlannBased with LSH index can be applied to uchar descriptors).

Quoting this App-Solut blog post about the DescriptorMatcher types:

The DescriptorMatcher comes in the varieties "FlannBased", "BruteForceMatcher", "BruteForce-L1" and "BruteForce-HammingLUT". The "FlannBased" matcher uses the flann (fast library for approximate nearest neighbors) library under the hood to perform faster but approximate matching. The "BruteForce-*" versions exhaustively searche the dictionary to find the closest match for an image feature to a word in the dictionary.

Some of the more popular combinations are:

Feature Detectors / Decriptor Extractors / Matchers types

  • (FAST, SURF) / SURF / FlannBased

  • (FAST, SIFT) / SIFT / FlannBased

  • (FAST, ORB) / ORB / Bruteforce

  • (FAST, ORB) / BRIEF / Bruteforce

  • (FAST, SURF) / FREAK / Bruteforce

You might have also noticed there are a few adapters (Dynamic, Pyramid, Grid) to the feature detectors. The App-Solut blog post summarizes really nicely their use:

(...) and there are also a couple of adapters one can use to change the behavior of the key point detectors. For example the Dynamic adapter which adjusts a detector type specific detection threshold until enough key-points are found in an image or the Pyramid adapter which constructs a Gaussian pyramid to detect points on multiple scales. The Pyramid adapter is useful for feature descriptors which are not scale invariant.

Further reading:

这篇关于检测器,提取器和匹配器的分类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆