roboforum.ru

Технический форум по робототехнике.

Универсальное зрение для навигации - 3D-реконструкция

Универсальное зрение для навигации - 3D-реконструкция

Сообщение =DeaD= » 09 мар 2006, 13:58

Задача общая звучит так "ориентация в неподготовленном пространстве без взаимодействия с объектами".

Т.е. отвечаем на вопрос "где мы сейчас", "что вокруг нас за препятствия" и "как проехать в точку X".

Ориентируемся по каким-то объектам в окружающем пространстве которые мы должны научиться выделять и узнавать.

Здесь мы обсуждаем задачу:

Определение расстояния до предметов и ладшафта (3D-реконструкция).
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение =DeaD= » 09 мар 2006, 14:12

1.

Проблема специально названа 3D-реконструкция, а не стереозрение. Собственно почему именно стереозрение, а не motion-flow?

2.

В стереозрении и в любом другом зрении (в т.ч. motion-flow) есть принципиальные участки, которые тяжело сопоставлять между двумя кадрами (области однотонной закраски без теней и текстурированного освещения). Практически неизлечимая проблема.

3.

Как в motion-flow, так и в стереозрении есть задача составления векторного поля по двум кадрам. Знаю минимум два подхода к этом - первый основан на пирамидах изображений (в курсе что это?), второй на чистом сопоставлении фрагментов изображений и прямом нахождении векторов для каждой нужной точки. Я применял на практике второй способ.

Оба названных способа есть в OpenCV, хотя я не разобравшись в ней до конца, при той работе, сам написал процедуру получения векторного поля.

Какие еще есть способы?
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение Сергей Мальцев » 09 мар 2006, 15:27

1.

Проблема специально названа 3D-реконструкция, а не стереозрение. Собственно почему именно стереозрение, а не motion-flow?


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

2.

В стереозрении и в любом другом зрении (в т.ч. motion-flow) есть принципиальные участки, которые тяжело сопоставлять между двумя кадрами (области однотонной закраски без теней и текстурированного освещения). Практически неизлечимая проблема.


Проблема действительно практически неизлечимая. Но можно попробовать использовать интерполяцию, с сохранением информации о не восстановленных данных, так как это может пригодиться для дальнейших алгоритмов.
Сергей Мальцев
 
Сообщения: 106
Зарегистрирован: 07 мар 2006, 16:14
Откуда: Москва

Сообщение =DeaD= » 09 мар 2006, 16:22

Сергей Мальцев писал(а):1. Да, я думаю, нам нужно одновременно использовать различные подходы, для того чтобы максимально реконструировать сцену, с максимальной точностью. Но нужно решить с чего начать, я бы начал со стереозрения, но можно и параллельно работать. После испытания всех технологий нужно будет решить какие оставить в конечном варианте, а какие нет.

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

1. Со стереозрения плохо начинать, потому что есть проблемы синхронизации (вроде в OpenCV как-то мимо этой проблемы разработчики прошли), но если их нам удастся побороть - я не против.

У человека стереозрение не работает на больших расстояних вроде бы, да и человек без 1 глаза ничего, живет себе, хотя и хуже немного.

Зато мы точно знаем - чтобы понять форму предмета мы любим его осматривать с разных сторон или крутить в руках, то есть motion-flow как раз более активно пользуем. Или я где-то неправ?

2. По поводу интерполяции и т.п. Как минимум нужно учесть фишку с картинки ниже. На картинке изображен срез с двух камер при фиксированной координате Y.

На ней фиолетовые кракозябры - распознаные участки (опознано расстояние до них, найдено соотв. на картинках).

Утверждается, что нераспознанный участок должен в этом случае лежать в розовом треугольнике. То есть для целей навигации мы можем и из неопознанных участков извлекать более менее точную информацию. Очевидно что чем меньше такие участки, тем более точная информация у нас будет по предполагаемым их положениям.
Вложения
pic1.jpg
pic1.jpg (34.87 КиБ) Просмотров: 9127
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение Сергей Мальцев » 09 мар 2006, 17:10

3.

Как в motion-flow, так и в стереозрении есть задача составления векторного поля по двум кадрам.


По моему, все же в стереозрении не нужны векторные поля, или может просто терминология другая. В стереозрении нужно сопоставление пар точек.

Знаю минимум два подхода к этом - первый основан на пирамидах изображений (в курсе что это?), второй на чистом сопоставлении фрагментов изображений и прямом нахождении векторов для каждой нужной точки. Я применял на практике второй способ.


С пирамидами изображений не знаком, по крайней мере с термином. Насколько я понял второй способ это нечто вроде корреляции? Вы, кстати, эпиполярные линии учитываете? Я постараюсь выложить некоторые страницы из книги Дэвид А. Форсайт, Джин Понс "Компьютерное зрение. Современный подход", посвященные этому вопросу. А вы книгу Хорна ?Зрение роботов? просматривали, она в сети есть. Там было по этому вопросу тоже много.

Оба названных способа есть в OpenCV, хотя я не разобравшись в ней до конца, при той работе, сам написал процедуру получения векторного поля.


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


Надо бы еще поиск в итнернете сделать. Вроде задача распространненая, может кто исходники выложил.
Сергей Мальцев
 
Сообщения: 106
Зарегистрирован: 07 мар 2006, 16:14
Откуда: Москва

Сообщение =DeaD= » 09 мар 2006, 17:41

Сергей Мальцев писал(а):По моему, все же в стереозрении не нужны векторные поля, или может просто терминология другая. В стереозрении нужно сопоставление пар точек.

По сути это тоже векторное поле, просто все вектора имеют координату X одного знака, а координату Y нулевую.

Сергей Мальцев писал(а):С пирамидами изображений не знаком, по крайней мере с термином. Насколько я понял второй способ это нечто вроде корреляции? Вы, кстати, эпиполярные линии учитываете? Я постараюсь выложить некоторые страницы из книги Дэвид А. Форсайт, Джин Понс "Компьютерное зрение. Современный подход", посвященные этому вопросу. А вы книгу Хорна ?Зрение роботов? просматривали, она в сети есть. Там было по этому вопросу тоже много.

Компьютерное зрение, современный подход лежит дома, читаю потихоньку. Зрение роботов надо будет скачать.

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

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

CalcOpticalFlowHS
CalcOpticalFlowLK
CalcOpticalFlowBM
CalcOpticalFlowPyrLK

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

Сергей Мальцев писал(а):Надо бы еще поиск в итнернете сделать. Вроде задача распространненая, может кто исходники выложил.

Разумеется, но исходники мало кто выкладывает, в основном результаты и отчеты. Даже алгоритмы не всегда рассказаны.
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение Сергей Мальцев » 09 мар 2006, 17:51

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


Вот чего в SourceForge нашел, разбираться на долго хватит :)
http://sourceforge.net/search/?words=3d ... earch=soft
Сергей Мальцев
 
Сообщения: 106
Зарегистрирован: 07 мар 2006, 16:14
Откуда: Москва

Сообщение Сергей Мальцев » 09 мар 2006, 18:04

Вот один, на первый взгляд, подходящий вариант:
http://people.csail.mit.edu/demirdji/do ... index.html
Сергей Мальцев
 
Сообщения: 106
Зарегистрирован: 07 мар 2006, 16:14
Откуда: Москва

Сообщение =DeaD= » 09 мар 2006, 19:49

Сергей Мальцев писал(а):Вот один, на первый взгляд, подходящий вариант:
http://people.csail.mit.edu/demirdji/do ... index.html

Некрасиво, что под Win32 все сделано, причем только под одну среду разработки - Visual Studio. А в целом нужно разбирать :)

В любом случае предлагаю делать добавки к OpenCV, а не брать библиотеки чужие цельные, иначе лоскутное одеяло получится вместо нормальной системы. Но алгоритм посмотреть само собой не помешает.

Сорцы скачал, будем смотреть. Только оно частично на ASM написано :(
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение =DeaD= » 09 мар 2006, 20:05

В целом надо сначала провести исследование состояния дел в этой области - сколько времени на это заложим?

Сразу выкину сюда список проектов из sourceforge.net отфильтрованный, их нужно будет разобрать между собой и прочесать на предмет идей и алгоритмов:

СТЕРЕОЗРЕНИЕ:

1.
http://sourceforge.net/projects/clone3d
3D object reconstruction based on several images

2.
http://sourceforge.net/projects/estereo
EStereo is a computer vision C++ library for real-time disparity estimation. The library contains various functions for dense stereo matching from 2 or 3 rectified images and 3D scene reconstruction.

3.
http://sourceforge.net/projects/kljh
Stereovision and multivision library Takes multiple image, detects and tracks points of interest, determines camera parameters and makes a basic 3D reconstruction or build a panorama.

4.
http://sourceforge.net/projects/mrhd
Software for creating Depth Maps and DEMs from image pairs taken using a Stereo Camera Rig. Currently works on images from Parallel Cameras. Create your own depth maps and 3d terrain from any images, such as NASA Mars Rover Image Pairs.

5.
http://sourceforge.net/projects/svfx
Stereo vision for special effects: The aim of the project is to implement a stereo vision algorithm based on color segmentation and graph cuts. It will be possible to extend the code to multicamera scene reconstruction.

6.
http://sourceforge.net/projects/argus3d
A small stereo vision library.

7.
http://sourceforge.net/projects/rodney
Rodney is an upper torso humanoid robot with stereo vision, speech recognition and a wide variety of body and head movements. This project is designed to be an open source repository for the software which comprises its control system.

8.
http://sourceforge.net/projects/stevision
Given a video feed consisting of a pair of stereo images to determine wat are the various objects in the scence and how far they are from the camera. This would ultimately be a visual navigation tool for robots.

9.
http://sourceforge.net/projects/binocle
The goal of this project is to develop a libray which implements functions related to stereovision and stereo-correlation. In other terms, whith two pictures of a same object taken from different angles, this library can generate a ZBuffer of the pictures.

Как будем делить? Если что - естерео я уже скачал :)
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение lebaon » 09 мар 2006, 20:15

есть идея :idea:
скомбинировать стереозрение и оптикал флов, например на большой
дальности оптикал флов точнее, вот на него и упираться,
вблизи стереозрение точнее, вот и его испоьзовать,
вообщем переключать методы в зависимости от ситуации :roll:
еще можно сначала выделять контуры, по ним точность будет максимальна, а что в контур не вошло, то обрабатывать как обычно
с поправкой на имеющиеся данные( расстояния до контуров,
данные по расспазнаванию+опыт) :idea:
Аватара пользователя
lebaon
Безбашенный Теоретик
 
Сообщения: 1137
Зарегистрирован: 07 янв 2006, 18:30
Откуда: Подмосковье

Сообщение =DeaD= » 09 мар 2006, 20:43

lebaon писал(а):есть идея :idea:


Как бы это сказать...

Вроде и проигнорировать неприлично и ответить особо нечего :)

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

Мы как раз, я думаю, сначала комбинированием и займемся, чтобы войти в тему, хотя может по ходу и чего своего придумаем.
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение lebaon » 09 мар 2006, 21:14

а по контурам :?:
Аватара пользователя
lebaon
Безбашенный Теоретик
 
Сообщения: 1137
Зарегистрирован: 07 янв 2006, 18:30
Откуда: Подмосковье

Сообщение =DeaD= » 09 мар 2006, 21:27

lebaon писал(а):а по контурам :?:

Все алгоритмы этой группы и так устроены таким образом, что они эту особую точность на контурах и без специальных доработок ловят.
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение Сергей Мальцев » 10 мар 2006, 12:47

Со стереозрения плохо начинать, потому что есть проблемы синхронизации (вроде в OpenCV как-то мимо этой проблемы разработчики прошли), но если их нам удастся побороть - я не против.

Что за проблемы с синхронизацией?

У человека стереозрение не работает на больших расстояних вроде бы, да и человек без 1 глаза ничего, живет себе, хотя и хуже немного.

Мне кажется что большие расстояния не очень нужны, по крайней мере на начальном этапе. А ты уверен что motion-flow на больших расстояниях хорошо работает?

Зато мы точно знаем - чтобы понять форму предмета мы любим его осматривать с разных сторон или крутить в руках, то есть motion-flow как раз более активно пользуем. Или я где-то неправ?


А вот тут точно не известно что при рассматривании с разных сторон используется больше. Это может использоваться стереозрением для запоминания максимальной информации о предмете.

2. По поводу интерполяции и т.п. Как минимум нужно учесть фишку с картинки ниже. На картинке изображен срез с двух камер при фиксированной координате Y.

На ней фиолетовые кракозябры - распознаные участки (опознано расстояние до них, найдено соотв. на картинках).

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

Идея полезная, нужно будет ее учесть но для начала нужно посмотреть какие вообще результаты даст 3d реконструкция.
Еще есть соображение, что внутри области однородной закраски будет достаточно ровная поверхность, без резких выпадов, иначе бы скорее всего в силу освещения однородной закраски не было бы.
Сергей Мальцев
 
Сообщения: 106
Зарегистрирован: 07 мар 2006, 16:14
Откуда: Москва

След.

Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9