SURF关键点中的大小和响应分别代表什么?

20
我正在使用OpenCV 2.3进行关键点检测和匹配。但是检测算法给出的"size"和"response"参数让我有些困惑,我不确定它们确切的含义是什么。根据OpenCV手册的说明,我还是无法理解它们的意思:
"float size":有意义的关键点邻域直径
"float response":最强关键点所选取的响应值。可用于进一步排序或子采样。
我原本认为跟踪最佳点应该是具有最高响应的那个点,但事实似乎并非如此。那么,如何对surf检测器返回的关键点集进行子采样以仅保留在可追踪性方面最好的关键点呢?
2个回答

61

尺寸和响应

SURF是一个斑点检测器,简而言之,特征的大小就是斑点的大小。更准确地说,OpenCV返回的大小是近似Hessian算子长度的一半。由于斑点检测器的工作方式等同于在多个比例下使用高斯滤波器模糊图像,然后对图像进行下采样并最终检测具有固定大小的斑点,因此该大小也称为比例。请参见下面的图像,显示SURF特征的大小。每个特征的大小是绘制圆的半径。从特征中心到圆周的线条显示角度或方向。在这张图中,斑点检测滤波器的响应强度以颜色编码的方式显示。您可以看到大部分检测到的特征具有较弱的响应。(请参阅此处的完整尺寸图像here

SURF features

这个直方图显示了上面图片中特征的响应强度分布:

histogram showing distribution of response strengths

要追踪哪些特征?

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

参考文献

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

SURF blobs

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


非常清晰的回答。非常感谢。我还想问你一件事,因为你似乎对SURF相当了解。除了OpenCV手册指南外,有没有其他值得查看的关于SURF检测器和提取器的文档? - Tulkkas
非常感谢。我实际上有计算机科学的背景,但更多关于SURF的openCV实现的信息。对于有兴趣的人,我还发现了这个网站[链接](http://www.aishack.in/2010/05/sift-scale-invariant-feature-transform/),它很好地描述了SURF所基于的SIFT。 - Tulkkas
我还想问一件关于大小的事情。如果我理解正确,更大的大小意味着SURF检测到的blob更大?但是你所说的blob的大小确切指的是什么?是用于检测关键点的区域的大小吗? - Tulkkas
Blob的大小是使用的Hessian算子的大小。要么看我提到的SURF论文,要么看我添加的新参考资料。可能这会帮助你理解它。而且别忘了OpenCV是开源的,你可以随时去阅读代码来看它是如何实现的。 - fireant
你有涂鸦图片的参考吗? - Alex Tape
显示剩余2条评论

5
  1. "size"代表描述符在原始图像中覆盖的区域大小(它是通过在尺度空间下采样原始图像获得的,因此根据其尺度,它会从关键点到关键点变化)。

  2. "response"实际上是指一个点的“好坏”程度(粗略地说,就是角点的程度)。

  3. 对于静态场景检索(这是SIFT / SURF描述符的主要用途),好的点是稳定的。在跟踪的情况下,您可以拥有良好的点,因为跟踪的对象位于形成良好背景的位置或者半遮挡的位置...然后会消失,因为这种条件已经发生改变(光线变化、遮挡等)。因此,在跟踪任务中,不能保证良好的点总是存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接