OpenCV:何时使用GridAdaptedFeatureDetector?
我正在尝试制作一个基于描述子的检测器。我使用的是OpenCV,发现有很多不同的特征类型、描述子类型和匹配器类型。此外,我还看到有一些组合类型,比如网格(Grid)或金字塔(Pyramid)用于特征类型。
我没有找到关于这些内容的好解释(除了金字塔,那里提到它适合“那些本身不具备缩放能力的检测器”)。我想要每种类型和每种组合(特征-描述子-匹配器)的简单描述,这样我就能有个大概念,而不需要花费大量时间去搜索和验证每种可能的组合。
有没有人知道更多相关的信息呢?
1 个回答
7
在这里,特征这个词通常指两种不同的东西:
- 特征 检测器,
- 特征 描述符。
检测器的目的是...嗯... 检测一些有趣的点,也就是那些在视角和光照变化下依然稳定的点,这些点在一些任务中表现良好,比如图像配准或物体检测。
而描述符的作用是为了在上述视角和光照变化下,确保检测到的点能够很好地匹配。
有些点是单独设计的,没有任何描述符。这种情况适用于大多数最早的兴趣点(比如Moravec、Harris和好特征)以及一小部分最近的点(如FAST)。
后来,通过共同设计点检测器和描述符,实现了显著的性能提升,这就是SIFT和SURF所采用的方法。为了简单起见,描述符没有特别的名称(不过你可以注意到,SIFT描述符和HoG特征非常相似)。这些描述符是实数值的(也就是浮点向量)。
最后,为了在有限的硬件上实现快速运行,设计了一个原始的关键点检测器(FAST)。FAST依赖于简单的二进制测试。然后,这种二进制测试的方法也被用来设计描述符,这就是你得到BRIEF、BRISK、FREAK、ORB等的原因。因此,你得到的是二进制描述符(比特流)。
最后,如果你想总结一下:
- 你可以随意组合描述符和检测器。只要注意,当一个检测器没有尺度时,你可能需要为需要尺度的描述符(如SIFT、SURF)猜测一个(或强制使用一个默认值);
- 只要你从每张图像中得到相同类型的描述符,就可以使用任何匹配器。不同的地方在于匹配器使用的特征距离;
- SIFT和SURF是实数值的,因此需要使用L2距离进行匹配。最近的描述符(BRIEF、BRISK、FREAK、ORB)是二进制的,距离必须用汉明距离来测量。