图像处理的关键点是什么?

What are keypoints in image processing?

例如,在使用 OpenCV 时,通常会使用 SIFT 或 SURF 等算法来检测关键点。我的问题是这些关键点到底是什么?

我知道它们是图像中的某种 "points of interest"。我也知道它们是尺度不变的并且是圆形的。

另外,我发现它们有方向性,但我不明白这到底是什么。它是一个角度,但在半径和某物之间吗?你能解释一下吗?我想我需要的是我首先需要的是一些更简单的东西,然后它会更容易理解论文。

这些都是非常好的问题。让我们逐一解决:

My question is what actually are these keypoints?

关键点与兴趣点是一回事。它们是空间位置,或图像中的点,定义图像中有趣突出的内容。兴趣点检测实际上是 blob detection, which aims to find interesting regions or spatial areas in an image. The reason why keypoints are special is because no matter how the image changes... whether the image rotates, shrinks/expands, is translated (all of these would be an affine transformation by the way...) or is subject to distortion (i.e. a projective transformation or homography) 的一个子集,你应该可以在这个修改后的图像与原始图像进行比较时找到 相同的 关键点。这是我不久前写的 post 中的一个示例:

来源:module' object has no attribute 'drawMatches' opencv python

右图是左图的旋转版本。我也只显示了两个图像之间的前 10 个匹配项。如果你看一下前 10 场比赛,这些是我们可能想要关注的点,可以让我们记住图像的内容。我们想要专注于摄影师的脸以及相机、三脚架和背景中建筑物上的一些有趣纹理。您会看到在两张 图像之间 找到了这些相同的点,并且这些点已成功匹配。

因此,您应该从中得出的结论是,这些是图像中有趣的点,无论图像如何变形,都应该找到它们。

I understand that they are some kind of "points of interest" of an image. I also know that they are scale invariant and I know they are circular.

你是对的。比例不变意味着无论你如何缩放图像,你应该仍然能够找到那些点。


现在我们将进入 描述符 部分。框架之间的关键点 不同 是您 描述 这些关键点的方式。这些就是所谓的 描述符 。您检测到的每个关键点都有一个伴随它的关联描述符。有的框架只做关键点检测,有的框架只是描述框架,不检测关键点。还有一些 both - 它们检测 描述的关键点。 SIFT 和 SURF 是检测和描述关键点的框架示例。

描述符主要关注关键点的 scaleorientation。我们已经确定了这个概念的关键点,但是如果我们的目的是尝试在不同图像中的关键点之间进行匹配,那么我们需要 descriptor 部分。现在,你所说的“圆形”是什么意思……它与检测到的点的比例相关。以这张取自 VLFeat Toolbox tutorial:

的图片为例

你看到任何黄色的点都是兴趣点,但其中一些点的圆半径不同。这些涉及 scale。一般意义上的兴趣点是如何工作的,就是我们将图像分解成多个尺度。我们检查每个尺度的兴趣点,并将所有这些兴趣点组合在一起以创建最终输出。 “圆圈”越大, 检测到该点的比例就越大。此外,还有一条线从圆心辐射到边缘。这是关键点的方向,我们接下来会介绍。

Also I found out that they have orientation but I couldn't understand what actually it is. It is an angle but between the radius and something?

基本上如果你想检测关键点而不考虑比例和方向,当他们谈论关键点的方向时,他们真正的意思是他们搜索围绕keypoint 并弄清楚这个像素邻域是如何定向的,或者这个 patch 的定向方向。这取决于你看的是什么描述符框架,但一般的 jist 是检测 patch 中最主要的 orientation of the gradient angles。这对于 匹配 很重要,这样您就可以将关键点匹配在一起。看一下我与两位摄影师的第一个人物——一个旋转而另一个没有旋转。如果你看一下其中的一些点,我们如何弄清楚一个点与另一个点如何匹配?我们可以很容易地识别出作为兴趣点的摄影师的顶部与旋转版本相匹配,因为我们查看 环绕 关键点的点并查看所有这些点的方向...从那里开始,这就是计算方向的方式。

通常当我们想要检测关键点时,我们只是看一下位置。然而,如果你想匹配图像之间的关键点,那么你肯定需要比例和方向来促进这一点。


希望对您有所帮助!

我对 SURF 不是很熟悉,但我可以告诉您有关 SIFT 的信息,SIFT 是 SURF 的基础。我在最后提供了一些关于 SURF 的注释,但我不知道所有的细节。


SIFT 旨在找到图像中高度独特的位置(或 关键点 )。这些位置不仅是图像上的二维位置,而且是图像 比例 space 中的位置,这意味着它们具有三个坐标:xyscale。寻找SIFT关键点的过程是:

  1. 使用不同的模糊宽度和采样率对图像进行模糊和重新采样以创建比例-space
  2. 使用difference of gaussians方法检测不同尺度的斑点;在给定的 xyscale
  3. 处,斑点中心成为我们的关键点
  4. 为每个关键点分配一个方向,方法是计算其邻域中每个像素的梯度方向直方图,并选择计数最高的方向 bin
  5. 根据 16 个局部邻域中像素的梯度方向
  6. ,为每个关键点分配一个 128 维的特征向量

第 2 步为我们提供了尺度不变性,第 3 步为我们提供了旋转不变性,第 4 步为我们提供了可用于识别关键点的各种“指纹”。它们可以一起用于匹配多个图像中在任何方向和比例下出现的相同特征。


SURF 旨在实现与 SIFT 相同的目标,但使用了一些巧妙的技巧来提高速度。

对于斑点检测,它使用 determinant of Hessian method. The dominant orientation is found by examining the horizontal and vertical responses to Haar wavelets。特征描述符类似于 SIFT,查看 16 个局部邻域中像素的方向,但结果是 64 维向量。

SURF 特征的计算速度比 SIFT 特征快 3 倍,但在大多数情况下同样稳健。


供参考:

A good SIFT tutorial

An introduction to SURF