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

91

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

我知道它们是图像中某种“感兴趣的点”。我还知道它们是尺度不变的且呈圆形。

此外,我发现它们具有方向,但我无法理解这究竟是什么。它是否是半径和某个东西之间的角度?您能给一些解释吗?我认为首先需要更简单的解释,然后才能更容易地理解论文。


1
关键点应该只是点(x,y),在我看来。描述一个点及其周围区域的内容应该被称为描述符。一些关键点混淆了这些术语,它们变成了带有附加描述向量的点,就像@rayryeng所解释的那样。 - LovaBill
@William - 这是许多人容易混淆的一个好观点。我会在我的帖子中加入这个内容。谢谢! - rayryeng
2个回答

142

让我们逐一解决每个问题:

我的问题是这些关键点实际上是什么?

关键点与兴趣点相同。它们是图像中定义有趣或突出的空间位置或点。兴趣点检测实际上是斑点检测的一个子集,旨在在图像中找到有趣的区域或空间区域。关键点之所以特殊,是因为无论图像如何变化...无论图像旋转、缩小/扩展、平移(顺便说一下,所有这些都将是仿射变换...)或受到畸变(即投影变换或单应性),当与原始图像进行比较时,您应该能够在修改后的图像中找到相同的关键点。以下是我之前写过的帖子中的例子:

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

右边的图像是左边图像的旋转版本。我仅显示了两个图像之间前10个匹配点。如果您看一下这前10个匹配点,这些点可能是我们想要关注的点,这将使我们记住图像内容。我们需要关注摄影师的面部、相机、三脚架以及背景建筑物上的一些有趣纹理。您会发现这些相同的点在两个图像之间被找到,并且成功地匹配了。

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

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

你说得对。尺度不变意味着无论如何缩放图像,您都应该能够找到这些点。


现在我们将进入描述符部分。不同的框架之间关键点之间的区别在于您描述这些关键点的方式。这就是所谓的描述符。您检测到的每个关键点都有一个相应的描述符与之相伴。一些框架只进行关键点检测,而其他框架仅是描述框架,它们不检测点。还有一些既检测又描述关键点。SIFT和SURF是既检测又描述关键点的框架的例子。
描述符主要涉及关键点的比例和方向。我们已经掌握了关键点的概念,但如果我们的目的是尝试在不同的图像之间匹配关键点,那么我们需要描述符部分。现在,“圆形”是什么意思...这与检测到的点的比例相关。例如,从VLFeat Toolbox tutorial中获取的此图像:

VLFeat example

您可以看到,任何黄色点都是兴趣点,但其中一些点具有不同的圆形半径。这些涉及到比例尺。通常来说,我们将图像分解为多个比例尺。在每个比例尺上检查兴趣点,然后将所有这些兴趣点组合在一起创建最终输出。 "圆"越大,检测到该点的比例尺就越。此外,还有一条从圆心辐射到边缘的线。这是关键点的方向,我们接下来将介绍它。

此外,我发现它们具有方向,但我无法理解它实际上是什么。它是半径和某物之间的角度吗?

基本上,如果您想检测与比例和方向无关的关键点,则当他们谈论关键点的方向时,他们真正的意思是搜索围绕关键点的像素邻域,并找出该像素邻域的方向或该补丁面向的方向。这取决于您查看的描述符框架,但总体上是要在补丁中检测最显著的梯度角度方向。这对于匹配非常重要,以便可以将关键点进行匹配。看一下我与两个摄影师的第一个图,其中一个摄影师旋转而另一个没有。如果您看一些那些点,我们如何确定一个点与另一个点匹配?我们可以轻松地识别出摄影师顶部作为感兴趣点与旋转版本相匹配,因为我们查看周围关键点并查看所有这些点的方向...从那里,就可以计算方向。

通常当我们想要检测关键点时,只需查看其位置即可。然而,如果您想在图像之间匹配关键点,则绝对需要尺度和方向来实现。


28

我对SURF不是很熟悉,但我可以告诉你一些关于SURF基础的SIFT知识。我在末尾提供了一些关于SURF的笔记,但我并不知道所有的细节。


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

  1. 使用不同的模糊宽度和采样率对图像进行模糊和重采样,创建一个尺度空间
  2. 使用高斯差分方法检测不同尺度上的斑点;斑点中心成为给定xyscale的关键点
  3. 通过计算其邻域内每个像素的梯度方向直方图并选择具有最高计数的方向bin,为每个关键点分配一个方向
  4. 基于16个局部邻域中像素的梯度方向,为每个关键点分配一个128维的特征向量
第二步给我们尺度不变性,第三步给我们旋转不变性,第四步给我们一种“指纹”可以用来识别关键点。这些步骤共同用于在多个图像中匹配任意方向和尺度的相同特征。

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

对于斑点检测,它使用海森矩阵行列式方法。通过检查Haar小波的水平和垂直响应来找到主导方向。特征描述符类似于SIFT,查看16个局部邻域中像素的方向,但结果为64维向量。

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


供参考:

一个好的SIFT教程

SURF简介


1
非常好。我完全喜欢SURF和SIFT之间的tl;dr差异。 - rayryeng
@rayryeng 谢谢,不过这只是因为我不太了解足以说更多的东西。;) 我之前并没有真正使用过SURF。 - eigenchris
1
我以前真的不知道!顺便说一句,SIFT教程是经典之作。那是我在读Lowe的论文之前首先阅读的东西。 - rayryeng
3
@rayryeng 教程的作者在此 - 很高兴听到你喜欢它! - Utkarsh Sinha
如果你是那个给我点了踩的人,留下一个评论说明一下你的不满会更好。这可以帮助我改进我的回答。 - rayryeng
显示剩余3条评论

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