如何在不使用opencv匹配器的情况下匹配两个图像的功能?我已经检测到它们的关键点和描述符。
kp1, des1 = sift.detectAndCompute(gray1,None)
kp2, des2 = sift.detectAndCompute(gray2,None)
如果我理解正确,我应该将des1中的每个描述符与des2中的每个描述符进行比较并找到最佳。但我怎么比较呢?
答案 0 :(得分:1)
点的SIFT描述符只是128维向量,因此您可以简单地计算每两个之间的欧几里德距离并匹配最近的对。
从opencv SIFT获得数组des1
和des2
,它们是每个点的SIFT向量数组。您可以通过numpy广播计算每对之间的距离:
distance = np.sqrt(np.sum((des1[:, np.newaxis, :] - des2[np.newaxis, :, :]) ** 2, axis=-1))
现在,在distance
的每一行中,kp1
的特定关键点与kp2
的每个关键点之间的距离都为欧几里德距离。
这种方法很简单,但往往不是很有效。如果你想自己实现一些更复杂的匹配器,你应该阅读一些SIFT论文。
我发现了这两个: