为什么带有冲浪关键点和密集冲浪关键点的knnmatcher大小始终为零?

时间:2019-05-15 18:34:30

标签: matching surf descriptor flann

无论是否使用DENSE冲浪技术,我都已检测并提取了SURF关键点及其描述符。但是每次我使用基于FLANN的KNNmatcher进行匹配时,我的匹配数始终为零。

例如,我在两个图像中都有24000个具有密集冲浪的关键点,它们在视觉上是相同的图像,但是匹配数仍然为零。

这是我的代码。我正在研究ROS。所以我的代码与ROS有关。 First_descriptors_object的计算方法与descripter_object相同。

      int step = 2; // 2 pixels spacing between kp's
      for (int y=step; y<detectPerson.rows-step; y+=step){
          for (int x=step; x<detectPerson.cols-step; x+=step){

              // x,y,radius
              keypoints_object.push_back(KeyPoint(float(x), float(y), float(step)));
          }
      }

      extractor->compute(detectPerson, keypoints_object, descriptors_object);

// *****************图像匹配************************** **********

      Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::FLANNBASED);
      // FlannBasedMatcher matcher(new cv::flann::KDTreeIndexParams(5));
      std::vector< std::vector<DMatch> > knn_matches;
      matcher->knnMatch(First_descriptors_object, descriptors_object, knn_matches, 2 );
  //-- Filter matches using the Lowe's ratio test
      const float ratio_thresh = 0.7f;
      std::vector<DMatch> good_matches;
      std::vector<DMatch> bad_matches;
      ROS_INFO("KNN matches length %zu",knn_matches.size());
      for (size_t i = 0; i < knn_matches.size(); i++)
      {
        if (knn_matches[i][0].distance < ratio_thresh * knn_matches[i][1].distance){
            good_matches.push_back(knn_matches[i][0]);
            match =  good_matches.size() ;
        }
        else{
          bad_matches.push_back(knn_matches[i][0]);
          mismatch = bad_matches.size();
        }
      }

0 个答案:

没有答案