匹配两个图像关键点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匹配两个图像关键点相关的知识,希望对你有一定的参考价值。
如何在不使用opencv匹配器的情况下匹配两个图像的功能?我已经检测到它们的关键点和描述符。
kp1, des1 = sift.detectAndCompute(gray1,None)
kp2, des2 = sift.detectAndCompute(gray2,None)
如果我理解正确,我应该将des1中的每个描述符与des2中的每个描述符进行比较并找到最佳。但我怎么比较呢?
答案
点的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论文。
我发现了这两个:
以上是关于匹配两个图像关键点的主要内容,如果未能解决你的问题,请参考以下文章