python - OpenCV python FlannBasedMatcher 添加多个描述符

标签 python opencv flann flannbasedmatcher

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

我现在的目标是将多个图像添加到 FlannBasedMatcher 中,然后将其保存以便之后加载。当更改示例中的代码并尝试 add()train()调用 knnMatch(queryDescriptors=des1, k=2) 之前的描述符(而不是 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时,我应该用6中的哪个匹配作为anchor来比较距离不大于0.8*distance away?

最佳答案

问题 1:

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

问题 2:

比率测试由 Low(SIFT 作者)设计,用于衡量匹配点的唯一性。如果最佳匹配和第二最佳匹配之间的距离(在分数/相似性方面)很大,则意味着最佳匹配是唯一的,图像中没有其他特征与其相似。但是,如果第二个最佳匹配接近最佳匹配,则意味着该特征不是唯一的,并且该特征可能是我们应该从匹配过程中丢弃的重复模式。

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

也许您正在尝试从描述符的联合中对相似点进行聚类。那么比率测试在这种情况下就没有用了,因为不再有唯一的匹配。

关于python - OpenCV python FlannBasedMatcher 添加多个描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794676/

相关文章:

python - 训练、测试、验证拆分 Python。三件套

python - gunicorn gevent worker 修补了哪些功能?

c++ - XIMEA:openCV 2.4.9 无法找到 Ximea 相机,尽管它可以与其他程序一起正常工作

c++ - hdf5.h编译错误

c++ - Opencv Flannbasedmatcher

python - 单击按钮后更改模型字段值

python - 除了监听探测请求之外,还有哪些方法可以用来查找 802.11 wifi 设备?

opencv - 在OpenCV中设置矩形样式

c# - 如何在 Emgu CV 中实现 "rotate-algorithm"?

c++ - Flann Matcher 训练如何在 opencv 中工作?