Как в откалиброванной установке стерео-зрения получить «матрицы камеры», необходимые для реализации алгоритма трехмерной триангуляции?

Я пытаюсь реализовать (относительно простой )линейно-однородный (DLT )метод трехмерной триангуляции из "Multiple View Geometry" Хартли и Зиссермана (сек 12.2 )с целью реализации их полного, «оптимального алгоритма» в будущем. Прямо сейчас, основываясь на этом вопросе , я пытаюсь заставить его работать в Matlab, а позже перенесу его на C++ и OpenCV, попутно проверяя соответствие.

Проблема в том, что я не знаю, как использовать имеющиеся у меня данные. Я откалибровал свою стереосистему и получил две внутренние матрицы камеры, два вектора коэффициентов искажения, матрицу вращения и вектор смещения, связывающие две камеры, а также основные и фундаментальные матрицы. У меня также есть 2D-координаты двух точек, которые должны соответствовать одной 3D-точке в системах координат двух изображений (, снятых 1-й и 2-й камерами соответственно ).

Алгоритм принимает в качестве входных данных координаты двух точек и две «матрицы камеры» 4x3 P и P'. Очевидно, что это не внутренние матрицы камеры (M, M' ), полученные в результате калибровки, потому что для одного они имеют размер 3x3, а также потому, что проекция, использующая только их, помещает трехмерную точку в две разные системы координат, то есть -отсутствуют внешние (данные вращения/перемещения ).

Книга H&Z содержит информацию (, главу 9 ), о восстановлении требуемых матриц либо из фундаментальной, либо из существенной матрицы с использованием разложения SVD, но с собственными дополнительными проблемами (, например.неоднозначность шкалы ). Я чувствую, что мне это не нужно, так как у меня явно определены поворот и перевод.

Тогда возникает вопрос :правильно ли использовать первую внутреннюю матрицу с дополнительным столбцом нулей в качестве первой «матрицы камеры» (P=[M|0] ), а затем умножьте вторую внутреннюю матрицу на внешнюю матрицу, составленную из матрицы вращения и вектора переноса в качестве дополнительного столбца, чтобы получить вторую требуемую «матрицу камеры» (P'=M' *[R|t] )? Или это надо делать по другому?

Спасибо!

6
задан Community 23 May 2017 в 12:02
поделиться