Я пытаюсь восстановить 3D-координаты из 2D-пиксельных координат на изображении с камеры, используя побочное условие (в MatLab). У меня есть внешние и внутренние параметры камеры.
Используя однородное преобразование, я могу преобразовать 3D-координаты из исходной мировой системы координат в мою систему координат камеры. Итак, у меня есть внешние параметры в моей матрице преобразования R_world_to_Camera:
R_world_to_Camera = [ r_11, r_12, r_13, t1;
r_21, r_22, r_23, t2;
r_31, r_32, r_33, t3;
0, 0, 0, 1];
Для внутренних параметров я использовал Caltech "Camera Calibration Toolbox для MatLab" и получил следующие параметры:
Calibration results (with uncertainties):
Focal Length: fc = [ 1017.21523 1012.54901 ] ± [ NaN NaN ]
Principal point: cc = [ 319.50000 239.50000 ] ± [ NaN NaN ]
Skew: alpha_c = [ 0.00000 ] ± [ NaN ] => angle of pixel axes = 90.00000 ± NaN degrees
Distortion: kc = [ 0.00000 0.00000 0.00000 0.00000 0.00000 ] ± [ NaN NaN NaN NaN NaN ]
Pixel error: err = [ 0.11596 0.14469 ]
Note: The numerical errors are approximately three times the standard deviations (for reference).
Итак, я получаю матрицу калибровки камеры K (3x3).
K = [1.017215234570303e+03, 0, 3.195000000000000e+02;
0, 1.012549014668498e+03,2.395000000000000e+02;
0, 0, 1.0000];
и используя это, я могу вычислить 3D -> 2D - Projection-Matrix P (3x4) с помощью:
P = K * [eye(3), zeros(3,1)];
При преобразовании точки в мировые координаты [X, Y, Z] _World я сначала преобразовываю ее в координаты камеры, а затем проецирую в 2D:
% Transformation
P_world = [X; Y; Z; 1]; % homogenous coordinates in World coordinate System
P_camera = R_world_to_Camera * [X; Y; Z; 1];
% Projection
P_pixels = P * camera;
P_pixels = P_pixels / P_pixels(3); % normalize coordinates
Итак, мой вопрос теперь в том, как отменить эти шаги? В качестве побочного условия я хочу установить известную Z-координату (ноль в мировых координатах). Я попробовал предложенное решение здесь, в Stackoverflow, но почему-то я получаю неправильные координаты. Любая идея? Любая помощь очень ценится !!