【问题标题】:OpenCV - FLANN algorithm does't obtain enough matching pointOpenCV - FLANN算法没有获得足够的匹配点
【发布时间】:2013-04-16 16:44:51
【问题描述】:

我是计算机视觉的新手。 我正在使用 Open CV 提出的这种算法http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html,以便在对拍摄图像的相机进行旋转平移后计算同一环境的 2 个场景(城市的鸟瞰图)之间的一些匹配点。 相机和环境都是模拟的(所以没有亮度变化,没有失真等) 显然,帧速率足够高以使图像大部分重叠。 之后,我必须使用这一点来计算描述相机所做运动的仿射变换矩阵(拍摄图像的高度不会随时间变化)。 所以我需要,对于每几张图像,至少有 2 个匹配点.. 我的问题是匹配点通常小于 3.. 是否存在一些对我的目的更有效的稳健方法? 谢谢

【问题讨论】:

  • 您使用的是您链接的代码吗?它应该是健壮的(至少它应该在你描述的情况下工作)。
  • 是的,完全一样。它是健壮的,从某种意义上说,匹配总是精确的,但奇怪的是,即使图像进行了非常小的移动并且仅改变了几个像素(比方说不超过十个),匹配也很少!跨度>
  • 过滤前有多少匹配项(注释//-- Draw only "good" matches)?
  • 相机没有移动:大约312;小动作:大约 290。问题是,如果我增加最小距离,它会发现错误的匹配
  • 这意味着你有大约 300 个你匹配的特征点,最后除了三个都被过滤掉了,对吧?如果你画出所有的匹配(不过滤任何东西),你有好的匹配吗?比例是多少?

标签: c++ opencv surf


【解决方案1】:

我相信您给出的示例中实现的过滤非常幼稚。假设你得到一个得分非常高的匹配项(w.r.t 描述符之间的距离),那么 min_dist 非常小,可能会过滤掉好的匹配项。换句话说,得分最高的匹配不一定是几何上最好的(两个特征可能看起来非常相似,但不是真实世界的对应)......

你可以尝试做的是:

  • 删除过滤实现;保留所有匹配项
  • 使用findHomography() 计算单应矩阵
    • findHomography() 允许您使用 mask 来跟踪内点
  • 仅绘制在mask 中标记为inliers 的匹配项

这应该是一个更好的验证。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2018-09-12
    • 2022-06-18
    • 2015-07-21
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多