我正在尝试制作一个基于描述符的检测器。我正在使用 OpenCV,我看到有很多特征类型和描述符类型,还有匹配器类型。更多我还看到可以有组合类型,如 Grid 或 Pyramid 用于特征类型。
我还没有找到对它们的很好的解释(金字塔除外,它说这是好的“for detectors that are not inherently scaled”)。我想对每种类型和每种组合(特征-描述符-匹配器)进行简短描述,以形成一个想法,而不是创建详尽的工作来搜索和验证每种可能的组合。
有人知道这方面的更多信息吗?
最佳答案
术语特征通常用于两种不同的事物:
- 特征检测器,
- 特征描述符。
检测器旨在......好吧......检测有趣的点,即在视点和光照变化下稳定的点,并且在单应性估计或对象检测等任务中产生良好性能的点。
描述符旨在为在所述视点和光照变化下检测到的点达到良好的匹配性能。
有些点是单独设计的,没有任何描述符。大多数最古老的兴趣点(Moravec、Harris、良好的特征)和一小部分最近的兴趣点 (FAST) 都是这种情况。
然后,通过点检测器和描述符的协同设计实现了重大的性能改进,这就是SIFT 和SURF 所采用的方法。 为简单起见,没有为描述符指定特定名称(尽管您可以注意到 SIFT 描述符和 HoG 特征彼此非常接近)。 这些描述符是实值(即浮点 vector )。
最后,为了在有限的硬件上实现快速运行,设计了一个原始关键点检测器 (FAST)。 FAST 依赖于简单的二进制 测试。 然后使用相同的二进制测试方法来设计描述符,这就是你得到 BRIEF、BRISK、FREAK、ORB 的方式...... 因此,您得到的是二进制描述符(比特流)。
最后总结一下:
- 您可以随意交叉描述符和检测器。请注意,当检测器没有尺度时,您可能必须为需要它的描述符(SIFT、SURF)猜测一个尺度(或强加一个默认尺度);
- 可以使用任何匹配器,只要您从每个图像中获得相同类型的描述符即可。不同的是匹配器使用的特征距离;
- SIFT 和 SURF 是实值,因此需要使用 L2 距离进行匹配。最近的描述符(BRIEF、BRISK、FREAK、ORB)是二进制的,距离必须用汉明距离来衡量。
关于python - OpenCV:何时使用 GridAdaptedFeatureDetector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819086/