例如,在使用OpenCV时,通常会使用SIFT或SURF之类的算法来检测关键点。我的问题是这些关键点实际上是什么?
我了解它们是图像中的某种“兴趣点”。我也知道它们是尺度不变的,是圆形的。
另外,我发现他们有方向,但是我不明白这实际上是什么。它是半径与某物之间的角度吗?你能解释一下吗?我认为我首先需要的是更简单的东西,之后它更容易理解论文。
例如,在使用OpenCV时,通常会使用SIFT或SURF之类的算法来检测关键点。我的问题是这些关键点实际上是什么?
我了解它们是图像中的某种“兴趣点”。我也知道它们是尺度不变的,是圆形的。
另外,我发现他们有方向,但是我不明白这实际上是什么。它是半径与某物之间的角度吗?你能解释一下吗?我认为我首先需要的是更简单的东西,之后它更容易理解论文。
Answers:
这些是很好的问题。让我们一一解决每个问题:
我的问题是这些关键点实际上是什么?
关键点与兴趣点是同一件事。它们是空间位置或图像中的点,这些位置定义了图像中有趣或突出的部分。兴趣点检测实际上是斑点检测的子集,目的是在图像中找到感兴趣的区域或空间区域。关键点之所以特别,是因为无论图像如何变化……图像是否旋转,收缩/扩展,被平移(所有这些方式都是仿射变换……)还是容易失真(即投影变换或单应性),您应该能够找到相同的与原始图像比较时,此修改图像中的关键点。这是我前一段时间写的帖子中的一个示例:
来源:模块'对象没有属性'drawMatches'opencv python
右侧的图像是左侧图像的旋转版本。我还只显示了两个图像之间的前10个匹配项。如果您查看排名前10的比赛,那么我们可能希望重点关注的这些点将使我们能够记住图像的含义。我们希望将注意力集中在摄影师的面部以及摄像机,三脚架和背景建筑物上的一些有趣纹理上。您会看到在两个图像之间找到了相同的点,并且这些点已成功匹配。
因此,您应该避免的是,这些是图像中有趣的点,无论图像如何变形,都应找到它们。
我了解它们是图像的某种“兴趣点”。我也知道它们是尺度不变的,而且我知道它们是圆形的。
你是对的。缩放不变意味着无论您如何缩放图像,您都应该能够找到这些点。
现在我们要进入描述符部分。框架之间的关键点有所不同的是您描述这些关键点的方式。这些就是所谓的描述符。您检测到的每个关键点都有一个关联的描述符。一些框架仅进行关键点检测,而其他框架仅是描述框架,而它们不检测点。还有一些功能可以同时执行-它们检测并描述关键点。SIFT和SURF是检测和描述关键点的框架示例。
描述符主要与关键点的规模和方向有关。我们已经将关键点确定下来,但是如果我们想要在不同图像的关键点之间进行匹配是我们需要的描述符部分。现在,您所说的“圆形”意味着与检测到该点的比例相关。以从VLFeat工具箱教程中获取的这张图片为例:
您会看到任何黄色的点都是兴趣点,但是其中一些点的圆半径不同。这些处理规模。兴趣点通常是如何工作的,就是我们将图像分解为多个比例。我们检查各个规模的兴趣点,然后将所有这些兴趣点组合在一起以创建最终输出。“圆圈”越大,检测到该点的比例就越大。另外,还有一条线从圆的中心放射到边缘。这是关键点的方向,我们将在后面介绍。
我也发现他们有方向,但是我不明白它到底是什么。它是一个角度,但是半径和某物之间是一个角度?
基本上,如果您要检测关键点而不管其大小和方向如何,当他们谈论关键点的方向时,它们的真正含义是搜索围绕关键点的像素邻域,并弄清楚该像素邻域的方向或此补丁的方向定向的方向。这取决于您要查看的描述符框架,但是一般的方法是检测补丁中梯度角的最主要方向。这对于匹配很重要这样您就可以将关键点匹配在一起。看看我和两个摄影师的第一个人物-一个旋转,另一个没有旋转。如果您查看其中一些点,我们如何确定一个点与另一个点如何匹配?我们可以轻松地确定摄影师的兴趣点是与旋转版本匹配的,因为我们查看了围绕关键点的点并查看了所有这些点的方向...从那里开始,这就是方向计算。
通常,当我们要检测关键点时,我们只看一下位置。但是,如果要在图像之间匹配关键点,则肯定需要缩放比例和方向来简化此操作。
希望这可以帮助!
我对SURF不太熟悉,但是我可以向您介绍一下SURF所基于的SIFT。最后,我提供了一些有关SURF的注释,但我不了解所有详细信息。
SIFT旨在在图像中找到高度不同的位置(或关键点)。这些位置不仅是图像上的2D位置,而且是图像比例尺空间中的位置,这意味着它们具有三个坐标:x,y和scale。查找SIFT关键点的过程是:
第2步为我们提供了尺度不变性,第3步为我们提供了旋转不变性,第4步为我们提供了可用于识别关键点的各种“指纹”。它们可以一起用于在多个图像中以任何方向和比例匹配同一特征的出现。
SURF的目标是实现与SIFT相同的目标,但是使用一些巧妙的技巧来提高速度。
对于斑点检测,它使用Hessian方法的行列式。通过检查对Haar小波的水平和垂直响应,可以找到主导方向。特征描述符类似于SIFT,它查看16个局部邻域中像素的方向,但是会产生64维矢量。
SURF特征的计算速度比SIFT特征快3倍,但在大多数情况下同样强大。
以供参考:
tl;dr
SURF和SIFT之间的差异。