问题标签 [flann]

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 投票
1 回答
621 浏览

c++ - FLANN 和大 HDF5 文件

我正在尝试将flann与大 hdf5 文件(尺寸 1kk x 1k)一起使用。

但是 flann_example.cpp 中的所有功能都失败了

在线的

因为它似乎想要分配大内存块new

我正在使用 2 Gb 的 win32。有没有办法处理这样的大数据?

我也试过用python

0 投票
1 回答
1160 浏览

makefile - FLANN 编译(cygwin)

我正在尝试在 Windows 上构建 FLANN 库。但是我安装了 cygwin。

当我使用cmake ..它时,它似乎使用了 cygwin 和 gcc 编译器。

然后nmake不工作。

0 投票
3 回答
28374 浏览

python - 多张图像的 OpenCV 特征匹配

如何使用 FLANN 优化多张图片的 SIFT 特征匹配?

我有一个取自 Python OpenCV 文档的工作示例。但是,这是将一张图像与另一张图像进行比较,而且速度很慢。我需要它来搜索一系列图像(几千张)中匹配的特征,并且我需要它更快。

我目前的想法:

  1. 运行所有图像并保存特征。如何?
  2. 将来自相机的图像与上述基础进行比较,并找到正确的图像。如何?
  3. 给我结果,匹配图像什么的。

http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html


更新

在尝试了很多事情之后,我现在可能已经更接近解决方案了。我希望可以建立索引,然后像这样在其中搜索:

但是我仍然没有设法为 flann_Index 参数构建一个接受的 npArray 。

0 投票
1 回答
1119 浏览

opencv - OpenCV:在 FLANN 模块中,KDTree 构造函数创建了 4 棵相同大小的树。为什么?

在 FLANN 模块中,KDTree 构造函数采用配置参数来创建树。我看到默认值为 4。有人可以建议为什么 4 或为什么最近邻居搜索需要多棵树吗?

0 投票
1 回答
2663 浏览

c++ - C++ / OpenCV - Flann 索引匹配和 Flann 匹配之间的区别

我正在尝试使用 了解更深层次的特征匹配FLANN,看起来有两种可用的方法:有和没有索引。

这是SO关于使用FLANN with indicies 进行匹配的问题: How to use opencv flann::Index?

这是一个FLANN 使用索引的匹配示例: https ://github.com/Itseez/opencv/blob/master/samples/cpp/matching_to_many_images.cpp

我当然看到了代码中的差异,但我试图了解使用一种方法相对于另一种方法的优势是什么。我知道在数据库中,在许多情况下添加索引会提高性能。FLANN用于匹配特征时是否类似???

有人对这个有经验么?

0 投票
1 回答
1596 浏览

c++ - FlannBasedMatcher 返回不同的结果

使用FlannBasedMatcher在 OpenCV 中,我得到不同的结果调用具有相同参数的匹配器。谁能建议我做错了什么?

下面的代码显示了我遇到的问题的一个最小示例 - 它是我如何使用的简化代表FlannBasedMatcher- 这不是真正的代码:)

每次循环输出的结果应该是相同的,但它们不是。

输出,虽然我认为它不会有帮助(?),是

0 投票
2 回答
7296 浏览

c++ - 使用 FLANN 匹配通过 OpenCV SIFT 从列表中识别图像

该应用程序的重点是从已设置的图像列表中识别图像。图像列表已将其 SIFT 描述符提取并保存在文件中。这里没有什么有趣的:

然后设备拍照。SIFT 描述符以相同的方式提取。现在的想法是将描述符与文件中的描述符进行比较。我正在使用来自 OpenCV 的 FLANN 匹配器来做到这一点。我正在尝试逐个图像地量化相似度。在浏览完整个列表之后,我应该有最好的匹配。

匹配后,我了解到我得到了特征向量之间最近发现距离的列表。我找到了最小距离,使用它我可以计算“好匹配”,甚至可以得到相应点的列表:

我展示代码的简单部分只是为了让这更容易理解,我知道其中一些不需要在这里。

继续,我希望像这样简单地计算好匹配的数量就足够了,但结果主要只是将我指向具有最多描述符的图像。在此之后我尝试的是计算单应性。目的是计算它并查看它是否是有效的同态。希望是一个好的匹配,并且只有一个好的匹配,会有一个好的转换的单应性。创建单应性只需在obj场景上使用cv::findHomography 即可,它们是std::vector< cv::Point2f>。我使用我在网上找到的一些代码检查了单应性的有效性:

我不明白这背后的数学,所以在测试时,我有时用简单的检查单应性的行列式是否为正来替换这个函数。问题是我一直在这里遇到问题。单应性要么都是坏的,要么是不应该的(当我只检查行列式时)。

我想我应该实际使用单应性,并且对于一些点,只需使用它们在源图像中的位置来计算它们在目标图像中的位置。然后我会比较这些平均距离,理想情况下,在正确图像的情况下,我会得到一个非常明显更小的平均距离。这根本不起作用。所有的距离都是巨大的。我想我可能已经反过来使用单应性来计算正确的位置,但是相互切换obj场景会得到类似的结果。

我尝试过的其他事情是 SURF 描述符而不是 SIFT,BFMatcher(蛮力)而不是 FLANN,根据最小距离为每个图像获取n 个最小距离而不是一个数字,或者根据全局最大距离获取距离。这些方法都没有给我明确的好结果,我现在感觉卡住了。

我唯一的下一个策略是锐化图像,甚至使用一些局部阈值或一些用于分割的算法将它们变成二值图像。我正在寻找任何人都可以在我的工作中看到的任何建议或错误。

我不知道这是否相关,但我添加了一些我正在测试的图像。很多时候,在测试图像中,大多数 SIFT 向量来自帧(对比度更高)而不是绘画。这就是为什么我认为锐化图像可能会起作用,但我不想更深入,以防我以前做的事情是错误的。

图像库在这里,标题中有描述。图像分辨率很高,请查看以防提供一些提示。

0 投票
0 回答
1792 浏览

opencv - OpenCV Flann 索引保存和加载不起作用

我正在尝试这个简单的测试来检查我是否可以将预填充的索引存储到文件中并在以后加载它们。保存和加载的垫子是不同的。此外,knnSearch 在匹配过程中会引发段错误。我仅在使用 LSHIndexParams(用于二进制功能)时才看到此问题。

before_index_save:

after_index_save:

0 投票
2 回答
5168 浏览

c++ - 如何从 OPENCV 中的 FLANNBASED Matcher 中删除错误匹配?

[请您在将问题标记为重复或否决之前阅读问题详细信息。我已经彻底搜索,找不到解决方案,因此在这里发布问题。]

我正在尝试将一张图像与多张图像进行比较,并获取所有匹配图像的列表。我不想在图像之间绘制关键点。

我的解决方案基于以下源代码:

https://github.com/Itseez/opencv/blob/master/samples/cpp/matching_to_many_images.cpp

以上源码将一张图片与多张图片进行匹配,得到最佳匹配图片。

我修改了上面的示例并生成:

现在我的问题是如何应用最近邻搜索比率来获得多个图像的良好匹配?

编辑1:

我的实现如下:

  1. 对于数据集中的每个图像,计算 SURF 描述符。

  2. 将所有描述符组合成一个大矩阵。

  3. 从级联矩阵构建 FLANN 索引。

  4. 计算查询图像的描述符。

  5. 在 FLANN 索引上运行 KNN 搜索以找到前 20 个或更少的最佳匹配图像。K 设置为 20。

  6. 过滤掉上一步计算的所有不充分匹配。(如何??)

我已成功完成第 1 到第 5 步。我在第 6 步中遇到问题,其中我无法删除错误匹配。

0 投票
0 回答
1338 浏览

python - 当传递“kmeans”参数时,pyflann 返回 ubuntu 上最近邻居的负索引

目标

我试图得到:

  1. 近似最近邻库 FLANN,以及
  2. python绑定pyflann

在运行 Ubuntu 的 AWS ec2 实例上正常工作。我的目标是将 FLANN 与其他 ANN 实现进行比较,例如 ANNOY 和 scikit-learn ANN 实现,看看哪一个最适合我工作的公司。我们正在处理数百万个尺寸约为 500 的向量。

出于这个原因,让 FLANN 本身工作对我来说很重要,而不是接受关于替代 ANN 实施的建议。我知道 Radim Rehurek 的不错博文,但是我们有一个具体的数据集,我们想在其上检查各种 ANN 算法的性能,所以他的博客并没有消除我们自己进行基准测试的需要数据。

问题

我已经成功安装了 flann 和 pyflann 的版本,但是当被要求使用“kmeans”参数创建 ANN 索引时,pyflann 返回无意义的结果。例如,考虑以下 python 代码及其输出:

由于该行:

正在为“testset”中的十个 100 维向量中的每一个请求五个邻居,输出的数组具有正确的维度:十行对应于“testset”中的十个向量,每行的长度为 5,反映了事实我问了五个邻居。但是,条目的值不可能是正确的,因为有些是负数,而且许多超出了 0 到 999 的范围,即可能最近邻居的索引范围。为了比较,这是我的终端的输出,使用与上面几乎相同的代码,仅将“kmeans”更改为“kdtree”:

这一次,所有条目都是 0 到 999 之间的非负整数,正如预期的那样。当然,数据是随机生成的,因此结果会有所不同,但是使用“kmeans”参数会产生始终如一的愚蠢结果,而“kdtree”会产生始终合理的结果。

软件和操作系统详细信息

(0) Ubuntu 发行版:

Ubuntu 14.04 LTS

(1) libflann-dev:

打字:

sudo aptitude show libflann-dev

产生:

(2)打字:

sudo aptitude show python

产生:

安装方法

我首先尝试使用以下命令安装 FLANN:

安装 pyflann 后:

我输入:

并收到错误消息:

然后,在一个新的 ec2 实例上,我输入:

跑了

毫无怨言。但是,我有上面描述的“kmeans”问题。

笔记

我已经成功地在我的 MacBookPro 上安装了 FLANN 和 pyflann,并且一切正常——即使使用“kmeans”作为最近邻查询参数也会产生合理的结果。