繁体   English   中英

具有汉明距离的物体检测

[英]Object Detection with Hamming distance

我使用FAST和FREAK来获取几个图像的描述符,然后使用带有BruteForceMatcher匹配器knnMatch ,接下来我使用循环来分隔良好的匹配:

  float nndrRatio = 0.7f;
  std::vector<KeyPoint> keypointsA, keypointsB;
  Mat descriptorsA, descriptorsB;
  std::vector< vector< DMatch >  > matches; 

  int threshold=9;
       // detect keypoints:
  FAST(objectMat,keypointsA,threshold,true);
  FAST(sceneMat,keypointsB,threshold,true);

  FREAK extractor;
       // extract descriptors:
  extractor.compute( objectMat, keypointsA, descriptorsA );
  extractor.compute( sceneMat, keypointsB, descriptorsB );

  BruteForceMatcher<Hamming> matcher;
       // match
  matcher.knnMatch(descriptorsA, descriptorsB, matches, 2);


       // good matches search: 
  vector< DMatch > good_matches;

  for (size_t i = 0; i < matches.size(); ++i)
  { 
        if (matches[i].size() < 2)      
              continue;

        const DMatch &m1 = matches[i][0];   
        const DMatch &m2 = matches[i][1];

        if(m1.distance <= nndrRatio * m2.distance)        
        good_matches.push_back(m1);   
  }

       //If there are at least 7 good matches, then object has been found
  if ( (good_matches.size() >=7))
  { 
  cout << "OBJECT FOUND!" << endl;
  }

我认为问题可能是好的匹配搜索方法,因为将其与FlannBasedMatcher配合使用可以很好地工作,但与BruteForceMatcher配合使用则非常奇怪。 我怀疑我可能在用这种方法胡说八道,因为汉明距离使用二进制描述符,但是我想不出一种方法来适应它!

有任何链接,摘要,想法...吗?

您的代码还不错,但是我认为这不是您想要的。 为什么选择这种方法?

如果要使用OpenCV检测图像中的对象,则应尝试级联分类 此链接将说明如何训练分类器。

编辑:如果您认为它太复杂并且要检测的对象是平面的,则可以尝试本教程 (它基本上是通过尝试在对象和图像之间寻找单应性变换来计算像素值)。 但是级联分类对于对象检测更为通用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM