Как я могу извлечь БЫСТРЫЕ функции из изображения?

Я хочу извлечь БЫСТРЫЕ функции, основанные на Features2D + Homography, чтобы найти известный объект

  SurfFeatureDetector detector( minHessian );

  std::vector<KeyPoint> keypoints_object, keypoints_scene;

  detector.detect( img_object, keypoints_object );
  detector.detect( img_scene, keypoints_scene );

  //-- Step 2: Calculate descriptors (feature vectors)
  SurfDescriptorExtractor extractor;

Классы SurfFeatureDetector и FastFeatureDetector наследуются от Detector и могут быть заменены. Но я не смог найти подходящий класс для SurfDescriptorExtractor. Я ожидал найти что-то вроде FastDescriptorExtractor, но такой класс не доступен. То, что кажется странным, это то, что, если я только изменю Детектор на FastFeatureDetector, пример будет работать правильно.

Мой вопрос: как должна выглядеть приведенная выше последовательность для быстрых функций?

1 ответ

Решение

Насколько мне известно, в OpenCV нет экстрактора функций FAST. В отличие от SURF, который можно использовать как для обнаружения признаков, так и для вычисления векторов объектов, FAST в основном используется для обнаружения характерных точек. После получения характерных точек, вам нужно использовать какой-то другой экстрактор функций, чтобы сгенерировать векторы объектов и выполнить сопоставление. В качестве альтернативы, если вас беспокоит скорость, в OpenCV 2.3 введена функция ORB, которая фактически использует многомасштабное FAST (плюс некоторые измерения угла Харриса) в качестве детектора. Использование похоже на SURF:

OrbFeatureDetector detector(n_features);

OrbDescriptorExtractor extractor(patch_size);

Вам нужно будет изменить сопоставление в примере на некоторое сопоставление на основе расстояния Хэмминга. Надеюсь это поможет.

Другие вопросы по тегам