Обнаружение и отслеживание функций на 2D изображениях для отображения содержимого AR

Я разрабатываю приложение для Android, в котором я хочу отслеживать 2D-изображение / лист бумаги, анализировать, что пользователь пишет / рисует на нем, и правильно отображать на нем различное 3D-содержимое.

Я работаю над отслеживанием и отображением простой части 3D-контента, чего на самом деле можно добиться с помощью таких SDK, как Vuforia и Wikitude. Однако я не использую их по нескольким причинам.

  • Есть другой анализ изображения, например, анализ чертежей.
  • Изображение может быть не таким насыщенным, например, бумага с линиями или некоторые рисунки.
  • SDK, такие как Vuforia, могут не предоставлять разработчикам некоторые базовые функции, такие как обнаружение функций и т. Д.

Во всяком случае, сейчас я хочу только добиться следующего результата.

  1. У меня есть лист бумаги, возможно, с линиями и цифрами. Вы можете думать об этом как о типе бумаги для детей, чтобы практиковать написание или рисование. Пример: https://i.pinimg.com/236x/89/3a/80/893a80336adab4120ff197010cd7f6a1--dr-seuss-crafts-notebook-paper.jpg
  2. Я указываю свой телефон (камеру) на бумагу во время захвата видеокадров.
  3. Я хочу зарегистрировать бумагу, отследить ее и показать на ней простой каркасный куб.

Я возился с OpenCV и попробовал следующие подходы.

Используя гомографию:

  1. Обнаружение особенностей в 2D-изображении (ORB, FAST и т. Д.).
  2. Опишите особенности (ORB).
  3. Сделайте то же самое в каждом видеокадре.
  4. Подходим функции и найти хорошие совпадения.
  5. Найдите гомографию, используйте гомографию и успешно нарисуйте прямоугольник вокруг изображения в видеокадре.
  6. Не знал, как использовать декомпозицию гомографии (на повороты, переводы и нормали) для отображения трехмерного объекта, такого как куб.

Использование solvePnP:

С 1 по 4 такие же, как указано выше.

  1. Преобразуйте все точки точного совпадения 2D в изображении в 3D, предполагая, что изображение лежит на плоскости xy мира, таким образом, все имеют z = 0.
  2. Используйте solvePnP с этими 3D-точками и 2D-точками в текущем кадре, чтобы извлечь векторы вращения и перемещения, а затем преобразовать их в матрицу проекции, используя Rodrigues() в OpenCV.
  3. Построить трехмерные точки куба.
  4. Спроецируйте их в 2D-изображение, используя проекцию и матрицу камеры.
  5. Проблема в том, что куб прыгает вокруг, что, как я полагаю, связано с нестабильностью и точностью определения и отображения функций, что влияет на solvePnP.

Используя контуры или углы:

Я просто делю шкалу серого в кадре, сглаживаю ее по Гауссу, расширяю или размываю и пытаюсь найти самый большой 4-краевой контур, чтобы можно было отслеживать его с помощью solvePnP и т. Д. Это, что неудивительно, не дает хороших результатов, или я Я просто делаю это неправильно.

Итак, мои вопросы:

  • Как я могу решить две смелые проблемы, упомянутые выше.
  • В более общем смысле, учитывая тип цели изображения, которую я хочу отслеживать, каков будет оптимальный алгоритм / решение / техника для ее отслеживания?
  • Что я могу улучшить / изменить в своем способе решения проблемы?

Большое спасибо.

0 ответов

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