匹配两个图像关键点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匹配两个图像关键点相关的知识,希望对你有一定的参考价值。

如何在不使用opencv匹配器的情况下匹配两个图像的功能?我已经检测到它们的关键点和描述符。

kp1, des1 = sift.detectAndCompute(gray1,None)
kp2, des2 = sift.detectAndCompute(gray2,None)

如果我理解正确,我应该将des1中的每个描述符与des2中的每个描述符进行比较并找到最佳。但我怎么比较呢?

答案

点的SIFT描述符只是128维向量,因此您可以简单地计算每两个之间的欧几里德距离并匹配最近的对。

从opencv SIFT你得到数组des1des2,它们是每个点的SIFT向量数组。您可以通过numpy广播计算每对之间的距离,如下所示:

distance = np.sqrt(np.sum((des1[:, np.newaxis, :] - des2[np.newaxis, :, :]) ** 2, axis=-1))

现在在distance的每一行中,你在kp1的特定关键点和kp2的每个关键点之间都有欧几里德距离。

这种方法很简单,但往往不是很有效。如果你想自己实现一些更复杂的匹配器,你应该阅读一些SIFT论文。

我发现了这两个:

paper 1 - simpler

paper 2 - more complicated

以上是关于匹配两个图像关键点的主要内容,如果未能解决你的问题,请参考以下文章

匹配的 SIFT 关键点的坐标

详解 Scala 模式匹配

使用SIFT搜索图像数据库

通过将单个查询图像与多个图像的列表匹配来存储关键点索引

CV实验二:特征检测与匹配

opencv图像匹配常用特征点