OpenCV python FlannBasedMatcher添加多个描述符

2024-10-02 00:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着按照教程(https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html)使用SURF检测图像

我现在的目标是将多个图像添加到FlannBasedMatcher,然后保存它以便以后加载。当更改示例中的代码并在调用knmatch(queryDescriptors=des1,k=2)之前尝试add()train()时,我得到了教程示例中的其他结果。在

surf = cv2.xfeatures2d.SURF_create(800)
...
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)   # or pass empty dictionary
...
flann = cv2.FlannBasedMatcher(index_params,search_params)
flann.add(des1)
flann.train()
flann.knnMatch(queryDescriptors=des2, k=2)

问题1:为什么我得到的结果与教程中的不同?在

当为ex6更改knnMatch()中k的值时,将返回最接近的6个匹配项。knn=2时,为了找到好的匹配项,我检查返回的匹配项的距离不大于m1.distance < 0.8 * m2.distance。在

问题2:当knn=6时,我应该用哪一个匹配的6作为锚来比较距离不大于0.8*distance?在


Tags: py图像add示例matchertrain教程params
1条回答
网友
1楼 · 发布于 2024-10-02 00:29:58

问题1:

我认为结果会与教程不同,因为搜索范围不同。本教程在des2中找到des1的item1匹配项。但是,您正在des1和des2的联合中查找des1的item1。在

问题2:

比率检验是由Low(SIFT author)设计的,用来测量匹配点的唯一性。如果最佳匹配与次最佳匹配之间的距离(在分数/相似性方面)较大,则表示最佳匹配是唯一的,并且图像中没有其他特征与之相似。然而,如果第二个最佳匹配接近最佳匹配,则意味着该特征不是唯一的,并且该特征可能是一个重复的模式,我们应该在匹配过程中丢弃该模式。在

因此,通过使用k=6,您将寻找最佳的6个匹配项,这无助于确定特征的唯一性,因为只有最佳点和次最佳点才重要。在

也许你正试图从描述词的联合中把相似的点聚在一起。那么比率测试在这种情况下是无用的,因为不再有唯一的匹配。在

相关问题 更多 >

    热门问题