OpenCV + фотограмметрия - PullRequest
       69

OpenCV + фотограмметрия

3 голосов
/ 05 мая 2011

у меня есть стереопара, фото 1: http://savepic.org/1671682.jpg фото 2: http://savepic.org/1667586.jpg

В каждом изображении есть система координат.Как я могу найти координаты точки A в этой системе, используя библиотеку OpenCV.Было бы неплохо увидеть пример кода.Я искал это на opencv.willowgarage.com/documentation/cpp/camera_calibration_and_3d_reconstruction.html, но не нашел (или не понял :))

Ответы [ 3 ]

4 голосов
/ 04 марта 2015

Ваши «стерео» изображения в порядке. Что вы уже сделали, так это решили проблему соответствия: на обоих изображениях вы указали точки «А». Это означает, что вы знаете, какой пиксель соответствует другой точке маркировки «A».

То, что вы хотите сделать, это триангулировать, где находится ваша камера. Вы можете сделать это только предварительно откалибровав камеру. Это уже внутри OpenCV. http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

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

С этого момента ваша триангуляция проста, зная положение пикселя на обоих изображениях точки «A». У вас есть

  • Расположение и ориентация камеры 1 и камеры 2
  • Вектор оптического луча (местоположение в пикселях) с камер для обозначения «A».

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

Обратите внимание, что на практике лучи никогда точно не пересекаются (2 линии в 3D редко проходят), поэтому вам необходимо приблизиться. Используйте функцию opencv triangulatePoints (), используя вход стереокалибровки и индекс пикселей, относящийся к метке A.

0 голосов
/ 10 июня 2014

Во-первых, это действительно не стереопара. Хорошая стереопара должна иметь перекрытие 60% -80%, как правило, небольшую разницу вращения между изображениями. Даже если бы у этой пары была необходимая БАЗА, чтобы она была хорошей стереопарой из-за чрезвычайно крутого вращения каппа, получающееся эпиполярное изображение было бы бесполезным.

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

.

http://en.wikipedia.org/wiki/Camera_resectioning

http://en.wikipedia.org/wiki/Collinearity_equation

0 голосов
/ 05 мая 2011

Вы должны понимать математику.

Если этой страницы недостаточно, вам следует обратиться к opencv book - этому посвящена пара главТогда есть много учебников, которые освещают это более подробно

...