C++ OpenCV-FLANN算法没有';无法获得足够的匹配点

C++ OpenCV-FLANN算法没有';无法获得足够的匹配点,c++,opencv,surf,C++,Opencv,Surf,我是计算机视觉的新手。 我使用OpenCV提出的算法,在对拍摄图像的摄像机进行旋转平移后,计算相同环境(城市鸟瞰图)的两个场景之间的一些匹配点。 相机和环境都是模拟的(因此亮度没有变化,没有失真等) 显然,帧速率足够高,以便使图像大部分重叠。 之后,我必须使用这一点来计算仿射变换矩阵,该矩阵描述了相机所做的运动(拍摄图像的高度不会随时间变化)。 所以我需要,对于每两张图像,至少2个匹配点。。 我的问题是匹配点通常小于3。。 是否存在更适合我的健壮方法? 谢谢我认为您给出的示例中实现的过滤非常幼稚

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

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

您可以尝试做的是:

  • 删除过滤实现;保留所有的火柴
  • 使用
    findHomography()
    • findHomography()
      允许您使用
      mask
      来跟踪入口
  • 仅绘制在
    mask

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

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