【问题标题】:What are keypoints in image processing?图像处理的关键点是什么?
【发布时间】:2015-05-21 21:19:01
【问题描述】:

例如,当使用 OpenCV 时,SIFT 或 SURF 等算法通常用于检测关键点。我的问题是这些关键点实际上是什么?

我知道它们是图像中的某种“兴趣点”。我也知道它们是尺度不变的并且是循环的。

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

【问题讨论】:

  • 关键点应该只是点 (x,y),imo。描述一个点及其周围区域的内容应该称为描述符。一些关键点将这些术语混合在一起,它们成为带有附加描述向量的点,就像@rayryeng 解释的那样。
  • @William - 这是很多人混淆的一个好点。我会把它添加到我的帖子中。谢谢!

标签: opencv image-processing sift surf keypoint


【解决方案1】:

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


SIFT 旨在在图像中找到高度独特的位置(或关键点)。这些位置不仅仅是图像上的 2D 位置,而是图像尺度空间中的位置,这意味着它们具有三个坐标:xy、和规模。寻找SIFT关键点的过程是:

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

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


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

对于 blob 检测,它使用determinant of Hessian 方法。通过检查对Haar wavelets 的水平和垂直响应来找到主导方向。特征描述符类似于 SIFT,查看 16 个局部邻域中像素的方向,但结果是 64 维向量。

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


供参考:

A good SIFT tutorial

An introduction to SURF

【讨论】:

  • 非常好。非常喜欢 SURF 和 SIFT 之间的tl;dr 差异。
  • @rayryeng 谢谢,虽然这只是因为我真的不知道要多说什么。 ;) 我以前没有真正使用过 SURF。
  • 我永远不会知道!顺便说一句,SIFT 教程是经典之作。这是我在 Lowe 的论文之前读到的第一件事。
  • @rayryeng 教程的作者在这里 - 很高兴听到你喜欢它!
  • @UtkarshSinha 我喜欢你的工作和 AI Shack。继续写!
【解决方案2】:

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

我的问题是这些关键点到底是什么?

关键点与兴趣点相同。它们是空间位置或图像中的点,用于定义图像中有趣突出的内容。兴趣点检测实际上是blob detection的一个子集,目的是在图像中找到有趣的区域或空间区域。关键点之所以特殊是因为无论图像如何变化……图像是否旋转、缩小/扩展、平移(所有这些都是affine transformation 顺便说一下……)或受到扭曲(即投影变换或homography),与原始图像比较时,您应该能够在此修改后的图像中找到相同的关键点。这是我前一段时间写的一篇文章中的一个例子:

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

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

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

我知道它们是图像的某种“兴趣点”。我也知道它们是尺度不变的,而且我知道它们是循环的。

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


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

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

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

我还发现他们有方向,但我不明白它到底是什么。它是一个角度,但在半径和某物之间?

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

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


希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 2011-03-22
    • 2011-02-15
    • 1970-01-01
    • 2010-10-10
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多