Bruteforcematcher с экстрактором FREAK дает ноль совпадений

Привет, ребята, надеюсь, у вас все хорошо. Я реализую систему, которая может обнаружить объект из данного кадра изображения в OpenCV 2.4.8. В настоящее время я имею дело с алгоритмом FREAK, потому что он бесплатный. Как уже упоминалось в руководствах и документах opencv, я создал объекты fastfeaturedetector и класса FREAK.

FastFeatureDetector detector(30);
FREAK extractor;

отсюда код больше всего похож на пример opencv http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html вместо FLANN я использовал Bruteforce

BruteForceMatcher<Hamming> matcher;

как для объекта, так и для кадра в реальном времени я нахожу ключевые точки и дескрипторы

detector.detect(frame,keypoints_frame);
descriptors_frame.convertTo(descriptors_frame,CV_32F);
extractor.compute(frame, keypoints_frame, descriptors_frame);

Затем я сопоставляю дескрипторы, используя "match"-

matcher.match( descriptors_object, descriptors_frame, matches);

Когда я проверяю размер совпадений (который определяется как совпадения std::vector;), это НОЛЬ для кадра изображения, в котором есть объект (объект, который должен быть обнаружен). Поэтому я не могу выполнить findhomography.(Но код работает до поиска совпадений) Но когда я запускаю drawmatches, он рисует точки на обнаруженном объекте в данном кадре. Когда я запускаю тот же алгоритм с серфом, BRISK дает размер совпадения>0, и тогда я могу выполнить поиск гомографии и продолжить.

Подскажите, пожалуйста, почему я получаю ноль матчей за FREAK? Что я могу сделать, чтобы избежать этого и выполнить поиск гомографии? Код хорошо работает с серфом и BRISK (но они тоже дают ложные результаты, но я могу с ними справиться) Заранее спасибо!!

Примечание:- Я думаю, мой вопрос вам понятнее. Пожалуйста, дайте мне знать, и я буду редактировать, как вы хотите.

0 ответов

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