gpt4 book ai didi

C++/OpenCV - 使用 flann::index 后如何获取我的图像? (与 BoF)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:52 25 4
gpt4 key购买 nike

我将 BoW 与 SURF 和 FlannBasedMatcher 一起用于数据库内的图像检索。我使用 SURF 提取了数据库(训练)的所有特征,然后构建了词汇表,最后得到了数据库(训练)中每张图片的 BOF 频率直方图。

需要说明的是,我没有提供所有此过程的详细信息,但如果您需要一些详细信息,请告诉我。

所以在这一步我有:

  • cv::Mat allDescriptors --> 我所有数据库的描述符(训练)

  • cv::Mat Vocabulary --> codebook representation

  • cv::Mat responseDatabase --> 我数据库中每张图片的频率直方图

然后我使用查询并根据之前计算的词汇表计算其响应。最后我有这个数据:

  • cv::Mat responseQuery --> 我的查询的频率直方图

现在我遇到了一些困难。我用过

 cv::flann::Index flannIndex(responseDatabase, cv::flann::KDTreeIndexParams(), cvflann::FLANN_DIST_EUCLIDEAN);
cv::Mat results, dists;
int k=2;
flannIndex.knnSearch(responseQuery, results, dists, k, cv::flann::SearchParams() );

效果很好,我得到了这个结果:

  • cv::Mat 结果 --> [38, 117]-
  • cv::Mat dist --> [0.0010655867, 0.013091294]

但是现在有了这些结果,我怎样才能恢复与我的 2 个最近邻居相对应的两张图片?事实上,我的每个数据中都没有任何图片痕迹。

也许,我错过了一步,但哪一步呢?

感谢

最佳答案

我解决了,但我不知道这是不是最好的方法。

像这样计算每张图像后:

bowide.compute(img,keypoints,responseHist);

我将图片保存在一个大 vector 中,因此,我可以加载它们进行匹配。

  vectorImg.push_back(img);

问题是,我必须将每张图片的名称保存在一个txt文件中,然后在匹配时读取txt文件。 (为了加载它们)事实上,数据库中每个图像的 BoWFeature 计算只完成一次,我不想每次都运行相同的过程,我想将查询与数据库进行比较。因此,一旦我的数据库经过训练,我只能进行匹配,因为我在一个 txt 文件中有我所有的图片和索引。

关于C++/OpenCV - 使用 flann::index 后如何获取我的图像? (与 BoF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25379852/

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