我正在使用OpenCV 2.3进行关键点检测和匹配。但我对检测算法给出的size
和response
参数有点困惑。他们究竟是什么意思?
根据OpenCV手册,我无法弄明白:
float size
:有意义的关键点邻域的直径
float response
:最强大关键点的响应 被选中。可用于进一步排序或子采样
我认为跟踪的最佳点是反应最快的那个,但似乎并非如此。那么我怎么能对冲浪探测器返回的一组关键点进行二次采样,以便在可追踪性方面保持最佳?
答案 0 :(得分:60)
SURF是一个斑点探测器,简而言之,一个特征的大小就是斑点的大小。更确切地说,OpenCV返回的大小是近似Hessian算子的一半。该尺寸也称为尺度,这是由于斑点检测器的工作方式,即在功能上等于首先使用高斯滤波器在几个尺度上模糊图像,然后对图像进行下采样并最终检测具有固定尺寸的斑点。请参见下图,显示SURF功能的大小。每个要素的大小是绘制圆的半径。从要素中心到圆周的线条显示角度或方向。在该图像中,斑点检测滤波器的响应强度是彩色编码的。您可以看到大多数检测到的功能都有弱响应。 (参见完整尺寸图片here)
此直方图显示上图中特征的响应强度分布:
最强大的功能跟踪器可跟踪所有检测到的功能。功能越多,鲁棒性越强。但是跟踪大量功能是不切实际的,因为我们通常希望限制计算时间。要经常跟踪的功能数量应根据每个应用程序进行调整。通常将图像划分为规则的子区域,并且在每个子区域中保持跟踪n个最强的特征。通常选择n使得每帧总共检测到约500~1000个特征。
阅读journal paper describing SURF肯定能让你清楚它是如何运作的。尽量不要陷入细节,特别是如果你的背景不是机器/计算机视觉或图像处理。 SURF探测器乍一看似乎非常新颖,但整个想法是使用积分图像估算Hessian算子(一个成熟的滤波器)(早在SURF之前已经被其他方法使用过)。如果您想要很好地理解SURF并且您不熟悉图像处理,则需要返回并阅读一些介绍性材料。最近我遇到了a new and free book,其第13章对特征检测进行了简要介绍。并非所有内容都在技术上是正确的,但这是一个很好的起点。 Here你可以找到另外一个很好的SURF描述,其中有几个图像显示了每个步骤的工作原理。在该页面上,您会看到此图片:
你可以看到白色和黑色斑点,这些是SURF在几个尺度上检测到的斑点,并估计它们的大小(OpenCV代码中的半径)。
答案 1 :(得分:5)
“size”是原始图像中描述符所覆盖区域的大小(通过在缩放空间中对原始图像进行下采样获得,因此它根据其比例从关键点到关键点变化)。
“反应”确实是一个指示“有多好”(粗略地说,就角落而言)是一个点。
静态场景检索的优点是稳定的(这是SIFT / SURF描述符的主要目的)。在跟踪的情况下,你可以出现好的点,因为被跟踪的物体位于形状良好的背景上,在阴影中有一半......然后消失,因为这个条件已经改变(光线变化,遮挡......)。因此,无法保证跟踪任务总是存在优点。