匹配两个图像关键点

时间:2018-05-22 16:10:37

标签: python opencv

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

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

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

1 个答案:

答案 0 :(得分:1)

点的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