Перейти к содержимому
Compvision.ru
zloy_molo4nik

MonoSLAM

Recommended Posts

Привет,

Дело было вечером, делать было нечего. Начал я делать диплом. Если в общем описать, то нужно реализовать алгоритм SLAM. Есть 1 камера.Все было отлично до того момента, пока дело не дошло до 3D реконструкции. В программе уже реализовано:

1) захват видео с камеры;

2) поиск ключевых точек(Лукас-Канаде);

3) построение оптического потока;

4) Определение движения камеры из оптического потока;

Как теперь дальше делать 3D реконструкцию непонятно. Тоесть как из найденных ключевых точек построить карту?

Объясните плз как из наборов ключевых точек строить карту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Могу поделиться материалом, матлабовские файлы (работает, проверял), pdf-ки, и проект для студии (перевод с МАТЛАБА я его так и не добил)

Matlab-вариант:

https://docs.google.com/file/d/0Bxk3hR536PxSeng1WGFVYVpWcWs/edit?usp=sharing

Взят вроде отсюда (уже не помню): http://openslam.org/ekfmonoslam.html

С++ вариант и pdf-ки

https://docs.google.com/file/d/0Bxk3hR536PxSUVJBdjZXeGZwTkU/edit?usp=sharing

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо огромное, буду читать.

В инете нашел такое:

Что бы реализовать слам из оптического потока нужно:

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

2) далее разделить на трансформацию

3) по ней составить уравнение проектирование

4) решаем обратную задачу

Пункт 1 сделал, использовал cvFindFundamentalMat. А вот пункт 2 непонятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гладко на бумаге, реально все сложнее.

Почитайте pdf-ки, это одна из лучших реализаций которые я находил.

Также, можно в дебаге MATLAB-а посмотреть что и как считается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В readme написано:

------------------------------------------------------------

Quick start

------------------------------------------------------------

After unzipping:

1) Go to matlab_code directory

2) Run mono_slam.m

по-моему параметров там не нужно, все вбито в скрипт.

а что вкратце делает программа из 2 поста?

Программа нужна для вычисления перемещения камеры (6 координат) по последовательности изображений.

Вот видео программы тех же авторов.

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SLAM - simultaneous localisation and mapping.

Переводится как "одновременное локализация и составление карты".

Здесь карта разреженная состоит из тех особенностей. Еще можно встретить под названием PTAM "parallel tracking and mapping".

Есть и другой метод DTAM, "Dense tracking and mapping"

Еще может быть интересно будет посмотреть библиотеку MRPT, в нее входят разные SLAM.

http://www.mrpt.org/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Имея только одну камеру, это реально реализовать? Или будет куча проблем и лучше искать 2 камеры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно, использовать одну, но проблем много.

Лучше всего использовать kinect, для него и проект готовый с открытым кодом есть (kinfu называется входит в PCL).

вот пример работы:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это да, но есть только 1 камера, если очень напрячься, то можно достать 2. На Kinect денег не хватит.

Мне просто на диплом поставили задачу. Есть мобильный робот. Передавать видео с камеры телефона на комп. и делать 3D реконструкцию карты местности имея только видео (1 поток). Я так понял, что пора менять тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тяжелый случай, я бы сменил тему :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно, использовать одну, но проблем много.

Лучше всего использовать kinect, для него и проект готовый с открытым кодом есть (kinfu называется входит в PCL).

вот пример работы:

В классическом kinfu объем сцены ограничен кубом 3*3*3 метра, но есть разновидность kinfu LargeScale для произвольного объема сцены. Но насколько я помню нет имплементации kinfu на CPU, только на GPU. И вряд-ли мобильный робот имеет на борту GPU и достаточного размера аккумулятор чтобы все это переваривать дольше пары минут)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще один SLAM с исходниками:

http://vision.in.tum.de/research/lsdslam?redirect=1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×