roboforum.ru

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

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

=DeaD= » 13 мар 2006, 19:21

GraphD писал(а):В остальных местах крайне поверхностно, по-сравнению с Хорном, там нужно численно решать элиптические ур-ия, если б не отсутствие знаний по числ. методам, то можно было бы попробовать совместить двух гигантов - стерео и SFS... Совместить с целью поймать 2х зайцев: стерео ищет краевые особые точки, а SFS работает на промежутках между краями, где градиент слабый. Т.е. получим двухитеративный способ.


Тему пробить можно, но нужно быть уверенным, что на объекте нету градиента в текстуре, то есть что эти переходы яркости именно от рельефа, а не часть текстуры, а то кто-нибудь нарисует на стене объемную дверь, а мы в неё войдем :)

Хотя в целом SFS можно будет пользовать как источник гипотезы о структуре поверхности, а затем прогнать её на стерепаре для проверки, если прокатило, то принимаем, иначе - нам подсунули фотку двери :)

GraphD » 13 мар 2006, 21:40

=DeaD= писал(а):Хотя в целом SFS можно будет пользовать как источник гипотезы о структуре поверхности, а затем прогнать её на стерепаре для проверки, если прокатило, то принимаем, иначе - нам подсунули фотку двери :)

В общем смысле ты прав.
Слабые градиенты более всего подвержены искажению и в тоже время слабо локализуемы.
При этом в глазу они как-то сильно влияют на пространственное дополнение... 3Д красивее смотрится с ними.
Млжет слабый градиент цепляется за границы и все-равно SFS лучше, чем ничего? По градиенту кстати ничего нельзя распознать, дверь в слабых градиентах ты не нарисуешь - это будет не дверь, а непонятно что. Так что для локальных особенностей SFS вполне покатит, ИМХО.[/b]

=DeaD= » 14 мар 2006, 08:16

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

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.


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

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

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

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

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

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

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

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

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

Единственные две фишки мутные:

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

2. Какая у них функция корреляции изображений еще не выведал.


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


Важные поля и переменные объекта stereoMatching:
* nbDepth - ? (всегда кратно 8, в примере = 32)
* horopter - ? (в примере = 0)
* nbPartition - ? (почему-то требуется, чтобы height/nbPartition>maskSizeY) (в пакетной процедуре = 8 )

* peakValidationThreshold - уровень отсечки для определения, что нашли правильное смещение (в примере = 5)
* maskSize[X|Y](оно же - correlationWindowSize) - размер окна для нахождения соответствий между левым и правым изображением (в примере = 9х9)

GraphD » 14 мар 2006, 23:58

=DeaD= писал(а):skip all

Че-то пробежался по исходникам по твоей ссылке и ничего напоминающее SFS не нашел, там тока непонятный код по сопоставлению стереопары, судя по названиям и контексту?

=DeaD= » 15 мар 2006, 00:05

GraphD писал(а):Че-то пробежался по исходникам по твоей ссылке и ничего напоминающее SFS не нашел, там тока непонятный код по сопоставлению стереопары, судя по названиям и контексту?

А вы думали это я вам свое огромное сообщение кинул? :)

Просто я разобрался как работает та библиотека и чтобы не править сообщение в середине темы вынес его опять в конец.

Правда может быть это не совсем прилично... ? :)

Сергей Мальцев » 15 мар 2006, 12:36

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


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

=DeaD= » 15 мар 2006, 20:49

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

Если вариационный от корелляционного методы не сильно отличаются, тогда:

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

Кстати, можно в двух словах, что такое вариационный метод? А то моя скачанная книжка Хорна с дырками в этих местах оказалась. Или линк на нормальную, если можно?

GraphD » 15 мар 2006, 21:11

=DeaD= писал(а):Кстати, можно в двух словах, что такое вариационный метод? А то моя скачанная книжка Хорна с дырками в этих местах оказалась. Или линк на нормальную, если можно?

Вариационный - это значит там задача ставится как задача вариационного исчисления. То бешь минимизировать интеграл от  функционала. Функционал у Хорна - это мера отклонения от гладкости восстанавливаемой поверхности + мера расхождения с яркостью из карты отражательной способности. Если я прально понял Хорна :)

=DeaD= » 15 мар 2006, 23:49

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

А! Все, вспомнил, тогда да, в вариационном способе учитывается всё, но не ясно как искать решения и выбирать между разными решениями :)

Есть у кого-то информация о применении на практике вариационного метода?

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

GraphD » 16 мар 2006, 03:34

2Dead, А в твоем проекте есть продвижения, которые можно заценить, хоть в письменном виде или с картинками?
=DeaD= писал(а):Типа можно задачу вообще полно поставить - восстановить видимую часть поверхности, учитывая все законы отражения, преломления и т.п. Только легче не становится

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

=DeaD= » 16 мар 2006, 08:27

GraphD писал(а):2Dead, А в твоем проекте есть продвижения, которые можно заценить, хоть в письменном виде или с картинками?


Котором из? :)

Стереозрение / ориентация по маякам / мобильный робот ?

GraphD » 16 мар 2006, 16:05

=DeaD= писал(а):Котором из? :)
Стереозрение / ориентация по маякам / мобильный робот ?

По зрению и ориентации

=DeaD= » 16 мар 2006, 16:50

GraphD писал(а):
=DeaD= писал(а):Котором из? :)
Стереозрение / ориентация по маякам / мобильный робот ?

По зрению и ориентации


На данный момент в части ориентации по помещениям (не на открытом пространстве) меня держит платформа, потому что я не могу проверять свои идеи на практике. Именно поэтому я встрял во всякие драйверы двигателей, микроконтроллеры, сенсоры/энкодеры, ШИМы и т.п. :) Надеюсь в этот/следующий месяц с помощью Робоклуба в рамках совместного проекта решить этот вопрос и можно будет двигаться дальше.

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

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

lebaon » 22 мар 2006, 20:41

кстати, про фокус,
видели, как линза лазера в сдюке повешена :?:
а что мешает сделать так же :?:
можно вообще подвесить линзу на пружине :idea:
и раскачивать в резонанс, да камеру поставить скоростную,
зная частоту и фазу колебаний определить положение фокуса
очень просто, и работать это будет на частоте колебаний
линзы герц в 100, и все бует ништяк :twisted:
вообще то так и глаз работает(фокус меняет постоянно) :wink:

GraphD » 25 мар 2006, 02:00

lebaon писал(а):кстати, про фокус,
видели, как линза лазера в сдюке повешена :?:
а что мешает сделать так же :?:

И что это будет вобще?
Вот еще что помешает:
Линза маленькая, а оптика камеры большая.
Какой датчик положения этой линзы ставить?
И камеры с ПЗС даже на пределе (~25Гц) не шибко качественно пашут.


Rambler\'s Top100 Mail.ru counter