20

我正在使用 OpenCV 2.3 进行关键点检测和匹配。但是我对检测算法给出的size和参数有点困惑。response它们到底是什么意思?

根据 OpenCV 手册,我无法弄清楚:

float size:有意义的关键点邻域的直径

float response:选择最强关键点的响应。可用于进一步排序或二次抽样

我认为跟踪的最佳点是响应最高的点,但似乎并非如此。那么,我如何对 surf 检测器返回的一组关键点进行二次采样,以仅在可追踪性方面保留最好的关键点呢?

4

2 回答 2

61

尺寸和响应

SURF是一个blob检测器,简而言之,一个特征的大小就是blob的大小。更准确地说,OpenCV 返回的大小是近似 Hessian 算子长度的一半。大小也称为比例,这是由于斑点检测器的工作方式,即在功能上等于首先用高斯滤波器在几个尺度上模糊图像,然后对图像进行下采样,最后检测具有固定大小的斑点。请参阅下图,显示 SURF 特征的大小。每个特征的大小是绘制圆的半径。从特征中心到圆周的线表示角度或方向。在此图像中,斑点检测过滤器的响应强度是彩色编码的。您可以看到大多数检测到的特征响应较弱。(查看全尺寸图片在这里

冲浪功能

此直方图显示了上图中特征的响应强度分布:

显示响应强度分布的直方图

要跟踪哪些特征?

最强大的特征跟踪器跟踪所有检测到的特征。特征越多,鲁棒性越强。但是跟踪大量特征是不切实际的,因为我们经常希望限制计算时间。要经常跟踪的特征数量应该针对每个应用程序进行经验调整。通常将图像划分为规则的子区域,并且在每个子区域中保持跟踪 n 个最强的特征。通常选择 n 使得每帧总共检测到大约 500~1000 个特征。

参考

阅读描述 SURF 的期刊论文肯定会让您对它的工作原理有一个很好的了解。尽量不要陷入细节中,特别是如果您的背景不是机器/计算机视觉或图像处理。SURF 检测器乍一看似乎非常新颖,但整个想法是使用积分图像(早在 SURF 之前就已被其他方法使用)估计 Hessian 算子(一种成熟的滤波器)。如果你想很好的理解 SURF 而你又不熟悉图像处理,你需要回去阅读一些介绍材料。最近我遇到了一本免费的新书,它的第 13 章对特征检测做了很好的简要介绍。并非其中所说的所有内容在技术上都是正确的,但这是一个很好的起点。在这里,您可以找到另一个很好的 SURF 描述,其中有几张图片显示了每个步骤的工作原理。在该页面上,您会看到此图像:

冲浪斑点

您可以看到白色和黑色的斑点,这些斑点是 SURF 在多个尺度上检测并估计它们的大小(OpenCV 代码中的半径)的斑点。

于 2012-04-26T12:33:43.523 回答
5
  1. “大小”是原始图像中描述符所覆盖区域的大小(它是通过在比例空间中对原始图像进行下采样获得的,因此它根据它们的比例从关键点到关键点而变化)。

  2. “响应”确实是一个点“有多好”的指标(粗略地说,就角落而言)。

  3. 好的点对于静态场景检索是稳定的(这是 SIFT/SURF 描述符的主要目的)。在跟踪的情况下,您可能会出现好点,因为被跟踪的对象位于良好的背景上,一半在阴影中......然后因为这种情况发生变化(光线变化,遮挡......)而消失。因此,不能保证跟踪任务总是有一个好点。

于 2012-04-26T11:50:05.873 回答