Python openCV特征匹配中最小距离向量的快速获取方法
我正在使用python版本的openCV为两幅图像建立一个“相似性分数”。 首先,我找到每个图像的关键点及其描述符(例如,使用ORB或AKAZE)。 然后,我将这些关键点与图像进行匹配,并将这些匹配保存在一个列表中。 对于Python openCV特征匹配中最小距离向量的快速获取方法,python,opencv,feature-extraction,feature-detection,Python,Opencv,Feature Extraction,Feature Detection,我正在使用python版本的openCV为两幅图像建立一个“相似性分数”。 首先,我找到每个图像的关键点及其描述符(例如,使用ORB或AKAZE)。 然后,我将这些关键点与图像进行匹配,并将这些匹配保存在一个列表中。 对于matches中的每个匹配x,我可以通过x.distance获得相应关键点之间的距离 我的相似性分数现在应该是匹配算法中找到的k最小距离的总和。显然,我可以得到这个分数(假设kknnMatch。在教程中,他们通常选择k=2,但也可能使用任意k。看看@Mika:谢谢你的回答。也许
matches
中的每个匹配x
,我可以通过x.distance
获得相应关键点之间的距离
我的相似性分数现在应该是匹配算法中找到的k
最小距离的总和。显然,我可以得到这个分数(假设k
):
然而,这个循环非常慢。是否有一个向量化版本的.distance
,我可以使用它将匹配项直接转换为浮点列表
显然,还有其他方法可以做到这一点。但是它们都很慢(比如,它们意味着我以某种方式在比赛中循环)
谢谢大家! 对k个最小距离求和的想法是什么?搜索k-最近邻搜索,你在这里“我会直接得到你需要的。OpenCV的描述符提供matcher->knnMatch。在教程中,他们通常选择k=2,但也可能使用任意k。看看@Mika:谢谢你的回答。也许我需要澄清一下。给定图1和图2,我的目标是对这些图像的相似性进行评分。如果匹配特征之间的最小k距离很小,这些图像将非常相似。与此相反,knnMatch会给出图2中与图1中给定关键点最相似的k个关键点。好的,您只想分析k个不同的关键点,而不是每个关键点的k个最佳匹配。你确定循环很慢吗?你的k有多大?你一共有几场比赛?使用快速排序进行排序应该很快。循环不应该那么慢。
matches = sorted(matches, key=lambda x: x.distance)
score = 0
for l in range(k):
score += matches[l].distance