问题标签 [brisk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
608 浏览

opencv - 如何在 OpenCV 中设置 BRISK 描述符大小?

BRISK 的默认大小为 512 位。如何生成 1024 位描述符?

我的部分代码:

0 投票
1 回答
181 浏览

c++ - C++ mex 不断运行并等待 MATLAB 输入

我正在使用我集成到 MATLAB 中的 opencv。我正在使用 Opencv 的 Features2D 和 Nonfree 库来运行不同的关键点检测和描述算法。

经过多次测试后,我注意到 BRISK 在我的数据上表现相当不错。问题是与其他算法相比,BRISK 类的构造函数非常慢。这一行:

BRISK探测器(10,3,1.0f);

比检测慢一个数量级,描述一个匹配。现在,我以这样一种方式制作它,每次新的一对图像到达时,我都会运行我的 mex 文件,并且所有声明和类构造都会再次完成,这使得它变慢了。

有没有办法在我的 MATLAB 脚本开头(在循环将新图像发送到 mex 文件之前)启动 mex 文件,以便它做出所有需要的声明并在后台等待来自 MATLAB 的输入。这将使我的代码更快。在 BRISK 的创建者提供的 matlab API 中,似乎是以这种方式完成的,但我不知道如何为我自己的 mex 代码做同样的事情。

我尝试在 stackoverflow 中搜索它,但我真的不知道要搜索什么或这种东西叫什么。

谢谢

0 投票
1 回答
618 浏览

opencv - 具有良好特征的标记,用于识别多个对象

我试图通过识别物体在相机图像上的标记来定位物体。我目前正在使用 ORB 特征检测器(即金字塔 FAST 检测器)和 BRISK 描述符。

我应该正确识别 12-16 个不同的标记(因为我还希望知道对象的方向,所以我会在每个对象上放置一个立方体或 3 面棱镜,并且我应该能够在单个场景中识别 4 个对象)。

我的问题是,我如何选择具有良好特征(可重复和独特)的标记?

附带问题:我是否以不好的方式处理这个问题?有没有更简单的解决方案?

谢谢

0 投票
1 回答
5076 浏览

opencv - 使用 BRISK 检测器/描述符 OpenCV 的性能问题

在 OpenCV 中使用 BRISK 进行特征检测和描述时遇到性能问题。

基本上,我尝试匹配从这张图片中获得的所有描述符:在此处输入图像描述

针对我从图像数据库中获得的所有描述符,使用基于 flann 的匹配器和 LSH 算法和 BRISK 进行特征检测和描述。

我的图像数据库由 242 张图像组成。在这 242 张图像中,有三张图像对应于上述“复杂”图像查询中分别拍摄的每个对象。

以下是用于 BRISK 检测的参数(默认 opencv 参数):Treshold:30,Octaves:4,Pattern scale:1.0。

在使用最佳匹配技术进行 flann 匹配后(图像查询中的每个描述符都与其在数据库描述符集中的最近邻域相关联),我的算法输出按匹配百分比排序的数据库图像列表。以下是前四个结果:

  1. 数据库中螺栓对应的图像:4 个匹配/15 个检测到的关键点 => 匹配百分比:26.7%。
  2. 与数据库中的瓶子对应的图像有 4 个匹配 / 15 个检测到的关键点 => 匹配百分比:26.7%。
  3. 数据库中螺栓对应的图像有 10 个匹配 / 59 个检测到的关键点 => 匹配百分比:16.9%。
  4. 对应于图像查询中不存在的对象的图像:1 个匹配/16 个检测到的关键点 => 匹配百分比:16.7%。

我使用 ORB 作为特征检测和描述来比较这个结果。以下是使用的参数:特征数:2000,比例因子:1.2,金字塔级别数:8。

这是我得到的结果:

  1. 数据库中螺栓对应的图像:576 个匹配/752 个检测到的关键点 => 匹配百分比:76.6%。
  2. 与数据库中的瓶子对应的图像有 111 个匹配 / 189 个检测到的关键点 => 匹配百分比:58.7%。
  3. 数据库中笔对应的图像有 124 个匹配 / 293 个检测到的关键点 => 匹配百分比:42.3%。
  4. 对应于图像查询中不存在的对象的图像:2 个匹配/66 个检测到的关键点 => 匹配百分比:3%。

如您所见,使用 ORB 的结果要好得多。首先,在数据库中的每张图像上检测到更多的关键点,并且对于好的对象,匹配的百分比明显更好。此外,好对象的匹配百分比与错误对象的匹配百分比之间的差距更为显着。

我想知道为什么 BRISK 检测器检测到的关键点比 ORB 检测器少得多。我进行了不同的测试,以弄清楚如何使用 BRISK 检测器检测更多关键点(降低阈值,降低八度数)。我确实可以检测到更多的关键点,但与 ORB 检测器的区别仍然非常重要。你知道为什么 BRISK 检测器会有这样的行为吗?

我的 OpenCV 版本是 2.4.8,但我根据这些陈述尝试了 2.4.4 和 2.4.9 版本的 BRISK 检测部分:

http://code.opencv.org/issues/2491BRISK 特征检测器在没有改进的情况下检测到零关键点。

我还尝试将 ORB 检测器与 BRISK 描述结合起来。匹配结果优于第一种方法(完全 BRISK),但比第二种方法(完全 ORB)差:

  1. 数据库中螺栓对应的图像:529 个匹配/708 个检测到的关键点 => 匹配百分比:74.7%。
  2. 与数据库中的瓶子对应的图像有 69 个匹配 / 134 个检测到的关键点 => 匹配百分比:51.5%。
  3. 数据库中与笔对应的图像已匹配 93 / 247 个检测到的关键点 => 匹配百分比:37.6%。
  4. 对应于图像查询中不存在的对象的图像:5 个匹配/50 个检测到的关键点 => 匹配百分比:10%。

请注意,在方法 2 和方法 3 中,在每个图像上检测到的关键点数量并不相同。实际上,当我在测试图像(这里是螺栓的图像)上运行此代码时:

BRISK 似乎没有计算描述符中所有检测到的关键点(ORB 检测器检测到的 752 个关键点 => BRISK 描述符计算的 708 个描述符)。

然而,即使 ORB 检测到的所有关键点都不是在 BRISK 描述符中计算的。从这些结果看来,BRISK 不是比 ORB 更好地描述一个关键点吗?如果我错了,请纠正我,但我很确定应该是相反的......

如果你们有任何可以帮助我理解我的结果的元素,或者如果你已经在 OpenCV 中遇到了 BRISK 的一些问题,请告诉我。任何帮助将不胜感激 :)。

0 投票
1 回答
1228 浏览

c++ - 正确描述符中的位大小?opencv

我的理解有点小问题。

opencv 中 Brisk 描述符 Mat 值的标准类型是标准大小为 8 位的 unsigned char 值。KeyPoint 的完整描述符的大小为 16 个无符号字符值。8bitx16 = 128bit 虽然在论文中你只是发现你有一个 512 位的描述符。

任何人都可以帮助我摆脱这种不匹配吗?我还没有在 OpenCV 文档中发现描述符的位大小是否可扩展(还没有?)。

0 投票
2 回答
666 浏览

matlab - Brisk (binary robust invariant scalable keypoints )

I am trying to do BRISK my own code in matlab.

Where ı am stack, ı don't understand what this expression means.

let us consider one of the N*(N −1)/2 sampling-point pairs (pi, pj).

A = {(pi, pj) ∈ R2 × R2 | i < N ∧ j < i ∧ i, j ∈ N }

The other my question , what is the difference between local gradient and global gradient?

0 投票
0 回答
461 浏览

ios - 花费大量时间来获取 OpenCV 的关键点和描述符

我使用 OpenCV Surf 方法来获取关键点和描述符,它工作得很好,但要花很多时间。

我的代码是: -

Xcode 时间结果:-

2015-10-26 13:22:27.282 AVDemo[288:26112] 关键点检测

2015-10-26 13:22:28.361 AVDemo[288:26112] 描述符检测

2015-10-26 13:22:30.077 AVDemo[288:26112] 匹配检测

这里需要 2 秒来计算


我还使用了另一种方法来获取: -

这也可以正常工作,但有相同的 Time Xcode 结果问题:-

2015-10-26 14:19:47.939 AVDemo[305:32700] 检测关键点

2015-10-26 14:19:49.787 AVDemo[305:32700] 计算关键点

2015-10-26 14:19:49.818 AVDemo[305:32700] 摄像头图像转换结束

怎样才能最大限度地减少这个时间?

现在我使用了 FASTfeatureDetector,它可以最大限度地减少一些时间,但 SurfDescriptorExtractor 仍然需要时间。

新代码是: -

Xcode:-

2015-10-26 16:06:19.018 AVDemo[375:47824] 关键点检测

2015-10-26 16:06:19.067 AVDemo[375:47824] 描述符检测

2015-10-26 16:06:21.117 AVDemo[375:47824] 匹配检测

0 投票
2 回答
712 浏览

exception-handling - opencv中的崩溃检测功能(ORB和BRISK)

我正在尝试使用检测器 ORB 获取图像中的关键点,但总是出现异常和崩溃,我的代码是下一个。

img 是提前声明的,问题是何时做检测器->检测(img,kp);而且我不知道是什么问题,我正在尝试其他形式的操作,但在调用检测()时都会崩溃。

我尝试使用 BRISK,并且在检测崩溃的调用中问题是相同的。为了简化,我轻快地做了下一个:

这让人恼火。

我在带有 Windows 10 的 Visual Studio 2015 中使用 opencv 3。

对不起我的英语,谢谢你的回答。

0 投票
0 回答
317 浏览

javacv - 如何在 OpenCv Java 2.4.9 上使用参数创建 BRISK 特征检测

我知道 OpenCv C++ 中有 BRISK 的构造函数,因此可以设置阈值、八度值,但我在 OpenCv Java 上找不到类似的东西。我知道有 create() 方法可以创建 BRISK,但无法在 Java 上设置阈值和八度音程等值。

如何在 OpenCv Java 2.4.9 上实现这一点,这可能吗?

0 投票
1 回答
2795 浏览

c++ - 在 OpenCv 3.2 中使用 ORB、Fast、Brsik 等特征描述符

我很陌生OpenCV。我按照本教程搜索图片中的对象,并且能够成功运行代码。

在搜索的过程中,我发现有更多的特征匹配选项(例如FastORBBRISK)。所以我决定尝试一个不同于SURF.

但我遇到了麻烦。我必须做什么才能创建不同的描述符?有人可以帮助我吗,也许有一个代码示例OpenCV3.2?:)

这是我在搜索时找到的链接OpenCV 3.2,但遗憾的是它不适用于.