Оценка позы камеры (OpenCV PnP)

Я пытаюсь получить глобальную оценку позы по изображению четырех опорных точек с известными глобальными позициями, используя мою веб-камеру.

Я проверил много вопросов об обмене стека и несколько статей, и я не могу найти правильное решение. Номера позиций, которые я получаю, повторяются, но никоим образом не линейно пропорциональны движению камеры. К вашему сведению, я использую C ++ OpenCV 2.1.

По этой ссылке изображено мои системы координат и данные испытаний используются ниже.

% Input to solvePnP():
imagePoints =     [ 481, 831; % [x, y] format
                    520, 504;
                   1114, 828;
                   1106, 507]
objectPoints = [0.11, 1.15, 0; % [x, y, z] format
                0.11, 1.37, 0; 
                0.40, 1.15, 0;
                0.40, 1.37, 0]

% camera intrinsics for Logitech C910
cameraMat = [1913.71011, 0.00000,    1311.03556;
             0.00000,    1909.60756, 953.81594;
             0.00000,    0.00000,    1.00000]
distCoeffs = [0, 0, 0, 0, 0]

% output of solvePnP():
tVec = [-0.3515;
         0.8928; 
         0.1997]

rVec = [2.5279;
       -0.09793;
        0.2050]
% using Rodrigues to convert back to rotation matrix:

rMat = [0.9853, -0.1159,  0.1248;
       -0.0242, -0.8206, -0.5708;
        0.1686,  0.5594, -0.8114]

До сих пор,кто-нибудь может увидеть что-то не так с этими числами? Я был бы признателен, если бы кто-нибудь зарегистрировал их, например, в MatLAB (приведенный выше код удобен для m-файлов).

С этого момента я не уверен, как получить глобальную позу от rMat и tVec. Из того, что я прочитал вэтот вопросЧтобы получить позу от rMat и tVec просто:

position = transpose(rMat) * tVec   % matrix multiplication

Однако из других источников я подозреваю, что это не так просто.

Что мне нужно сделать, чтобы получить положение камеры в координатах реального мира? Поскольку я не уверен, является ли это проблемой реализации (хотя, скорее всего, проблемой теории), я бы хотел, чтобы кто-то, кто успешно использовал функцию solvePnP в OpenCV, ответил на этот вопрос, хотя любые идеи тоже приветствуются!

Большое спасибо за уделенное время.

Ответы на вопрос(3)

Ваш ответ на вопрос