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

def*_*era 64 opencv image-processing surf sift keypoint

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

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

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

ray*_*ica 101

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

我的问题是这些关键点究竟是什么?

关键点与兴趣点相同.它们是空间位置,或图像中的点,用于定义图像中有趣突出的内容.关键点之所以特殊,是因为无论图像如何变化......图像是否旋转,缩小/扩展,是否被翻译(所有这些都将是仿射变换 ......)或受到失真(即,投影变换或单应性),当与原始图像进行比较时,您应该能够在此修改后的图像中找到相同的关键点.这是我前一篇文章中的一个例子:

来源:模块'对象没有属性'drawMatches'opencv python

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

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

我知道它们是某种形象的"兴趣点".我也知道它们是规模不变的,我知道它们是循环的.

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


现在我们要冒险进入描述符部分.框架之间关键点的不同之处在于您描述这些关键点的方式.这些是所谓的描述符.您检测到的每个关键点都有一个关联的描述符.一些框架只进行关键点检测,而其他框架只是一个描述框架,它们不检测点.还有一些同时做到 - 它们检测描述了关键点.SIFT和SURF是检测和描述关键点的框架示例.

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

VLFeat示例

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

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

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

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


希望这可以帮助!


eig*_*ris 20

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


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

  1. 使用不同的模糊宽度和采样率对图像进行模糊和重新采样,以创建比例空间
  2. 利用高斯差分法检测不同尺度的斑点; 斑点中心成为我们在给定的x,y比例上的关键点
  3. 通过计算其邻域中每个像素的梯度方向直方图并选择具有最高计数数的方向仓来为每个关键点指定方向
  4. 基于16个局部邻域中的像素的梯度方向,为每个关键点分配128维特征向量

第2步给出了比例不变性,第3步给出了旋转不变性,第4步给出了一个可以用来识别关键点的"指纹".它们可以用于在多个图像中以任何方向和比例匹配相同特征的出现.


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

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

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


以供参考:

一个很好的SIFT教程

SURF介绍

  • @rayryeng这里的教程的作者 - 很高兴听到你喜欢它! (3认同)