- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 OpenCV 从图像中检测和提取 ORB 特征。
但是,我得到的图像没有标准化(不同尺寸、不同分辨率等...)。
我想知道在提取 ORB 特征之前是否需要规范化我的图像以便能够跨图像匹配它们?
我知道特征检测是尺度不变的,但我不确定它对图像分辨率意味着什么(例如,2 张相同大小的图像,其中 1 个对象近,另一个对象远应该导致匹配,即使它们在图像上的比例不同,但如果图像的尺寸不同怎么办?)。
我是否应该根据图像大小调整 ORB 的 patchSize(例如,如果我有一张 800px 的图像并使用 20px 的 patchSize,我应该为 400px 的图像使用 10px 的 patchSize 吗?)。
谢谢。
更新:我用高分辨率和低分辨率图像测试了不同的算法(ORB、SURF 和 SIFT),以了解它们的表现。在此图像中,对象大小相同,但图像分辨率不同:
我们可以看到 SIFT 非常稳定,尽管它的功能很少。 SURF 在关键点和特征尺度方面也相当稳定。所以我的猜测是,使用 SIFT 和 SURF 在低分辨率和高分辨率图像之间进行特征匹配是可行的,但是 ORB 在低分辨率中具有更大的特征,因此描述符与高分辨率图像中的描述符不匹配。
(在高分辨率和低分辨率特征提取之间使用了相同的参数)。
所以我的猜测是,如果我们想在不同分辨率的图像之间进行匹配,那么 SIFT 或 SURF 会更好。
最佳答案
根据 OpenCV documentation , ORB 也使用金字塔来产生多尺度特征。尽管此页面上的详细信息尚不清楚。
如果我们看一下 ORB paper itself ,在第 6.1 节中提到使用了五种不同比例的图像。但是我们仍然不确定您是否需要手动计算不同比例图像的描述符,或者它已经在 OpenCV ORB 中实现。
最后,from source code (我写这个答案时的第 1063 行)我们看到为关键点/描述符提取计算了不同分辨率的图像。如果您跟踪变量,您会发现 ORB 类有一个比例因子,您可以使用 getScaleFactor
方法访问它。
简而言之,ORB 尝试自己在不同尺度上执行匹配。
关于opencv - ORB 是否取决于图像分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52689296/
问题:ORB.destroy() 无法正确清理,ORB 对象实例不会被垃圾回收。 此问题是在 JDK5 中提出的,并在此处记录的后续版本中修复 http://bugs.java.com/view_bu
此问题涉及:Is it possible to have several ORB objects in the same process? 所以,多亏了@BrianKelly,我找到了有关 ORB 标
我有一个 C++ CORBA 服务器,它实现了一个抛出用户定义异常的接口(interface)。 当客户端和服务器都用 C++ 实现时(使用 TAO orb 和omniORB 进行测试),我可以轻松捕
诚然,我是 CORBA 和 ORB 的新手。我有一些代码安装在使用 TAO ORB 版本 1.3 的第 3 方计算机上。当我的代码调用时: String myObjectString = "IOR:0
我想从属性文件初始化我的 ORB(通常我像这样初始化它,同时运行我的示例: ./app -ORBInitRef NameService=corbaloc::localhost:2809/NameSer
我需要对我的机器人进行编程,以便它能够找到被要求拾取的物体并将其带到指定位置。我尝试过简单的 img 处理技术,例如过滤、轮廓查找。这似乎效果不佳。我想使用 ORB 特征提取器。这是一个示例图像。感兴
我正在使用 Open CV 进行一个无标记的增强现实项目。目前我正在使用 ORB 来检测特征和增强 3D 对象。到目前为止,模型增强得很好,但增强并不像预期的那样顺利。增强型 3D 模型很紧张。 有哪
我有一个程序可以从 RSTP 获取视频源并检查对象。唯一的问题是物体需要距离摄像头大约 6 英寸,但当我使用有线网络摄像头时,物体可能在几英尺远。两个摄像头都以相同的分辨率传输,是什么导致了这个问题?
我正在尝试使用 OpenCV 从图像中检测和提取 ORB 特征。 但是,我得到的图像没有标准化(不同尺寸、不同分辨率等...)。 我想知道在提取 ORB 特征之前是否需要规范化我的图像以便能够跨图像匹
我有一个 orbd 在虚拟主机(IP A)上启动,并注册了一些远程对象。托管虚拟盒子的盒子有 IP B。当客户端尝试连接到位于 A 的 ORB 以获取 NamingContext 时,ORB 使用指向
我不确定我是否正确理解什么是开源。我在这里搜索以找到答案,但没有找到有人问类似的问题。 我如何在文件“features.hpp”中看到“检测”功能的源代码。 我正在寻找算法ORB的数学计算。 所有人都
我的项目是基于android的草药识别。我使用 ORB 来获取关键点、特征和匹配特征。 我想使用这个算法: 我使用 4 个引用图像,并将它们的特征 image1 与 image1、1-2、1-3、1-
我想知道 orb 特征检测器的参数。我将它用作关键点提取器和描述符。作为匹配器,我使用 BFMatcher。 目前我是这样使用的: ORB orb(25, 1.0f, 2, 10, 0, 2, 0,
我使用 ORBacus .我有一个多线程应用程序,我想在同一进程中有多个 ORB 对象。这个想法是:每个线程都有自己的 ORB 并连接到不同服务器。 这可能吗?如果是 - 如何? “你试过什么?”:我
我有一个棘手的问题。作为 CORBA 的新手,我无法摆脱它。 如何从另一个实现实例化一个实现对象? 通常,如果我有一个接口(interface) A,我会创建一个 A_Impl 类(在 A_Impl.
我在 Python 中使用 OpenCV 来制作给定图像的特征描述符。为此,我正在使用 ORB 类。我不明白的是在使用 orb.detect 和 orb.compute 之后描述符数组包含什么方法。
我无法弄清楚 ORB 算法输出中的关键点在 OpenCV 中是如何排名的。 通过在一些样本上进行测试,我知道它不是按帧上的位置,而且我认为它不是按算法分配给每个关键点的分数。 我的目标是根据分数对关键
我正在开发一个特征跟踪应用程序,到目前为止,在尝试了几乎所有的特征检测器/描述符之后,我使用 ORB 获得了最令人满意的总体结果。我的特征描述符和检测器都是 ORB。 我正在选择一个特定区域来检测源图
大家好 :) 我只是 openCV 的初学者。 我一直在尝试使用 ORB 开发跟踪程序。我只想在检测到的对象周围绘制矩形。 这是一部分 result的跟踪程序。 “黑车”是我要跟踪的(感兴趣的对象)。
我最近在 opencv 的 ORB 中发现了一些非常奇怪的行为描述符。 cv::Mat grey; //greyscale image std::vector keypoints; cv::Mat d
我是一名优秀的程序员,十分优秀!