- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我是 opencv 新手,正在尝试实现两个图像之间的图像匹配。为此,我试图了解特征描述符、描述符提取器和描述符匹配器之间的区别。我遇到了很多术语,并试图在 opencv 文档网站上阅读它们,但我似乎无法理解这些概念。我理解了这里的基本区别。 Difference between Feature Detection and Descriptor Extraction
但我在研究该主题时遇到了以下术语:
FAST, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, BRIEF
我了解 FAST、SIFT、SURF 的工作原理,但似乎无法弄清楚以上哪些只是检测器,哪些是提取器。
然后是匹配器。
FlannBased, BruteForce, knnMatch and probably some others.
经过阅读,我认为某些匹配器只能与某些提取器一起使用,如此处所述。 How Does OpenCV ORB Feature Detector Work?给出的分类很清楚,但仅适用于少数提取器,我不明白 float 和 uchar 之间的区别。
所以基本上,有人可以请吗
我知道它要求很多,但我将不胜感激。谢谢。
最佳答案
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)其他都是特征检测器和描述符提取器(SIFT、SURF、ORB、FREAK)。
如果我没记错的话,BRIEF 只是一个描述符提取器,所以它需要通过 FAST 或 ORB 等其他算法检测到的特征。
要确定哪个是哪个,您必须浏览与算法相关的文章或浏览 opencv 文档以查看哪个是为 FeatureDetector
类实现的,或者哪个是为 DescriptorExtractor 实现的
类。
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?
关于问题1和2,将它们分类为float和uchar,link you already posted是我所知道的最好的引用,也许有人可以完成它。
Q3: mention how to initialize (code) various types of detectors, extractors and matchers?
回答问题3,OpenCV 使代码使用的各种类型完全相同——主要是你必须选择一个特征检测器。大部分区别在于选择匹配器的类型,您已经提到了 OpenCV 拥有的 3 个匹配器。最好的办法是阅读文档 code samples 和相关的 Stack Overflow 问题。此外,一些博客文章是很好的信息来源,例如 series of feature detector benchmarks by Ievgen Khvedchenia(该博客不再可用,因此我不得不从其 google 缓存创建原始文本拷贝)。
Matchers 用于查找一个描述符是否与列表中的另一个描述符相似。您可以将您的查询描述符与列表中的所有其他描述符(BruteForce)进行比较,也可以使用更好的启发式方法(FlannBased, knnMatch)。问题是启发式方法不适用于所有类型的描述符。例如,FlannBased 实现仅适用于 float
描述符,但不适用于 uchar
(但从 2.4.0 开始,带有 LSH 索引的 FlannBased 可以应用于 uchar 描述符) .
引用 this App-Solut blog post 关于 DescriptorMatcher
类型:
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.
一些比较流行的组合是:
特征检测器/描述符提取器/匹配器类型
(FAST, SURF)/SURF/FlannBased
(FAST, SIFT)/SIFT/FlannBased
(FAST, ORB)/ORB/Bruteforce
(FAST, ORB)/Brief/Bruteforce
(FAST, SURF)/FREAK/Bruteforce
您可能还注意到,特征检测器有一些适配器(动态、金字塔、网格)。 The App-Solut blog post 很好地总结了它们的用途:
(...) 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 thePyramid
adapter which constructs a Gaussian pyramid to detect points on multiple scales. ThePyramid
adapter is useful for feature descriptors which are not scale invariant.
进一步阅读:
This blog post by Yu Lu 对 SIFT、FAST、SURF、BRIEF、ORB、BRISK 和 FREAK 做了非常好的总结描述。
这些 series of posts by Gil Levi 还对其中几种算法(BRIEF、ORB、BRISK 和 FREAK)做了详细的总结。
关于c++ - 检测器、提取器和匹配器的分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14808429/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!