Мой семестровый проект состоит в калибровке стереокамер с большой базовой линией (~ 2 м).
поэтому мой подход состоит в том, чтобы работать без точно определенного калибровочного шаблона, такого как шахматная доска, потому что он должен быть огромным и с ним трудно будет справиться.
моя проблема похожа на это: 3d реконструкция из 2 изображений без информации о камере
Программа до сих пор:
goodFeaturesToTrack
cornerSubPix
calcOpticalFlowPyrLK
findFundamentalMat
stereoRectifyUncalibrated
warpPerspective
sgbm
пока все хорошо, это работает сносно, но выпрямленные изображения «прыгают» в перспективе, если я изменяю количество углов.
не знаю, если это неточность формы или ошибки, которые я схожу с ума, или если он не может быть рассчитан из-за неизвестных параметров камеры или без компенсации искажения объектива (но также происходит на фотографии Цукуба ..)
предложения приветствуются 🙂
но не моя главная проблема, теперь я хочу восстановить 3D-точки.
но reprojectImageTo3D
нужна матрица Q, которой у меня пока нет. так что мой вопрос, как это рассчитать? У меня есть базовая линия, расстояние между двумя камерами. По моим ощущениям, если я преобразую карту несоответствия в трехмерное облако точек, единственное, что мне не хватает, так это масштаб? так что, если я установлю базовую линию, я получу правильную 3D реконструкцию? тогда как?
Я также планирую компенсировать искажения объектива в качестве первого шага для каждой камеры отдельно с помощью шахматной доски (маленькой и близкой к одной камере за раз, поэтому мне не нужно находиться на расстоянии 10–15 м с большим рисунком в области перекрытия обоих. Так что, если это помогает, я мог бы также использовать параметры камеры ..
есть ли документация помимо http://docs.opencv.org? что я могу видеть и понимать, что и как рассчитывается матрица Q, или я могу открыть исходный код (вероятно, трудно понять для меня ^^), если я нажимаю F2 в Qt, я вижу только функцию с типами параметров передачи .. ( извините, я действительно новичок во всем этом)
поэтому я узнал, что ограничивает матрица 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