Почему размер knnmatcher всегда равен нулю для ключевых точек серфинга, а также для точек Dense Surf? - PullRequest
0 голосов
/ 15 мая 2019

Я обнаружил и извлек ключевые точки SURF и их дескрипторы с техникой серфинга DENSE и без нее.Но каждый раз, когда я выполняю сопоставление, используя основанный на 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);

// ***************** Image Matching ************************************

      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();
        }
      }
...