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

时间:2015-03-18 21:30:08

标签: opencv image-processing sift surf keypoint

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

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

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

2 个答案:

答案 0 :(得分:89)

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

  

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

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

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

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

因此,你应该从中得到的是,这些是图像中有趣的点,无论图像如何扭曲,都应该找到它们。

  

我知道他们是某种兴趣点"一个图像。我也知道它们是规模不变的,我知道它们是循环的。

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


现在我们将进入描述符部分。什么使得框架之间的关键点不同描述这些关键点的方式。这些就是所谓的描述符。您检测到的每个关键点都有一个关联的描述符。一些框架只进行关键点检测,而其他框架只是一个描述框架,他们不会检测点。还有一些做两者 - 他们检测描述关键点。 SIFT和SURF是检测和描述关键点的框架示例。

描述符主要关注关键点的比例方向。关键点我们已经确定了这个概念,但是如果我们的目的是尝试在不同图像中的关键点之间进行匹配,那么我们需要描述符部分。现在,你的意思是"循环" ......与检测点的比例相关。例如,此图像取自VLFeat Toolbox tutorial

VLFeat example

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

  

我也发现他们有方向但我无法理解它究竟是什么。这是一个角度,但在半径和东西之间?

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

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


希望这有帮助!

答案 1 :(得分:18)

我对SURF并不熟悉,但我可以告诉你关于SIFT的信息,SURF是基于什么的。我最后提供了一些关于SURF的说明,但我不了解所有细节。


SIFT的目的是在图片中找到高度鲜明的地点(或关键点)。这些位置不仅仅是图像上的2D位置,还有图像比例空间中的位置,这意味着它们有三个坐标: x y < / strong>,比例。查找SIFT关键点的过程是:

  1. 使用不同的模糊宽度和采样率对图像进行模糊和重新采样以创建比例空间
  2. 使用difference of gaussians方法检测不同比例的斑点; blob中心成为我们在给定 x y 规模
  3. 的关键点
  4. 通过计算其邻域中每个像素的渐变方向直方图并选择具有最高计数的方向仓来为每个关键点指定方向
  5. 根据16个本地社区中像素的渐变方向为每个关键点分配128维特征向量
  6. 步骤2给出了比例不变性,步骤3给出了旋转不变性,步骤4给出了一个&#34;指纹&#34;可用于识别关键点的各种类型。它们可以用于在多个图像中以任何方向和比例匹配相同特征的出现。


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

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

    SURF功能的计算速度最多可以比SIFT功能快3倍,但在大多数情况下都非常强大。


    供参考:

    A good SIFT tutorial

    An introduction to SURF