Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在opencv Python中解释ORB匹配_Opencv_Orb - Fatal编程技术网

在opencv Python中解释ORB匹配

在opencv Python中解释ORB匹配,opencv,orb,Opencv,Orb,在OpenCV中使用ORB和BFMatcher之后,我需要评估结果,以便在比较img1和img3以及img2和img3之后解释匹配。我知道ORB匹配包含一个汉明距离列表,但我想把这个向量转换成相似性的标量值 我想到了两种情况: 1) 使用匹配的长度,越长表示相似度越高。但是如果长度匹配1=长度匹配2,我们该如何处理呢?。在这种情况下,我们可以2)添加所有距离,最小值更可取 我们能把所有情况合并成一个指标吗 以下是我工作的最低要求: orb = cv2.ORB() kp1, des1 = orb.

在OpenCV中使用ORB和BFMatcher之后,我需要评估结果,以便在比较img1和img3以及img2和img3之后解释匹配。我知道ORB匹配包含一个汉明距离列表,但我想把这个向量转换成相似性的标量值

我想到了两种情况: 1) 使用匹配的长度,越长表示相似度越高。但是如果长度匹配1=长度匹配2,我们该如何处理呢?。在这种情况下,我们可以2)添加所有距离,最小值更可取

我们能把所有情况合并成一个指标吗

以下是我工作的最低要求:

orb = cv2.ORB()
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1,des2)
matches = sorted(matches, key = lambda x:x.distance)
return len(matches)

感谢

bf.match
返回的匹配类型。因此,您可以设置距离阈值,基本上您希望距离尽可能低,但您需要至少4个关键点来定义单应性。您可以设置它们的阈值,以便从所有匹配的集合中获得一组良好的匹配。如果您查看DMatch类,您可以找到
queryIdx
trainIdx
,它们对应于两幅图像中的关键点idx,因此您基本上可以像这样过滤关键点。谢谢Rick。如果我计算单应匹配(img1-img3)和单应匹配(img2-img3)。我如何定量地比较img3的最佳匹配?我不明白你的意思,也不明白你为什么要这么做。你能详细说明一下吗?如果你真的想要一个值/相似性分数,你可以使用RANSAC计算单应性,然后变换图像。然后你可以使用Suitebale相似性分数。如果你想接受,我可以将其添加为答案:)