0

我在一组图像的 yml 文件中有一个词汇表(簇的质心)。现在我已经从一个图像中获取了一个新的 SURF 描述符。现在我想检查这个新的关键点描述符到词汇表有多远或接近一些阈值,并保存好匹配和坏匹配。一旦我有好的和坏的描述,我如何在图像上将它们标记为关键点。我对 opencv 很陌生。我已经通过 knnMatch 但它只能通过指定 k.could 给出好的匹配有人通过建议或示例代码帮助我。

这是我的示例代码

  Mat dictionary;
  FileStorage fs("../bin/dictionary1.yml", FileStorage::READ);
  fs["vocabulary"] >> dictionary;
  fs.release();

  std::vector<KeyPoint> keypoints_1;
  detector.detect( img_1, keypoints_1 );
  SurfDescriptorExtractor surfDesc;
  Mat descriptors1;
  surfDesc.compute(img_1, keypoints_1, descriptors1);

我想做这样的事情

for all image descriptor
 for all vacabulary
   if(dist is less)
     goodmatch
     cvcolor=blue
   else 
     badmatch
     cvcolor=red
4

1 回答 1

1

您可以使用欧几里得距离 d=sqrt(a1^2+a2^2+...an^2),但在这种情况下,最好使用马氏距离,因为它考虑了分布参数(协方差)。但是您需要计算每个集群的协方差,这可以在训练阶段得到。您有聚类中心,每个聚类都有点,足以进行协方差评估。

于 2013-08-30T12:12:22.737 回答