Pull to refresh

Оригами и расширенная реальность (продолжение 2)

Algorithms *
Ранее мы рассматривали эти вопросы использования расширенной реальности для создания оригами:
Эта статья посвящена техническим деталям применения баркодов для генерации подсказок в расширенной реальности.

Задача


Пусть у нас есть виртуальная модель оригами, реальный лист бумаги и web-камера. На изображении листа, полученном с камеры, программа должна дорисовать подсказку по текущему шагу складывания модели, например, стрелочку от одного угла листа к другому.

Для создания модели, нужен некто кто изначально сложит оригами с помощью компьютера, подробнее можно прочитать тут: все компоненты.

Ограничения


Проблема заключается в том, чтобы правильно определить, где находятся наши объекты на листе. Лист может быть произвольным образом ориентирован и иметь произвольную форму на некотором шаге. Все детали сложенного одноцветного листа обычной web-камере «разглядеть» практически невозможно. Использование же цветного принтера для маркировки областей листа доступно далеко не всем.

Внешний вид решения


image

На определенные участки листа помещаются баркоды. Программа находит их, легко идентифицирует, определяет по ним ориентацию листа и необходимое смещение до объектов, входящих в состав подсказки. Как же мы будем располагать баркоды на листе? Необходимо учесть следующие факторы:
  • баркод не должен лежать на линиях складок, так как он может замяться и повредиться;
  • баркод должен быть виден на всех шагах складывания модели, на которых он используется для отображения подсказки;
  • баркод должен быть расположен на достаточно большом расстоянии от объектов подсказки, так как пользователь, скорее всего, возьмется за них руками для выполнения складки и закроет его;
  • в то же время, баркод не должен быть слишком далеко, чтобы погрешности определения ориентации не сильно влияли на полученные после сдвига точки;
  • баркод не должен быть слишком большим или слишком маленьким;
  • чем их будет меньше, тем лучше, краска денег стоит.

Для выполнения первого пункта достаточно воспользоваться такой полезной информацией, полученной из модели, как триангуляция области. Поскольку складки могут проходить только по границам треугольников, достаточно хранить баркоды внутри них, причем желательно с некоторым отступом от края. В треугольник мы всегда можем вписать окружность, легко узнать ее центр и радиус, и расположить баркод внутри нее.

Размеры треугольников, входящих в разбиение области накладывают ограничение на максимальный размер баркода. Разумеется, он не должен занимать пол-листа, но в то же время должен быть виден камере. Для выполнения второго требования нам также понадобится информация о видимости треугольников на каждом шаге. К счастью, она также содержится в модели.

Для последнего пункта также необходим частотный словарь появления треугольников в зоне видимости. Логично разместить баркоды в наиболее часто встречающихся треугольниках и повторно использовать, тогда их число резко уменьшится.

Дадим на каждом шаге каждому треугольнику оценку, соответствующую нашим требованиям, и выберем тот, который получил лучшую. Каждый критерий имеет регулируемую степень влияния (вес), так что систему можно оптимальным образом настроить.

Также имеется возможность выбора печати с одной или с двух сторон листа, от этого зависит то, сможем ли мы видеть подсказку с любой стороны, или только с определенной. В баркодах кодируются их уникальные идентификаторы, и они используются как ключ для поиска информации о подсказке (тип действия, смещения до объектов, и так далее). Несмотря на все принятые меры предосторожности, баркод все равно может быть в некоторой степени испорчен, поэтому используется кодирование Рида-Соломона, позволяющее восстанавливать исходные данные при частичном повреждении.

Про метки и ориентацию в пространстве (на наш взгляд, наиболее занимательная деталь) мы расскажем в следующей статье.
Tags:
Hubs:
Total votes 8: ↑7 and ↓1 +6
Views 846
Comments Leave a comment