我使用带有 SURF 和 FlannBasedMatcher 的 BoW 在数据库中检索图像。我使用 SURF 提取了我的数据库(训练)的所有特征,然后我建立了词汇表,最后我得到了数据库中每张图片的 BOF 频率直方图(训练)。
需要明确的是,我没有列出所有这些过程的细节,但如果您需要一些细节,请告诉我。
所以在这一步我有:
cv::Mat allDescriptors --> 我所有数据库的描述符(训练)
cv::Mat Vocabulary --> 码本表示
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 个最近邻居的两张图片?事实上,我的每个数据中的图片都没有任何痕迹。
也许,我错过了一步,但哪一步?
感谢