Просеять извлечение - opencv

Я пытаюсь начать работу с извлечением функции просеивания с помощью (C++) OpenCv. Мне нужно извлечь объекты с помощью SIFT, сопоставить их между исходным изображением (например, книгой) и сценой, и после этого рассчитать позу камеры.

До сих пор я нашел этот алгоритм с использованием SURF. Кто-нибудь знает базовый код, с которого я могу начать, или, может быть, способ конвертировать алгоритм по ссылке из SURF в SIFT?

Заранее спасибо.

РЕДАКТИРОВАТЬ: Хорошо, я разработал решение проблемы просеивания. Сейчас я пытаюсь изобразить позу камеры. Я пытаюсь использовать: solvePnP, кто-нибудь может мне помочь с примером?

3 ответа

Решение

Ознакомьтесь с разделом учебника feature2d на новом веб-сайте документации OpenCV. Там учебники с кодом, показывающим:

  1. Обнаружение функций, например, SURF
  2. Описание функции
  3. Соответствие функций

Если вам удалось найти совпадения между изображением и сценой, то я предлагаю вам применить cv::findHomography(). Он рассчитает матрицу гомографии, используя 4 совпадения в качестве входных данных.

Вы можете конвертировать в позу камеры непосредственно из матрицы гомографии.

Для использования SIFT вместо SURF я изменил SurfFeatureDetector в SiftFeatureDetector а также SurfDescriptorExtractor в SiftDescriptorExtractor, Для некоторых изображений я обнаружил, что дескриптор SURF-комбинации <-> SIFT дает относительно точные результаты, но вам следует поэкспериментировать с другими комбинациями (детектор FAST - дескриптор FREAK или ORB-детектор - дескриптор BRISK), в зависимости от ваших требований.

Пожалуйста, следуйте этому руководству для решения гомографической части вашего вопроса: подбор соответствия и гомография

Также, может быть, это поможет: оценка позы

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