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

标签 opencv image-processing sift surf keypoint

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

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

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

最佳答案

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

My question is what actually are these keypoints?


关键点与兴趣点是一回事。它们是空间位置,或图像中定义什么是 的点。有趣 或者什么脱颖而出 在图像中。兴趣点检测实际上是blob detection的一个子集,旨在找到图像中有趣的区域或空间区域。关键点之所以特殊是因为无论图像如何变化……图像是否旋转、收缩/扩展、平移(顺便说一下,所有这些都是affine transformation……)还是会失真(即投影变换或 homography ),您应该能够找到 与原始图像进行比较时,此修改后的图像中的关键点。这是我不久前写的帖子中的一个示例:

来源:module' object has no attribute 'drawMatches' opencv python
右侧的图像是左侧图像的旋转版本。我还只显示了两个图像之间的前 10 个匹配项。如果您查看前 10 场比赛,这些是我们可能想要关注的点,以便我们记住图像的内容。我们希望将注意力集中在摄影师的面部以及相机、三脚架和背景中建筑物上的一些有趣纹理上。你看到这些相同的点被发现 两者之间图像和这些成功匹配。
因此,您应该从中得到的是,这些是图像中有趣的点,无论图像如何扭曲都应该找到它们。

I understand that they are some kind of "points of interest" of an image. I also know that they are scale invariant and I know they are circular.


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

现在我们要冒险进入描述符 部分。关键点是什么不同 框架之间是你的方式 描述 这些关键点。这些就是所谓的 描述符 .您检测到的每个关键点都有一个与之相关的描述符。一些框架只做关键点检测,而其他框架只是一个描述框架,它们不检测点。也有一些做两者 - 他们检测到 描述关键点。 SIFT 和 SURF 是检测和描述关键点的框架示例。
描述符主要关注 规模方向 的关键点。我们已经确定了这个概念的关键点,但我们需要 描述符 如果我们的目的是尝试匹配不同图像中的关键点。现在,您所说的“圆形”是什么意思……与检测到该点的比例相关。以这张取自 VLFeat Toolbox tutorial 的图片为例。 :
VLFeat example
您会看到任何黄色的点都是兴趣点,但其中一些点具有不同的圆半径。这些处理规模 .兴趣点在一般意义上的工作原理是我们将图像分解为多个尺度。我们在每个尺度上检查兴趣点,并将所有这些兴趣点组合在一起以创建最终输出。 “圆圈”越大,更大 规模是检测到的点。此外,还有一条线从圆心辐射到边缘。这是方向 关键点,我们将在接下来介绍。

Also I found out that they have orientation but I couldn't understand what actually it is. It is an angle but between the radius and something?


基本上如果你想检测关键点而不管尺度和方向,当他们谈论方向 关键点,他们真正的意思是他们搜索围绕关键点的像素邻域,并找出这个像素邻域的方向或这个补丁的方向。这取决于你看的是什么描述符框架,但一般的jist是检测最主要的orientation of the gradient angles在补丁中。这对 很重要匹配 以便您可以将关键点匹配在一起。看看我和两个摄影师拍的第一个图——一个旋转了,另一个没有。如果您查看其中一些点,我们如何确定一个点与另一个点如何匹配?我们可以很容易地识别出作为兴趣点的摄影师的顶部与旋转版本相匹配,因为我们查看了 的点。环绕 关键点并查看所有这些点的方向......从那里,这就是方向的计算方式。
通常当我们想要检测关键点时,我们只需要看一下位置。但是,如果您想匹配 图像之间的关键点,那么您肯定需要比例和方向来促进这一点。

希望这有帮助!

关于opencv - 图像处理的关键点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133085/

相关文章:

android - 如何按一个因子缩放轮廓的高度?

OpenCV SVM 内核示例

image-processing - 稀疏编码解释

c++ - 如何检测 90 度或 180 度的倾斜度?

image-processing - SIFT 关键点位置

python - 在树莓派 : can't find packages 上安装 OpenCV

c++ - 如何在打开的cv c++中翻转具有角度矩形或任何其他角度形状的图像的特定部分

python - 准确的二值图像分类

image - Phash 与 SIFT 识别相似图像

python - cv2 SIFT +蛮力匹配没有给出好的结果