Как я могу извлечь БЫСТРЫЕ функции из изображения?
Я хочу извлечь БЫСТРЫЕ функции, основанные на 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);
Вам нужно будет изменить сопоставление в примере на некоторое сопоставление на основе расстояния Хэмминга. Надеюсь это поможет.