Как рассчитать внешние параметры одной камеры относительно второй камеры?

Я откалибровал 2 камеры относительно некоторой мировой системы координат. Я знаю матрицу вращения и вектор переноса для каждого из них относительно мировой системы отсчета. Как из этих матриц вычислить матрицу вращения и вектор переноса одной камеры относительно другой??

Любая помощь или предложение, пожалуйста. Спасибо!




Ответы (3)


Сначала преобразуйте матрицу вращения в вектор вращения. Теперь у вас есть 2 3D-вектора для каждой камеры, назовите их A1, A2, B1, B2. У вас есть все 4 из них относительно некоторого происхождения O. Вам нужно правило:

A relative to B = (A relative to O)- (B relative to O)

Примените это правило к своим двум векторам, и вы получите их позу относительно друг друга.

Некоторую документацию по преобразованию матрицы вращения в углы Эйлера можно найти Rodrigues. Вот я нашел некоторый код Matlab/octave.

person Hammer    schedule 05.09.2012
comment
Большое спасибо за ваш ответ! Не могли бы вы немного объяснить, как преобразовать матрицу вращения в 2 трехмерных вектора? Я предполагаю, что вы имеете в виду представление оси-угла матрицы вращения. У меня есть матрица вращения 3x3 R1 и вектор 3D-перемещения T1 для первой камеры и R2, T2 для второй камеры. - person Karmar; 05.09.2012
comment
Вы конвертируете матрицу вращения в 1 3D-вектор, а вектор перевода - это другой 3D-вектор, и да, я имею в виду представление оси-угла. - person Hammer; 05.09.2012
comment
Спасибо. Еще один вопрос, пожалуйста. Не могли бы вы дать ссылку или исходный код на C для преобразования матрицы вращения в ось и угол? - person Karmar; 06.09.2012
comment
Да, я использую OpenCV, функция именно то, что мне нужно. Большое спасибо, ваши ответы мне очень помогают! - person Karmar; 06.09.2012
comment
Хорошо, отличный способ сказать спасибо на этом сайте - принять ответ (нажать галочку) - person Hammer; 06.09.2012

Вот более простое решение, так как у вас уже есть матрицы вращения 3x3 R1 и R2 и векторы переноса 3x1 t1 и t2.

Они выражают движение от системы мировых координат к каждой камере, т. е. являются такими матрицами, что если p — точка, выраженная в системе мировых координат, то та же самая точка, выраженная, скажем, в кадре камеры 1, равна p1 = R1 * p + т1.

Тогда движение от камеры 1 к камере 2 является просто композицией (а) движения ОТ камеры 1 ДО мирового кадра и (б) движения ОТ мирового кадра ДО камеры 2. Вы можете легко вычислить эту композицию следующим образом:

  1. Сформируйте матрицы ротационного перемещения 4x4 Qw1 = [R1 t1] и Qw2 = [R2 t2], обе с 4-й строкой, равной [0 0 0 1]. Эти матрицы полностью выражают ротоперенос ОТ системы координат мира К камере 1 и 2 соответственно.
  2. Движение ОТ камеры 1 В мировую систему координат просто Q1w = inv(Qw1). Здесь inv() — алгебраическая обратная матрица, то есть такая, что inv(X) * X = X * inv(X) = IdentityMatrix для каждой невырожденной матрицы X.
  3. Ротоперевод с камеры 1 на 2 будет тогда Q12 = Q1w * Qw2, и наоборот, с камеры 2 на 1 будет Q21 = Q2w * Qw1 = inv(Qw2) * Qw1.

Если у вас есть Q12, вы можете извлечь из него части вращения и перемещения, если хотите, соответственно из его верхней подматрицы 3x3 и правого подстолбца 3x1.

person Francesco Callari    schedule 06.09.2012
comment
Спасибо за отзыв и подробное объяснение! - person Karmar; 06.09.2012

Вот очень простое и легкое решение. Я предполагаю, что ваша 1-я камера имеет R1 и T1, 2-я камера имеет матрицы вращения R2 и T2 и вектор перемещения в соответствии с общей точкой отсчета.

Перевод с 1-й на 2-ю камеру, вращение с 1-й на 2-ю камеру можно рассчитать с помощью двухстрочного кода Matlab;

R=R2*R1';
T=T2-R*T1;

но обратите внимание, это верно, если у вас есть только один R и T для каждой камеры. (Я имею в виду повороты и перевод для одной уникальной ссылки на мир). если у вас есть больше опорных перемещений и поворотов, вы должны вычислить R, T для каждой отдельной опорной точки. Вероятно, они будут очень близки друг к другу. Но они могут немного отличаться. Затем вы можете вычислить среднее значение вектора перевода и преобразовать всю найденную матрицу вращения в вектор вращения, вычислить его среднее значение, а затем преобразовать их в матрицу вращения.

person M. Balcilar    schedule 15.07.2018