例如,在使用 OpenCV 时,通常使用 SIFT 或 SURF 等算法来检测关键点。我的问题是这些关键点实际上是什么?
我知道它们是图像中的某种“兴趣点”。我也知道它们是尺度不变的并且是循环的。
另外,我发现他们有方向,但我不明白这到底是什么。它是一个角度,但在半径和其他东西之间吗?你能解释一下吗?我想我需要我首先需要的是更简单的东西,然后才能更容易理解论文。
例如,在使用 OpenCV 时,通常使用 SIFT 或 SURF 等算法来检测关键点。我的问题是这些关键点实际上是什么?
我知道它们是图像中的某种“兴趣点”。我也知道它们是尺度不变的并且是循环的。
另外,我发现他们有方向,但我不明白这到底是什么。它是一个角度,但在半径和其他东西之间吗?你能解释一下吗?我想我需要我首先需要的是更简单的东西,然后才能更容易理解论文。
这些是一些非常好的问题。让我们一一解决每个问题:
我的问题是这些关键点实际上是什么?
关键点与兴趣点相同。它们是空间位置或图像中的点,它们定义了图像中有趣或突出的内容。兴趣点检测实际上是斑点检测的一个子集,目的是在图像中找到有趣的区域或空间区域。关键点之所以特殊,是因为无论图像如何变化……图像是旋转、缩小/扩展、平移(顺便说一下,所有这些都是仿射变换……)还是会变形(即射影变换或单应性),您应该能够找到相同的与原始图像比较时,修改后的图像中的关键点。这是我前一段时间写的一篇文章中的一个例子:
来源:模块'对象没有属性'drawMatches'opencv python
右侧的图像是左侧图像的旋转版本。我也只显示了两个图像之间的前 10 个匹配项。如果您查看前 10 场比赛,这些是我们可能想要关注的点,这将使我们能够记住图像的内容。我们希望专注于摄影师的脸以及相机、三脚架和背景中建筑物上的一些有趣的纹理。您会看到在两个图像之间找到了这些相同的点,并且这些点已成功匹配。
因此,您应该从中得到的是,这些点是图像中有趣的点,无论图像如何失真,都应该找到它们。
我知道它们是图像的某种“兴趣点”。我也知道它们是尺度不变的,而且我知道它们是循环的。
你是对的。比例不变意味着无论您如何缩放图像,您仍然应该能够找到这些点。
现在我们将冒险进入描述符部分。使框架之间的关键点不同的是您描述这些关键点的方式。这些就是所谓的描述符。您检测到的每个关键点都有一个伴随它的关联描述符。有些框架只做关键点检测,而其他框架只是一个描述框架,它们不检测点。也有一些两者兼而有之——它们检测并描述关键点。SIFT 和 SURF 是检测和描述关键点的框架示例。
描述符主要关注关键点的尺度和方向。我们已经确定了这个概念的关键点,但如果我们的目的是尝试在不同图像中的关键点之间进行匹配,我们需要描述符部分。现在,您所说的“圆形”是什么意思……这与检测到该点的比例相关。以这张取自VLFeat Toolbox 教程的图片为例:
您会看到任何黄色的点都是兴趣点,但其中一些点具有不同的圆半径。这些处理规模。一般来说,兴趣点的工作原理是我们将图像分解为多个尺度。我们检查每个尺度的兴趣点,并将所有这些兴趣点组合在一起以创建最终输出。“圆圈”越大,检测到该点的比例就越大。此外,还有一条从圆心向边缘辐射的线。这是关键点的方向,我们将在下面介绍。
我还发现他们有方向,但我不明白它到底是什么。这是一个角度,但在半径和什么之间?
基本上,如果你想检测关键点而不考虑比例和方向,当他们谈论关键点的方向时,他们真正的意思是他们搜索关键点周围的像素邻域,并找出这个像素邻域的方向或这个补丁的方向是面向的。这取决于您查看的描述符框架,但一般的目的是检测补丁中梯度角度的最主要方向。这对于匹配很重要这样您就可以将关键点匹配在一起。看看我与两位摄影师的第一个图 - 一个旋转而另一个没有旋转。如果您看一下其中的一些点,我们如何确定一个点与另一个点如何匹配?我们可以很容易地识别出作为兴趣点的摄影师的顶部与旋转版本相匹配,因为我们查看关键点周围的点并查看所有这些点的方向......从那里开始,这就是计算方向。
通常当我们想要检测关键点时,我们只需要查看位置即可。但是,如果您想匹配图像之间的关键点,那么您肯定需要比例和方向来促进这一点。
希望这可以帮助!
我对 SURF 不是很熟悉,但是我可以告诉你关于 SIFT,它是 SURF 的基础。最后我提供了一些关于 SURF 的注释,但我不知道所有细节。
SIFT旨在在图像中找到高度独特的位置(或关键点)。这些位置不仅仅是图像上的 2D 位置,而是图像比例空间中的位置,这意味着它们具有三个坐标:x、y和scale。寻找 SIFT 关键点的过程是:
第 2 步为我们提供了尺度不变性,第 3 步为我们提供了旋转不变性,第 4 步为我们提供了可用于识别关键点的各种“指纹”。它们一起可用于匹配多个图像中任何方向和比例的相同特征的出现。
SURF旨在实现与 SIFT 相同的目标,但使用一些巧妙的技巧来提高速度。
对于 blob 检测,它使用Hessian方法的行列式。主要方向是通过检查对Haar 小波的水平和垂直响应而发现的。特征描述符类似于 SIFT,查看 16 个局部邻域中像素的方向,但结果是 64 维向量。
SURF 特征的计算速度比 SIFT 特征快 3 倍,但在大多数情况下都同样强大。
以供参考: