计算机视觉-如何使用基于flann的matcher,或者在opencv中使用flann



http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_matchers.html#flannbasedmatcher

请有人给我看一下示例代码,或者告诉我如何使用这个类和方法。我只想通过应用Flann将查询图像中的SURF与具有图像集的SURF相匹配。我在样本中看到了许多图像匹配代码,但我仍然无法确定一个图像与其他图像的相似程度。任何帮助都将不胜感激。

以下是未经测试的样本代码

using namespace std;
using namespace cv;
Mat query; //the query image
vector<Mat> images;   //set of images in your db
/* ... get the images from somewhere   ... */
vector<vector<KeyPoint> > dbKeypoints;
vector<Mat> dbDescriptors;
vector<KeyPoint> queryKeypoints;
Mat queryDescriptors;
/* ... Extract the descriptors ... */
FlannBasedMatcher flannmatcher;
//train with descriptors from your db
 flannmatcher.add(dbDescriptors);
 flannmatcher.train();
vector<DMatch > matches;
flannmatcher.match(queryDescriptors, matches);
/* for kk=0 to matches.size()
       the best match for queryKeypoints[matches[kk].queryIdx].pt 
       is dbKeypoints[matches[kk].imgIdx][matches[kk].trainIdx].pt
 */

查找与查询图像最"相似"的图像取决于您的应用程序。也许匹配的关键点的数量是足够的。或者你可能需要一个更复杂的相似性度量。

为了减少误报的数量,可以通过计算第一个最近邻居和第二个最近邻居的距离比率来比较它们。distance(query,mostnearestneighbor(/distance(query、secondnearestneighbor(<T、 该比率越小,第二近邻到查询描述符的距离就越高。因此,这是一个具有高度独特性的翻译。用于许多设想配准的计算机视觉论文。

相关内容

  • 没有找到相关文章

最新更新