Как работает алгоритм дополненной реальности на основе маркеров (например, ARToolkit)? - PullRequest
9 голосов
/ 10 февраля 2010

Для своей работы я использую Java-версию ARToolkit (NyARTookit). Пока что это оказалось достаточно хорошо для наших нужд, но мой начальник начинает хотеть, чтобы платформа была перенесена на другие платформы, такие как веб (Flash и т. Д.) И мобильные телефоны. Хотя я полагаю, что могу использовать другие порты, меня все больше раздражает то, что я не знаю, как работает комплект, и из-за некоторых ограничений. Позже мне также понадобится расширить возможности набора для добавления таких вещей, как взаимодействие (виртуальные кнопки на карточках и т. Д.), Которые, насколько я видел в NyARToolkit, не поддерживаются.

Так что в основном мне нужно заменить ARToolkit на собственный детектор меток (а в случае с NyARToolkit попытаться избавиться от JMF и использовать лучшее решение через JNI). Однако я не знаю, как работают эти детекторы. Я знаю о трехмерной графике, и я построил вокруг нее хорошую среду, но мне нужно знать, как создать основную технологию: -).

Кто-нибудь знает источники о том, как реализовать приложение дополненной реальности на основе маркеров с нуля? При поиске в Google я нахожу только «приложения» AR, а не базовые алгоритмы: - /.

1 Ответ

10 голосов
/ 11 февраля 2010

«С нуля» - относительный термин. Действительно, делать это с нуля, без использования какого-либо ранее существовавшего кода зрения, было бы очень больно, и вы не справились бы с этим лучше, чем все сообщество компьютерного зрения.

Однако, если вы хотите сделать AR с существующим кодом зрения, это более разумно. Основные подзадачи:

  1. Найдите маркеры на вашем изображении или видео.
  2. Убедитесь, что это именно те, которые вам нужны.
  3. Выясните, как они ориентированы относительно камеры.

Первая задача - локализация ключевых точек. Методы для этого включают обнаружение ключевой точки SIFT, детектор угла Harris и другие. Некоторые из них имеют реализацию с открытым исходным кодом - я думаю, что OpenCV имеет детектор угла Харриса в функции GoodFeaturesToTrack.

Вторая задача - создание дескрипторов регионов. Методы для этого включают дескрипторы SIFT, дескрипторы HOG и многие другие. Где-то должна быть реализация одного из них с открытым исходным кодом.

Третье задание также выполняется локализаторами ключевых точек. В идеале вы хотите аффинное преобразование, так как это расскажет вам, как маркер сидит в 3-пространстве. Аффинный детектор Харриса должен работать для этого. Более подробную информацию можно получить здесь: http://en.wikipedia.org/wiki/Harris_affine_region_detector

...