Точное измерение относительного расстояния между наборами опорных точек (приложение дополненной реальности)

StackOverflow https://stackoverflow.com/questions/8379902

Вопрос

Допустим, у меня есть набор из 5 маркеров.Я пытаюсь найти относительные расстояния между каждым маркером, используя фреймворк дополненной реальности, такой как Набор инструментов.В ленте моей камеры первые 20 кадров показывают мне только первые 2 маркера, чтобы я мог проработать преобразование между этими двумя маркерами.Вторые 20 кадров показывают мне только 2-й и 3-й маркеры и так далее.Последние 20 кадров показывают мне 5-й и 1-й маркеры.Я хочу создать 3D-карту расположения маркеров всех 5 маркеров.

Мой вопрос в том, зная, что будут неточности с расстояниями из-за низкого качества видеопотока, как мне минимизировать неточности, учитывая всю собранную мной информацию?

Мой наивный подход состоял бы в том, чтобы использовать первый маркер в качестве базовой точки, из первых 20 кадров взять среднее значение преобразований и поместить 2-й маркер и так далее для 3-го и 4-го.Что касается 5-го маркера, поместите его между 4-м и 1-м, поместив его в середину среднего значения преобразований между 5-м и 1-м и 4-м и 5-м.Этот подход, на мой взгляд, имеет уклон в сторону первого размещения маркера, хотя и не учитывает, что камера видит более 2 маркеров на кадр.

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

Мы были бы весьма признательны за любую помощь относительно правильного подхода к этой проблеме.

Редактировать:Дополнительная информация о проблеме:

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

enter image description here

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

Значения, которые я получаю, имеют некоторую ошибку (предполагается, что они следуют гауссовскому распределению относительно фактического значения).Например, одно из показаний, полученных для маркера 1-2, может быть x:9.8 y:0.09.Учитывая, что у меня есть все эти показания, как я могу оценить карту?В идеале результат должен быть как можно ближе к реальным значениям.

Мой наивный подход имеет следующую проблему.Если среднее значение преобразований от 1 до 2 немного отклонено, размещение 3 может быть отклонено, даже если показания от 2 до 3 очень точны.Эта проблема показана ниже:

enter image description here

Зеленые - это фактические значения, черные - расчетные.Среднее преобразование от 1 до 2 равно x:10 y:2.

Это было полезно?

Решение

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

Предполагая, что ваши положения маркеров фиксированы (например, на неподвижном твердом теле), и вам нужно их относительное положение, тогда вы можете просто записать их положения и усреднить их.Если существует вероятность путаницы одного маркера с другим, вы можете отслеживать их от кадра к кадру и использовать непрерывность расположения каждого маркера между его двумя периодами для подтверждения его идентичности.

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

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

Включив местоположения ваших маркеров как часть вектора состояния Калмана, вы сможете определять их относительные местоположения исключительно по данным датчиков (что, по-видимому, и является вашей целью), вместо того, чтобы требовать эту информацию априори.Если вы хотите иметь возможность эффективно обрабатывать произвольное количество маркеров, возможно, вам придется придумать какую-нибудь хитроумную мутацию обычных методов;ваша проблема, похоже, предназначена для того, чтобы избежать решения обычными методами декомпозиции, такими как последовательная фильтрация Калмана.


Отредактируйте, согласно приведенным ниже комментариям:

Если ваши маркеры отображают полную 3D-позу (а не просто 3D-положение), дополнительные данные облегчат сохранение точной информации об объекте, который вы отслеживаете.Однако вышеприведенные рекомендации по-прежнему применимы:

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

Новые моменты, которые приходят на ум:

  • Попытка управлять цепочкой относительных преобразований, возможно, не лучший способ подойти к проблеме;как вы заметили, он подвержен накоплению ошибок.Однако это также не обязательно плохой способ, если вы можете реализовать необходимую математику в этой структуре.
  • В частности, подгонка методом наименьших квадратов должна идеально работать с цепочкой или кольцом относительных поз.
  • В любом случае, как для подбора методом наименьших квадратов, так и для отслеживания фильтра Калмана, хорошая оценка неопределенности ваших измерений повысит производительность.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top