我正在尝试使用SURF检测图像,遵循教程(https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html)。
现在我的目标是将多个图像添加到FlannBasedMatcher中,然后保存它以便之后加载它。当我从示例中更改代码并尝试在调用knnMatch(queryDescriptors = des1,k = 2)之前add()
和train()
描述符(而不是matches = flann.knnMatch(des1,des2,k=2)
),我得到了与教程示例不同的结果。
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:为什么我的结果与教程中不同?
当更改
knnMatch()
中k的值为6时,将返回最接近的6个匹配。使用knn=2,为了找到好的匹配,需要检查返回的匹配距离是否小于m1.distance < 0.8 * m2.distance
。问题2:在knn=6的情况下,我应该使用哪一个匹配作为锚点来比较距离是否大于0.8倍的距离?