3D реконструкция из 2 изображений с базовой линией и калибровкой одной камеры

Мой семестровый проект состоит в калибровке стереокамер с большой базовой линией (~ 2 м).
поэтому мой подход состоит в том, чтобы работать без точно определенного калибровочного шаблона, такого как шахматная доска, потому что он должен быть огромным и с ним трудно будет справиться.

моя проблема похожа на это: 3d реконструкция из 2 изображений без информации о камере

Программа до сих пор:

  • Обнаружение угла левого изображения goodFeaturesToTrack
  • изысканные углы cornerSubPix
  • Найдите угловые места на правом изображении calcOpticalFlowPyrLK
  • вычислить фундаментальную матрицу F findFundamentalMat
  • рассчитать H1, H2 ректификационную матрицу гомографии stereoRectifyUncalibrated
  • Исправить изображения warpPerspective
  • Рассчитать карту несоответствия sgbm

пока все хорошо, это работает сносно, но выпрямленные изображения «прыгают» в перспективе, если я изменяю количество углов.

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

но не моя главная проблема, теперь я хочу восстановить 3D-точки.

но reprojectImageTo3D нужна матрица Q, которой у меня пока нет. так что мой вопрос, как это рассчитать? У меня есть базовая линия, расстояние между двумя камерами. По моим ощущениям, если я преобразую карту несоответствия в трехмерное облако точек, единственное, что мне не хватает, так это масштаб? так что, если я установлю базовую линию, я получу правильную 3D реконструкцию? тогда как?
Я также планирую компенсировать искажения объектива в качестве первого шага для каждой камеры отдельно с помощью шахматной доски (маленькой и близкой к одной камере за раз, поэтому мне не нужно находиться на расстоянии 10–15 м с большим рисунком в области перекрытия обоих. Так что, если это помогает, я мог бы также использовать параметры камеры ..

есть ли документация помимо http://docs.opencv.org? что я могу видеть и понимать, что и как рассчитывается матрица Q, или я могу открыть исходный код (вероятно, трудно понять для меня ^^), если я нажимаю F2 в Qt, я вижу только функцию с типами параметров передачи .. ( извините, я действительно новичок во всем этом)

http://i.stack.imgur.com/A1Wjc.jpg

  • слева: ввод с найденными углами
  • top h1, h2: исправьте изображения (хорошо смотрится с таким количеством углов ^^)
  • SGBM: Карта диспаратности

1

Решение

поэтому я узнал, что ограничивает матрица Q здесь:
Использование OpenCV для генерации трехмерных точек (при условии фронтальной параллельной конфигурации)

Все эти параметры определяются калибровкой одной камеры:
c_x, c_y, f

и базовый уровень — это то, что я измерил:
T_x

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

кстати, карта несоответствия выше была неправильной ^^ и теперь она выглядит лучше. Вы должны сделать анти-Shearing Transform, потому что StereoRectifyUncalibrated является Shearing вашего изображения (не задокументировано?).
описанный в этой статье в «7 Shearing Transform» Чарльз Луп Чжэнъю Чжан:
http://research.microsoft.com/en-us/um/people/Zhang/Papers/TR99-21.pdf

Результат:
http://i.stack.imgur.com/UkuJi.jpg

0

Другие решения


По вопросам рекламы [email protected]