Предположим, у меня хорошие соответствия между двумя изображениями и попытка восстановить движение камеры между ними. я могу использовать OpenCV 3 в новые возможности для этого, например:Оценка положения камеры: как интерпретировать матрицы вращения и перевода?
Mat E = findEssentialMat(imgpts1, imgpts2, focal, principalPoint, RANSAC, 0.999, 1, mask);
int inliers = recoverPose(E, imgpts1, imgpts2, R, t, focal, principalPoint, mask);
Mat mtxR, mtxQ;
Mat Qx, Qy, Qz;
Vec3d angles = RQDecomp3x3(R, mtxR, mtxQ, Qx, Qy, Qz);
cout << "Translation: " << t.t() << endl;
cout << "Euler angles [x y z] in degrees: " << angles.t() << endl;
Теперь у меня есть проблемы оборачивать вокруг моей головы, что R
и t
на самом деле означает. Являются ли они преобразованием, необходимым для сопоставления координат от места камеры 1 до места камеры два, как в p_2 = R * p_1 + t
?
Рассмотрим пример с нуля истины вручную меченые соответствиями
выход я получаю это:
Translation: [-0.9661243151855488, -0.04921320381132761, 0.253341406362796]
Euler angles [x y z] in degrees: [9.780449804801876, 46.49315494782735, 15.66510133665445]
Я стараюсь соответствовать этому к тому, что я вижу в образе и придумайте интерпретацию, что [-0.96,-0.04,0.25]
говорит мне, что я переместился вправо, поскольку координаты двинулись вдоль отрицательной оси х, но это также скажет мне, что я отошел дальше, так как координаты ved вдоль положительной z-оси.
Я также повернул камеру вокруг оси y (влево, что, я думаю, будет вращаться против часовой стрелки против отрицательной оси y, потому что в OpenCV ось y направлена вниз, не делает ли она ?)
Вопрос: Является ли моя интерпретация правильной и если нет, то какая она правильная?
Но положительный z-компонент скажет мне, что камера2 движется к машине, но это не соответствует интерпретации, что камера2 является левым изображением. Что мне не хватает? – oarfish
Перечитайте то, что я написал: «t - это вектор, внедренный в камеру1, с кончиком на камеру2». Положительная Z-составляющая t означает только, что центр камеры2 находится перед плоскостью XY камеры1, то есть перед центром камеры1. Это совершенно правдоподобно, учитывая ваши образы: представьте себе, чтобы расширить плоскость изображения в представлении, смотрящем на переднюю часть автомобиля, а затем решить, на какой стороне этого самолета должна быть камера с боковым видом. Кроме того, пожалуйста, поддержите/примите ответ, если найдете его полезным. –
Если я это сделаю, мне кажется, что центр камеры 2 находится за * камерой 1, поэтому z должен быть отрицательным. Но это не очень понятно из-за поворота. – oarfish