如何使用SIFT进行角点匹配?

  • 我们将了解 SIFT 算法的概念
  • 我们将学习如何找到 SIFT 特征点和描述子。

在前几章中,我们看到了一些角点检测器,如 Harris 等。它们具有旋转不变性,这意味着,即使图像旋转,我们也可以找到相同的角点。很明显,因为角点在旋转图像中也是角点。但是缩放呢?如果图像缩放,角点可能就不再是角点。以下图为例,在小图像中使用一个小窗口能够检测出角点,然而将图像放大后,在同一窗口中的图像变得平坦,无法检测出角点。所以 Harris 角点不是尺度不变的。

  • 如果您没有找到特征点,请使用函数 sift.detectAndCompute()在一个步骤中直接查找特征点和描述子。
  • 我们将看到第二种方法:

    这里 kp 是一个特征点列表,des 是一个 numpy 数组,该数组大小是特征点数目乘 128。

    所以我们得到了特征点,描述子等。现在我们想看看如何匹配不同图像中的特征点。我们将在接下来的章节中学习。

重磅干货,第一时间送达

图像拼接是计算机视觉中最成功的应用之一。如今,很难找到不包含此功能的手机或图像处理API。在这篇文章中,我们将讨论如何使用Python和OpenCV执行图像拼接

。鉴于一对共享一些共同区域的图像,我们的目标是“缝合”它们并创建全景图像场景。

在整篇文章中,我们将介绍一些最着名的计算机视觉技术。这些包括:

局部不变描述符(SIFT,SURF等)

我们探索了许多特征提取算子,如SIFT,SURF,BRISK和ORB。你可以使用这款Colab笔记本,甚至可以用你的照片试试。[这里我已经调试好源码并上传到github上面]

给定一对像上面那样的图像,我们想要把它们拼接起来创建一个全景场景。值得注意的是,两个图像都需要共享一些共同的区域。此外,即使图片在以下一个或多个方面存在差异,我们的解决方案也必须强大:

朝这个方向迈出的第一步是提取一些感兴趣的关键点和特征。但是,这些功能需要具有一些特殊属性。我们首先考虑一个简单的解决方案。

一开始可能使用简单些的方法,诸如使用Harris Corners之类的算法提取关键点。然后,我们可以尝试根据欧几里德距离之类的相似度量来匹配相应的关键点。我们知道,角点(corner)有一个很好的属性:它们对旋转是不变的。这意味着,一旦我们检测到一个角点,如果我们旋转图像,那个角点仍将存在。但是,如果我们旋转然后缩放图像怎么办?在这种情况下,我们会很难,因为角点不是规模不变的。也就是说,如果我们放大图像,先前检测到的角可能会变成一条线!总之,我们需要对旋转和缩放不变的特征。这就是SIFT,SURF和ORB等更强大的方法的用武之地。

像SIFT和SURF这样的方法试图解决角点检测算法的局限性。

通常,角点检测器算法使用固定大小的内核来检测图像上的感兴趣区域(角点)。很容易看出,当我们缩放图像时,这个内核可能会变得太小或太大。为了解决这个限制,像SIFT这样的方法使用高斯差分(DoD)。我们的想法是在同一图像的不同比例版本上应用DoD。它还使用相邻像素信息来查找和细化关键点和相应的描述子。首先,我们需要加载2个图像,查询图片和训练图片。最初,我们首先从两者中提取关键点和描述符。我们可以通过使用OpenCV detectAndCompute()函数一步完成。请注意,为了使用detectAndCompute(),我们需要一个关键点检测器和描述符对象的实例。它可以是ORB,SIFT或SURF等。另外,在将图像馈送到detectAndCompute()之前,我们将它们转换为灰度。

下载2:Python视觉实战项目52讲

我要回帖

更多关于 如何匹配两个表格的信息 的文章

 

随机推荐