Просеять извлечение - opencv
Я пытаюсь начать работу с извлечением функции просеивания с помощью (C++) OpenCv. Мне нужно извлечь объекты с помощью SIFT, сопоставить их между исходным изображением (например, книгой) и сценой, и после этого рассчитать позу камеры.
До сих пор я нашел этот алгоритм с использованием SURF. Кто-нибудь знает базовый код, с которого я могу начать, или, может быть, способ конвертировать алгоритм по ссылке из SURF в SIFT?
Заранее спасибо.
РЕДАКТИРОВАТЬ: Хорошо, я разработал решение проблемы просеивания. Сейчас я пытаюсь изобразить позу камеры. Я пытаюсь использовать: solvePnP, кто-нибудь может мне помочь с примером?
3 ответа
Ознакомьтесь с разделом учебника feature2d на новом веб-сайте документации OpenCV. Там учебники с кодом, показывающим:
- Обнаружение функций, например, SURF
- Описание функции
- Соответствие функций
Если вам удалось найти совпадения между изображением и сценой, то я предлагаю вам применить cv::findHomography(). Он рассчитает матрицу гомографии, используя 4 совпадения в качестве входных данных.
Вы можете конвертировать в позу камеры непосредственно из матрицы гомографии.
Для использования SIFT вместо SURF я изменил SurfFeatureDetector
в SiftFeatureDetector
а также SurfDescriptorExtractor
в SiftDescriptorExtractor
, Для некоторых изображений я обнаружил, что дескриптор SURF-комбинации <-> SIFT дает относительно точные результаты, но вам следует поэкспериментировать с другими комбинациями (детектор FAST - дескриптор FREAK или ORB-детектор - дескриптор BRISK), в зависимости от ваших требований.
Пожалуйста, следуйте этому руководству для решения гомографической части вашего вопроса: подбор соответствия и гомография
Также, может быть, это поможет: оценка позы