Подтвердить что ты не робот

Реализация натурального маркера дополненной реальности

После обнаружения возможности OpenCV я решил использовать эту библиотеку для разработки механизма отслеживания естественных движений, над которым я сейчас работаю. Но моя проблема заключается в том, что я понятия не имею о правильном подходе к реализации такого трекера.

Я разработал следующий план:

  • Используйте один из алгоритмов отслеживания объектов (например, SIFT, SURF и т.д.), чтобы описывать и извлекать ключевые точки из живого сообщения камеры.
  • Основываясь на извлеченных ключевых точках, преобразуйте их в гистограмму и сравните гистограмму с гистограммами сохраненных маркеров.
  • Как только совпадение найдено, преобразуйте эту информацию о местоположении и передайте ее движку, ответственному за рендеринг 3D-объектов.

Я попробовал алгоритм SIFT и SURF при описании и извлечении ключевых точек, и конечный результат был супер низким fps для обоих алгоритмов (т.е. меньше 0 fps). Я заметил, что SIFT и SURF довольно дорогостоящие вычислительные средства и подходят ли они для такого отслеживания на канале живой камеры?

Спасибо.

4b9b3361

Ответ 1

Разработка таких маркеров требует глубокого знания обработки изображений, 3D-изображений, отслеживания и т.д. Не похоже на разработку простого приложения.

Лучше использовать разработанные;)

FERNS намного эффективнее и проще, чем SIFT. Вы можете использовать его. Он был разработан исследованиями EPFL. Если вы прочтете документы AR/Tracking, вы увидите, что эти ребята являются лидерами отрасли/отрасли. Он также реализован в более поздних версиях OpenCV (я думаю, в версии 2.1 или 2.2?)

В противном случае вы всегда можете получить исходный код для этого алгоритма: Папоротники: обнаружение планарных объектов

EDIT:

В основном такие алгоритмы, как FERNS, укажут вам положение/поворот и т.д. (это изменения представлены матрицей, называемой "Гомография" ), определенная поверхность будет относиться к другому кадру. Эта Гомография - это все, что вам нужно для 3D-рендеринга;)

Используя OpenGL или аналогичные 3D-библиотеки, вы рисуете объект, используя рассчитанную гомографию. Если вы повторите этот процесс для каждого кадра, у вас будет простое приложение AR.

Теория Книги: Обработка изображений и 3D-изображение

Для понимания AR читайте: Статья ARToolKit

Подробнее о FERNS: oezuysal'site

Ответ 2

SIFT - хороший алгоритм, но вы не можете получить наилучшее из него. Существуют методы, которые используют FAST для обнаружения, а затем создают уменьшенный дескриптор SIFT обнаруженных точек (вместо 128 значений, которые они используют, например, 32). Также были разработаны пирамидальные подходы для FAST (у вас есть ORB, но его дескрипторы недостаточно хороши).

Теперь OpenCV только что выпустил FREAK, и они обещают, что это самый быстрый и надежный, поэтому я постараюсь скоро. Вы можете взглянуть на этот учебник для расширенной реальности на OpenCV.

Ответ 3

SIFT и SURF являются успешными визуальными функциями и, вероятно, являются правильным подходом (хотя функции, которые быстрее вычисляются, существуют).
SIFT можно эффективно вычислить на GPU. См. siftGPU.