为什么我们需要 crossCheckMatching 功能?

2024-04-04

我正在阅读很多使用特征提取(sift ecc)进行对象检测的文章。

在计算两个图像上的描述符后,为了获得良好的匹配,他们使用了 crossCheckMatching。 (发现于样本/cpp/descritpor_extractor_matcher.cpp https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/descriptor_extractor_matcher.cpp?rev=3943)

我能理解为什么这样选择吗?

为什么我们需要评估两者

descriptorMatcher->knnMatch( descriptors1, descriptors2, matches12, knn );
descriptorMatcher->knnMatch( descriptors2, descriptors1, matches21, knn );

我不明白。

例如,计算欧几里距离不会返回相同的结果双向?


您通常不能假设您的匹配器将使用欧几里得距离。例如,BFMatcher 支持不同的规范:L1、L2、Hamming...

您可以在此处查看文档以了解更多详细信息:http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html

无论如何,所有这些距离测量都是对称的,使用哪一个来回答问题并不重要。

答案是:打电话knnMatch(A,B)与调用不一样knnMatch(B,A).

如果您不相信我,我会尽力为您提供图形化且直观的解释。为了简单起见,我假设knn==1,这样对于每个查询的描述符,算法只会找到 1 个对应关系(更容易绘制:-)

我随机挑选了一些二维样本并创建了两个数据集(红色和绿色)。在第一个图中,绿色位于查询数据集中,这意味着对于每个绿色点,我们尝试找到最接近的红色点(每个箭头代表一个对应关系)。

在第二张图中,查询数据集和训练数据集已交换。

最后,我还绘制了结果crossCheckMatching()仅保留双向匹配的函数。

正如你所看到的,crossCheckMatching()的输出比每个单独的 knnMatch(X,Y) / knnMatch(Y,X) 好得多,因为只保留了最强的对应关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们需要 crossCheckMatching 功能? 的相关文章

  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • 你好,我最近正在开发我的新游戏,我遇到了*无限跳跃*的问题

    所以基本上当我按跳跃 空格键时我会跳跃但是如果我连续按空格键它 只是跳啊跳啊跳等等 我不想要我只想它跳一次 code if Input GetKeyDown space isGrounded velocity y Mathf Sqrt ju
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • SQL Server“未找到网络路径”在不同环境中随机且不频繁地发生

    类似 如果不是同一个问题 随机遇到网络路径未找到异常 https stackoverflow com questions 38696448 network path not found exception encountered rando

随机推荐

  • Python函数返回字典?

    我是一名 Python 初学者 我遇到了一个我不理解的函数的输出 我无法提供所有代码 因为其中一些是我公司的 IP 我基本上使用我们的一位开发人员编写的库从数据仓库中提取指标 然后我想在另一个应用程序中使用这个指标值 当我获得该值时 我会将
  • 如何在 Gradle 中遮蔽传递依赖?

    有没有办法在 Gradle 中隐藏特定的 传递 依赖项 我的情况 我有一个项目直接依赖com amazonaws aws java sdk emr 1 10 33 and org apache hadoop hadoop aws 2 7 1
  • 如何使用 Scala Stream 类读取大型 CSV 文件?

    如何使用 Scala Stream 读取大型 CSV 文件 gt 1 Gb 你有代码示例吗 或者您会使用不同的方式来读取大型 CSV 文件而不先将其加载到内存中吗 只需使用Source fromFile getLines正如你已经说过的 这
  • 为什么我无法手动提交此表单?

    我试图在提交表单之前完成一些事情 以下代码运行没有错误 但我的表单从未提交 我不知道出了什么问题
  • 在Azure函数中设置cors标头

    在我的 Azure 函数中 我尝试设置 cors 标头 var response req CreateResponse HttpStatusCode OK response Content new ObjectContent
  • 使用返回 Future 的函数映射 Stream

    有时我发现自己处于这样的境地 Stream X and a function X gt Future Y 我想组合成一个Future Stream Y 而且我似乎找不到办法做到这一点 例如 我有 val x 1 until 10 toStr
  • 如何删除 Apache Mesos 中的孤立任务?

    该问题可能是由 Mesos 和 Marathon 引起的不同步 https github com mesosphere marathon issues 616 但是 GitHub 上提到的解决方案对我不起作用 当我发现孤立任务时 我所做的是
  • 构建成功时 Eclipse (CDT) 中出现可疑错误消息

    使用面向 C C Linux 开发人员的 Eclipse IDE 版本 Indigo释放 与克 4 1 2 on 科学 Linux CERN 5 RHEL 5 我目前正在开发一个项目 其中使用Qt4GUI 以及 Apache 的log4cx
  • Android应用程序架构——MVVM还是MVC?

    我有一个正在开始处理的 android 项目 我希望它的结构尽可能健壮 我有 WPF MVVM 背景 并且阅读了一些有关 Android 应用程序架构的内容 但我找不到关于我应该使用哪种架构的直接明确的答案 有些人建议使用 MVVM htt
  • 如何在 JavaScript 中使用五位数长的 Unicode 字符

    在 JavaScript 中我可以这样做 foo u2669 1 4 note 但我不能这样做 foo u1D15D full note five hex digits 它将被解释为 u1D15 后跟 D 有没有解决方法 2012 年 7
  • Android 在自定义项目上应用主题

    我可以声明一个主题和一个特定的按钮设计 问题是这种样式适用于所有按钮 我想声明一个具有自己风格的特定按钮 独立于其他按钮更改每个主题 类似于 保存 按钮 任何想法 我尝试了以下方法
  • 查看 Windows 上进程的打开文件处理程序

    我想查看 Windows 上进程的打开文件处理程序 以验证读取了正确的配置文件 ProcMon 和其他工具显示引用的模块 dll 我需要查看所有文件 例如 xml txt 等 的打开文件句柄 流程浏览器 http technet micro
  • pyfacebook 中是否存在 Graph Api 模块

    我已经安装了 pyfacebook 以及 python sdk 即使我收到如下错误 使用此代码时 import facebook token my token graph facebook GraphAPI token profile gr
  • 如何将Android应用程序的方向锁定为手机中的纵向和平板电脑中的横向?

    我正在开发一个 Android 应用程序 当用户旋转设备时 我不希望其方向更改为横向模式 另外 我希望锁定方向在手机上为纵向模式 在平板电脑上为横向模式 这可以实现吗 如果可以 如何实现 谢谢 您只需在以下内容中定义以下属性activity
  • 为什么 C++ 需要通过标头或语句进行前向声明,而 Java 不需要? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如果你不转发声明你的函数 Java 不会抱怨 而 C 会抱怨 我知道 C 涉及预处理 但我想了解更多 目标文件 Java 编译器依赖于
  • 替代嵌套在另一个表单中的 Ajax 上传表单

    我有一个 HTML 表单来编辑我工作地点的数据库系统中人员的详细信息 表单的一部分允许用户上传该人的照片 然而 这给我带来了麻烦 因为我试图让用户上传图片并在提交要保存的人员详细信息之前看到它已成功上传 从而使表单更加 Ajax y 给我带
  • 如何将 SketchUp 模型导出到 Three.js?

    我通过谷歌创建了一个模型SketchUp 我想将其导出到three js节省一些时间 因为我想使用SketchUp比three js 那么有人可以告诉我该怎么做吗 非常感谢 您可以从 SketcUp 导出 collada DAE 然后使用
  • 移动包含子模块的 git 工作副本

    Git 最近的一项变化改变了 git使用子模块时处理目录 而不是拥有一个 git每个子模块 现在所有内容都位于 根级别 git目录 与包括子模块的工作副本相对应的目录 然后 在每个子模块中 创建一个文件 该文件指向该子模块的新位置 git目
  • 如何在kivy项目中隐藏python代码文件和其他相关文件

    我最近在 Google Play 上发布了一个用 Python Kivy 编写的 Android 应用程序 通常 build py 脚本会将整个项目文件包装到一个文件夹中 即应用程序包文件夹 但是 如果我在安装 apk 后检查手机上这个包的
  • 为什么我们需要 crossCheckMatching 功能?

    我正在阅读很多使用特征提取 sift ecc 进行对象检测的文章 在计算两个图像上的描述符后 为了获得良好的匹配 他们使用了 crossCheckMatching 发现于样本 cpp descritpor extractor matcher