OpenCV Python 特征检测与匹配

0 投票
1 回答
962 浏览
提问于 2025-04-17 20:34

我不太明白FLANN中的特征匹配API。我找到了一段代码,并把它作为我开发的基础:图像拼接Python

但是我搞不清楚flann.knnMatch()这个函数返回了什么。它返回的是一个包含DMatch类型的元组的列表。我不明白为什么每个元组里有两个匹配项。我也不明白为什么要用Lowe的比率来比较元组中的两个项,然后我们只使用元组中的第一个项。

我在OpenCV文档中找不到关于flann Python绑定的任何信息,所以我一直在努力弄清楚这一切。

对此任何解释都将不胜感激。

谢谢。

1 个回答

0
  1. flann.knnMatch()这个函数(设置k=2)会返回两个最匹配的点。
  2. 在拼接图片时,你可能需要进行双向匹配,也就是说,对于第一张图片中的每一个点,我们需要在第二张图片中找到两个最好的匹配点,反过来也是一样,对第二张图片中的特征点,找到它们在第一张图片中的两个最佳匹配。
  3. 这两个最佳匹配是根据描述符之间的距离来判断的。如果最好的匹配的距离非常小,而第二个匹配的距离要大得多,那么第一个匹配就是毫无疑问的最佳选择。
  4. 如果这两个最佳匹配的距离相对接近,那么你需要进行一个比率测试,也就是比较最佳匹配的距离和第二个匹配的距离的比值,确保这个比值不大于一个设定的阈值(这就是比率测试的主要目的)。

撰写回答