Это сложная проблема в монокулярных условиях, для которых ИИМ дают довольно хорошие результаты (например, здесь). Но похоже, что у вас в настоящее время нет никаких датчиков, кроме камеры. В этом случае оценка масштаба с помощью шахматной доски или маркеров не является идеальным решением, поскольку потребует от вас большого контроля над движением вашей камеры при инициализации. Например, один простой способ, который приходит на ум, таков: держите шахматную доску точно вертикально и зафиксируйте камеру на расстоянии N, а ее ось ортогональна доске. Теперь убедитесь, что вы перемещаете камеру точно параллельно доске в течение времени t. В этот промежуток времени все объекты, которые вы обнаружите на доске, будут находиться на расстоянии N от камеры. Это означает, что если их глубина в ваших координатах SLAM составляет s, то ваш масштаб будет N/s. Однако держать движение точно параллельно неудобно. Я ожидаю (не стесняйтесь поправлять меня), что другие подходы, основанные на маркерах, будут такими же плохими.
Лучшим, но значительно более трудоемким (с точки зрения разработки) вариантом является использование трекера на основе моделей (богатая литература, на ум приходит очень старый пример: pwp3D). Возьмите известный объект в вашей среде (простой, для которого вы можете легко получить модель в САПР, в которой масштаб является истинным масштабом). Теперь ваша проблема заключается в выравнивании вашей ссылки SLAM на ссылку объектного пространства. Для этого вы можете использовать обнаружение контуров на исходном изображении, спроецировать модель CAD и попытаться выровнять их как можно лучше (обратите внимание, что вы должны выровнять эти контуры на достаточном количестве изображений, используя разные точки обзора, в способ регулировки пучка).
Другой возможностью является использование нейронной сети для прогнозирования глубины (богатая литература по этому вопросу), но оценка обычно будет менее точной.
Решение проблемы выравнивания с наземными координатами:
Из вашего комментария я понимаю, что вы хотите согласовать свои координаты SLAM с ранее известным референсом. Я думаю, что изучение систем SLAM с географической привязкой может быть полезным для вас, поскольку они сталкиваются с той же проблемой, что и вы, при инициализации. Теперь, чтобы вернуться к проблеме, вот как я это сделаю:
Давайте отметим G желаемую систему координат, и пусть S будет эталоном SLAM. Ваш алгоритм SLAM реконструирует объекты по маркеру, который мы назовем f'_1,f'_2,f'_3
. Они будут соответствовать функциям f_1,f_2,f_3
на вашем маркере. Важно, чтобы вы могли правильно сопоставить эти функции на основе их внешнего вида (текстуры или цвета и т. д.). После того, как у вас есть эти совпадения, проблема состоит в том, чтобы найти сходство sim=[sR sT;0 1]
(с использованием обозначений, подобных matlab/octave), где R — это поворот, T — перевод, а >s — параметр масштаба. Теперь вы должны быть в состоянии сформулировать свою проблему как своего рода
argmin_{R,T,s} sum(d(f'_i, sim*f_i))
где сумма выполняется для индексов 1,...,N (на рисунке N=3), а d strong> обозначает расстояние (я бы сказал, евклидово) между объектами в референциальном G и их совпадениями в референтном S. Конечно, это широкая формулировка, но я думаю, что она может служить общей основой для вашего решения. Обратите внимание, однако, что будет намного лучше, если вы сможете получить априорные значения R,T,s до минимизации такой функции стоимости, поскольку алгоритмы минимизации для таких задач имеют тенденцию застревать в локальные минимумы.
person
Ash
schedule
11.04.2017