gpt4 book ai didi

opencv - 统一距离度量用于 OpenCV 特征匹配的不同实现?

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:51 24 4
gpt4 key购买 nike

我正在尝试在 OpenCV 中进行一些关键特征匹配,目前我一直在使用 cv::DescriptorMatcher::match 并且正如预期的那样,我得到了很多错误匹配。

在我开始为提取的匹配项编写自己的过滤器和修剪程序之前,我想尝试 cv::DescriptorMatcher::radiusMatch 函数,它应该只返回更接近每个匹配项的匹配项除了给定的 float maxDistance

我想为可用的 OpenCV 匹配算法编写一个包装器,以便我可以通过一个接口(interface)使用它们,该接口(interface)允许额外的功能以及额外的外部(我的)匹配实现。

由于在我的代码中,只有一个具体类充当 OpenCV 特征匹配的包装器(类似于 cv::DescriptorMatcher,它采用特定匹配算法的名称并在内部构造它通过工厂方法),我还想编写一个通用的方法来实现利用cv::DescriptorMatcher::radiusMatch 的匹配,它可以工作对于所有不同的匹配器和特征选择(我有一个类似的包装器,允许我在不同的 OpenCV 特征检测器之间切换,也可以实现我自己的一些)。

不幸的是,在查看了 OpenCV 文档和 cv::DescriptorMatcher 接口(interface)之后,我找不到任何关于用于计算实际距离的距离度量的信息比赛之间的距离。我找到了一个很好的匹配示例 here使用 Surf 功能和描述符,但我没能理解参数的特定值的实际含义。

由于我想比较使用不同特征/描述符组合时得到的结果,我想知道使用了哪种距离度量(以及它是否可以轻松更改),以便我可以使用对我尝试的所有组合有意义的东西。

有什么想法/建议吗?

更新

我刚刚打印了使用 cv::DescriptorMatcher::match 和各种特征/描述符组合时得到的特征距离,我得到的是:

  • MSER/SIFT 数量级:100
  • SURF/SURF 数量级:0.1
  • SURF/SIFT 数量级:50
  • MSER/SURF 数量级:0.2

由此我可以得出结论,无论对特征应用哪种距离度量,它都绝对不是归一化的。由于我使用 OpenCV 和我自己的接口(interface)来处理不同的特征提取、描述符计算和匹配方法,我想为 ::radiusMatch 提供一些参数,我可以将其用于所有(大多数)不同的组合。 (我已经尝试使用 BruteForceFlannBased 匹配器进行匹配,虽然匹配略有不同,但匹配之间的差异对于每个组合)。


一些上下文:

我正在用安装在(缓慢)移动车辆顶部的相机拍摄的两张照片对此进行测试。图像应该相隔大约 5 帧(车辆运动 1 米),因此大部分特征应该是可见的,并且差别不大(尤其是两幅图像中那些远离相机的特征)。

最佳答案

距离的大小确实取决于所使用的特征类型。这是因为一些专门的特征描述符还带有一个专门的特征匹配器,可以优化描述符的使用。如果你想获得不同特征类型的匹配距离的权重,你最好的选择可能是制作一个包含十几个或更多 1:1 匹配的训练集,在其上释放每个特征检测器/匹配器,并对距离进行归一化,以便每个检测器在所有匹配中的平均距离为 1。然后,您可以在其他数据集上使用获得的权重。

关于opencv - 统一距离度量用于 OpenCV 特征匹配的不同实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9909996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com