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

3D реконструкция

Recommended Posts

Библиотеки AAMlibrary, ASMlibrary и STASM написаны с использованием OpenCV. И,естественно, понимают IplImage. Так что все равно будете писать программу на основе opencv :)

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


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

Одна из книг, на которую почти все ссылаются когда речь идет о геометрии в машинном зрении:

Multiple View Geometry in computer vision Авторы Richard Hartley и Andrew Zisserman

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

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


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

возможно ли построение depth map используя только 1 камеру?

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


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

Знаю что для Ламбертовых поверхностей строят, сам не пробовал.

Вот, например: http://www.loria.fr/~kerautre/publications/Braquelaire05.pdf

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


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

Извиняюсь, Ваше исходное сообщение попортил.

а есть такое чтобы например идет человек с камерой и строится ЗД сцена по этому видео.

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

вроде бы было еще даже 3д модель головы человека по видео.

SFM это называется или Structure From Motion.

Библиотеки в тему:

fvision

libmv

По поводу ламбертовых поверхностей:

Ламберта закон (Lambert's cosine law)

Яркость L рассеивающей свет (диффузной) поверхности одинакова во всех направлениях, а сила света, излучаемого плоской рассеивающей площадкой dS в каком-либо направлении, зависит от угла α между этим направлением и перпендикуляром к dS: Iα = I0cosα. Последнее выражение означает, что сила света плоской поверхности максимальна (I0) по нормали к ней и, убывая с ростом α, становится равной нулю в касательных к поверхности направлениях. Такая схема идеального рассеяния света очень удобна для теоретических исследований.

Ламбертова поверхность (Lambertian surface)

Идеальная поверхность для которой излучение распределяется по углу согласно закону Ламберта.

Например гипсовые фигуры. Преимущественно матовые поверхности равномерно рассеивающие свет.

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


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

вот кстати прям с видео карта глубины.

хотя там не понятно в реальном времени ли это и просто ли с видео.

Structure From Motion я вроде бы даже смотрел как раз про восстановление города по фотографиям в поинт клауд, но там это все обрабатывалось на кластере, интересно есть ли что то ближе к реальному времени.

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

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

вообщем меня больше интересует вопрос насколько реально отсняв камерой(для простоты считаем, что каждый кадр фотография) помещение допустим получить потом его 3Д модель? или натренировать на особый класс объектов, т.е. получить с видео например 3д модель объекта, который на этом видео двигался.

p.s. да и кстати я так и не понял как побороть Radial distortion т.е. с искажениями Sift/surf плохо работает.

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


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

Да, у Kinect идет еще один слой данных - глубина.

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


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

Я так понял, что Вам нужна модель для AAM. Но тогда вопрос, какую библиотеку используете? Если ту, что я прикрепил сверху напишите e-mail, я отправлю модель. Не прикрепил, т.к. она большая (около 40 Мб, если память не подводит).

Хочу поиграться с AAM_src.rar линк на данные на лицо не кините ?

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


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

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

aamlibrary_release_2.0.zip

В нем есть все необходимое для построения моделей (см. папку example) в ней уже есть екзешник для построения модели (данные в папке image) build.exe (run-build.bat). И детектор fit.exe (run-fit.bat). Build-ом строите модель (файл с расширением .amf) и скармливаете его детектору. Впрочем, там по содержимому bat файла не сложно разобраться (при том есть еще и исходники обоих экзешников).

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


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

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

aamlibrary_release_2.0.zip

В нем есть все необходимое для построения моделей (см. папку example) в ней уже есть екзешник для построения модели (данные в папке image) build.exe (run-build.bat). И детектор fit.exe (run-fit.bat). Build-ом строите модель (файл с расширением .amf) и скармливаете его детектору. Впрочем, там по содержимому bat файла не сложно разобраться (при том есть еще и исходники обоих экзешников).

Благодарствую. Поигрался с AAM и ASM точность откровенно хромает.

Как вы думаете с каким методом стоит бороться дабы точность возросла ?

Или есть мне неведомые альтернативы ?

Нужны контрольные точки. Скорость не критична.

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


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

AAM потенциально мощнее, но реализация его в данном исходнике не самая лучшая. Что касается направления куда смотреть, то я думаю в сторону 3D ASM/AAM (по фотографии, но с использованием трехмерных моделей), плюс не нужно забывать о каскадах Хаара, фильтрации по цвету и других методах Template matching, например. Ни один метод отдельно, на сегодняшний день, не даст необходимой точности.

Можете еще пару продуктов посмотреть:

Здесь есть скачиваемый бесплатно код (не открытый и с ограничениями):

http://www.seeingmachines.com/product/faceapi/

и одна из передовых фирм в этой области (тут видео можно посмотреть, демка есть в меню Try Live - примерка очков)

http://www.t-immersion.com/

  • Like 1

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


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

Я игрался с востановлением карты глубины по двум изображениям. Хочу поделиться результатами.

В опенсв есть 2 функции: FindStereoCorrespondenceBM и cvFindStereoCorrespondenceGC

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

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

Вот код на питоне:

import cv


L=cv.LoadImage("l.jpg",0)

R=cv.LoadImage("r.jpg",0)


size = (L.width, L.height)


disparity = cv.CreateImage( size, cv.IPL_DEPTH_32F, 1)

dLeft = cv.CreateImage( size, cv.IPL_DEPTH_16S, 1)

dRight = cv.CreateImage( size, cv.IPL_DEPTH_16S, 1)



Hleft = cv.CreateImage( size, cv.IPL_DEPTH_8U, 1)

Hright = cv.CreateImage( size, cv.IPL_DEPTH_8U, 1)


print "calculation started", time.ctime()


state = cv.CreateStereoGCState(128, 100)

cv.FindStereoCorrespondenceGC(L, R, dLeft, dRight, state, False)


print "calculation complited", time.ctime()


cv.ShowImage("L", L)

cv.ShowImage("R", R)


cv.AddWeighted(dRight, 2, dRight, 0, 0, dRight)

cv.AddWeighted(dLeft, -2, dLeft, 0, 0, dLeft) 


cv.ConvertScale(dLeft, Hleft)

cv.ConvertScale(dRight, Hright)


cv.ShowImage("Disparity Left", Hleft)

cv.ShowImage("Disparity Right", Hright)


cv.SaveImage("Hleft.jpg", Hleft)

cv.SaveImage("Hright.jpg", Hright)


cv.WaitKey(5000)

Расчет на одном ядре занял около 10 минут. Это наилучший результат, которого я смог добиться

Экспериментально нужно подобрать параметры функции cv.CreateStereoGCState(128, 100)

post-2009-0-99490900-1316286153_thumb.jp

  • Like 1

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


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

Доброго времени, господа.

Соорудил конструкцию из двух камер, получаю карту глубины с помощью Semi-global block matching алгоритма, все хорошо. Использую Point CLoud Library пока что просто для вывода облака точек, кстати проверял расстояние меряет довольно точно - на реальном расстоянии в 2 метра погрешность была 5 см. :)

Расчитываю с помощью визуальной одометрии матрицу поворота+переноса из предыдущего кадра в текущий. Теперь проблема. Хочу строить 3д карту помещения, просто вращая свою установку и не могу понять как сюда привязать одометрию и регистрацию облаков точек.

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

Помогите люди добрые разобраться, бьюсь 4 месяца уже.

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


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

Здесь смотрели? :

http://openslam.org/

http://www.mrpt.org/

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


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

по идее имеем карту глубины для одного места и второго и они пересекаются, что эквивалентно двум облакам точек которые пересекаются.

не знаю можно ли использовать "плоские" дескрипторы просто с изображений, но вроде в PCL есть 3Д дескрипторы, хотя может это не в тему.

если не использовать дескрипторы то имеем 2 облака точек и их можно наложить друг на друга через ICP алгоритм, он тоже есть в PCL.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×