roboforum.ru

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

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

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

//Ну по сути такие вектора и будут смещениями отвечающими за правильные соответствия между фрагментами изображений на левом и правом изображении.
В целом да (только не прямая, а луч), именно поэтому соот. смещение может быть задано вектором с нулевой Y-координатой и X-координатой фиксированного знака.
В исходном варианте не будут, потому что они рассчитаны на поиск более широкого класса векторных полей, а вот если влезть внутрь и добавить им в уравнения Y=0, X>0, то как раз и получим сужение рабочих методов optical-flow на нашу задачу стереозрения, должно все получиться.

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

Сообщение Сергей Мальцев » 11 мар 2006, 19:20

//Разве в OpenCV нет объектов? По моему их там полно, просто некоторые вещи типа фильтров нет смысла заносить в объекты, как раз должна быть возможность их добавлять по мере необходимости не создавая без надобности такие тяжелые структуры, как объекты.

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

Сообщение Сергей Мальцев » 11 мар 2006, 19:20

//PS: По поводу анализа работ - ок, согласен.

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

Сообщение Сергей Мальцев » 11 мар 2006, 19:22

lebaon писал(а):
насчет одного глаза:
тут наверное используются запомненнные размеры известных объектов, а неизвестные просто соотносит с известными  

ну так как :?:


Вопрос как объекты узнать.

И как это использовать эффект размытия? Может просто предмет не в фокусе.

о, идея, переменный фокус :idea: ,
если стоим, то наводя фокус на максимальную контрастность объекта,
можно определить расстояние до него  :shock:  :!:


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

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

lebaon писал(а):
насчет одного глаза:
тут наверное используются запомненнные размеры известных объектов, а неизвестные просто соотносит с известными  

ну так как :?:

Известных объектов изначально нету.

lebaon писал(а):
И как это использовать эффект размытия? Может просто предмет не в фокусе.

о, идея, переменный фокус :idea: ,
если стоим, то наводя фокус на максимальную контрастность объекта,
можно определить расстояние до него  :shock:  :!:

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

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

Сергей Мальцев писал(а):Думаю, специализированные камеры способны это сделать.

Разумеется технически проблема решаема, но нам же нужно практически :)

Сергей Мальцев писал(а):Да и если скорости не большие это не должно быть особой проблемой.

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

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

Проще лазерный дальномер тогда поставить :)

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

Так же работает как стереозрение, только нету эпиполярных линий, сужающих круг поиска решений.

Сергей Мальцев писал(а):Идею понял. Посмотрел функции. Там есть один минус, они работаю только на серых изображениях. Но понятно, что можно доработать, надо иметь в виду.
Есть еще один момент. Одно из изображений в стереопаре смещено относительно другого по горизонтали, соответственно при использовании алгоритмов optical-flow пары нужно совмещать.

Там много методов, которые по странным стечениям обстоятельств работают только с 1-слойными картинками (ч/б).

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

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

Сообщение Сергей Мальцев » 11 мар 2006, 20:26

//Разумеется технически проблема решаема, но нам же нужно практически

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

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

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

//Проще лазерный дальномер тогда поставить

Да, но он будет работать только в одной горизонтальной плоскости. Или будет нужна система наводки, а это опять лишние деньги.

//Так же работает как стереозрение, только нету эпиполярных линий, сужающих круг поиска решений.

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

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

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

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

Да ну его, лучше синхронизацию научиться делать :)

Сергей Мальцев писал(а):Да, но он будет работать только в одной горизонтальной плоскости. Или будет нужна система наводки, а это опять лишние деньги.

А на ходу зумом крутить это разве круто? :)

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

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

Сообщение Сергей Мальцев » 11 мар 2006, 21:45

=DeaD= писал(а):Будете в одного сайт делать? :)

Может темку создать и структуру там обсудить?
Ибо одна голова хорошо, а две лучше :)

Да и помочь наверное чем-то смогу.


Вот здесь начал обсуждение:
http://www.roboforum.ru/viewtopic.htm?p=12491#12491
Сергей Мальцев
 
Сообщения: 106
Зарегистрирован: 07 мар 2006, 16:14
Откуда: Москва

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

//Да ну его, лучше синхронизацию научиться делать

Будем по ходу дела смотреть.

//А на ходу зумом крутить это разве круто?

Можно на месте, но в общем пока не важно.

//Так камера же не сама по себе летает это же мы нашей платформе сказали ехать, а уж мы знаем как ездим

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

Сообщение =DeaD= » 11 мар 2006, 23:50

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


Думаю не должно быть таких особых проблем. А методы поиска "как мы двигались" по камере такие скорее всего действительно есть.

Кстати:
1.
http://sourceforge.net/projects/clone3d
3D object reconstruction based on several images

и

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.

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

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

Начал разбирать. Разработка вроде бы MIT от 2004 года. Должно быть актуально и по взрослому.

Чтобы мне жизнь никому легкой не казалось, а скорость зашкаливала они применили ассемблерные вставки и наборы специальных инструкций MMX и SSE2.

Далее перечисляю основные их функции (практически каждая функция имеет несколько вариаций, чем отличаются можно догадаться по тексту или по набору входных/выходных данных) и чего они делают:

(несмотря на то что библиотека позволяет работать с тройками изображений я везде по тексту буду писать "стереопара")

(не будут описываться функции производящие пакетную обработку, то есть лишь вызывающие подряд неборы других функций)

Функция №1. NormalizeImages (stereoMatching.cpp)
Приводит изображения к одному среднему уровню яркости (сразу косяк - если одна из камер словила источник света, а остальные нет - тут все съедет).

Функция №2. doReconstruction (reconst3D.cpp)
Получает на входе массив опознанных точек (idx - адрес точки на изображении, disp - смещение), на выходе выдает локальные координаты этих точек (x,y,z), используя параметры камеры.

Функция №3. estimateStereo (stereoMatching_algo.cpp)
Собственно основная их функция, на входе получает стереопару, на выходе дает массив смещений, которые удалось определить.

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

Функция №4. doStereo_grow (stereoMatching.cpp)
Пока вообще не понял чего она делает, похоже на основе первичного отбора точек каким-то образом заполняет оставшиеся нераспознанные места на стереопаре.

Важные поля и переменные объекта stereoMatching:
* nbDepth - ? (всегда кратно 8, в примере = 32)
* horopter - ? (в примере = 0)
* peakValidationThreshold - ? (в примере = 5)
* nbPartition - ? (в пакетной процедуре = 8 )
* maskSize[X|Y](оно же - correlationWindowSize) - размер окна для нахождения соответствий между левым и правым изображением (в примере = 9х9)


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

Есть ли какие-нибудь описания к ассемблерным вставкам?
Видимо скорость работы существенно повышается с ними.

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

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

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

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

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

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

Кстати, по ходу придумал оптимизацию для своего метода - я считал мерой доступности к сопоставлению картинки среднеквадратичное отклонение по всей картинке, а нужно учитывать что сопоставлять мы будем по горизнтали и значит нас интересует среднее геометрическое от среднеквадратичных отклонений по строкам - во как! :)

Сергей Мальцев писал(а):Есть ли какие-нибудь описания к ассемблерным вставкам?
Видимо скорость работы существенно повышается с ними.

В идеале нужно посмотреть результаты работы.

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

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

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

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

Посмотри в главе 13 Хорна, там всего 22 страницы с картинками.
Сергей Мальцев
 
Сообщения: 106
Зарегистрирован: 07 мар 2006, 16:14
Откуда: Москва

Сообщение GraphD » 13 мар 2006, 14:17

Кто-нибудь знает про Surface From Shading?
Там нужно знать карту отражательной способности - т.е. попросту: зависимость ориентации (вектор нормали к пов-ти) от яркости.
Дак вот, после предварительного построения приближенной сетки с помощью стереопары, мы и имеем приближенно зависимость яркости в этих точках от ориентации поверхности (аппроксимированной/интерполированной конечно по этим точкам).
SFS описана с формулами у Хорна. В остальных местах крайне поверхностно, по-сравнению с Хорном, там нужно численно решать элиптические ур-ия, если б не отсутствие знаний по числ. методам, то можно было бы попробовать совместить двух гигантов - стерео и SFS... Совместить с целью поймать 2х зайцев: стерео ищет краевые особые точки, а SFS работает на промежутках между краями, где градиент слабый. Т.е. получим двухитеративный способ.
GraphD
 
Сообщения: 157
Зарегистрирован: 01 окт 2005, 00:56
Откуда: С.-Петербург

Пред.След.

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

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

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