Reconstruire en 3D de Coordonnées dans un Système de Coordonnées de la Caméra à partir de 2D - Pixels avec condition côté
Je suis en train de reconstruire en 3D de Coordonnées de la 2D Pixel de Coordonnées dans une Image de la Caméra à l'aide d'une condition côté (en MatLab). J'ai extrinsèques et intrinsèques des paramètres de la caméra.
Homogène à l'aide de la transformation que je peux transformer en 3D-des Coordonnées d'un premier Système de Coordonnées Monde à mon Appareil photo Corrdinate Système. Donc, ici, j'ai mes paramètres extrinsèques dans ma Matrice de Transformation 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];
Pour les paramètres intrinsèques j'ai utilisé de Caltech "etalonnage de l'Appareil photo Toolbox pour MatLab", et a obtenu ces paramètres:
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).
Si je puis obtenir l'Appareil de Calibrage de la Matrice K (3x3)
K = [1.017215234570303e+03, 0, 3.195000000000000e+02;
0, 1.012549014668498e+03,2.395000000000000e+02;
0, 0, 1.0000];
et en utilisant ce que je peux calculer la 3D -> 2D - Projection de la Matrice P (3x4) avec:
P = K * [eye(3), zeros(3,1)];
Lors de la conversion d'un Point de Coordonnées [X, Y, Z]_World je le transforme d'abord à la Caméra Coordonnées et ensuite le projet à 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
Donc ma question maintenant est de savoir comment inverser ces étapes? Comme condition côté je veux mettre la coordonnée Z à être connu (zéro dans le monde des coordonnées). J'ai essayé la solution proposée ici sur Stackoverflow, mais de toute façon j'ai mal coordonnées. Une idée? Toute aide est la beaucoup apprécié!
OriginalL'auteur EliteTUM | 2012-07-04
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas inverser l'étape en général: la profondeur et l'ampleur de l'information est perdue lorsque les points 3D sont projetées sur une image 2D. Toutefois, si, comme vous l'indiquez, tous vos points 3D sont sur le plan Z=0, alors au retour de leurs projections est trivial: calcul de l'inverse Ki = K^-1 de l'appareil photo de la matrice, et de l'appliquer à l'image des points en coordonnées homogènes.
P_camera = Ki * [u, v, 1]'
où [u, v] sont, à l'image des coordonnées, et l'apostrophe désigne la transposition.
Les points 3D vous voulez allonger sur les rayons de la caméra au centre de la P_camera. Exprimer à la fois dans les coordonnées du monde:
P_world = [R|t]_camera_to_world * [P_camera, 1]'
C_world = [R|t]_camera_to_world * [0, 0, 0, 1]'
où [R|t] est le 4x4 transformation des coordonnées.
Maintenant, l'ensemble des points sur chaque rayon est exprimé en
P = C_world + lambda * P_world;
où lambda est un scalaire (la coordonnée le long de la raie). Vous pouvez maintenant imposer la condition que P(3) = 0 pour trouver la valeur de lambda que des lieux de vos points sur le plan Z = 0.
Et comment est le Z-buffer rempli en premier lieu, s'il n'a pas de 3d coords? 🙂
Le Z-buffer est normalement rempli en cas de pixellisation les polygones 3d à l'écran.
Merci Franco! C'est plus ou moins l'approche que j'ai trouvé dans un Master-Thèse. La Thèse de Maîtrise, j'ai trouvé intègre directement la condition Z = 0. J'ai ajouté le "testcode" j'ai écrit ci-dessous, peut-être que cela aide 🙂
OriginalL'auteur Francesco Callari
grâce à peu de vin rouge et de la lecture approfondie, j'ai trouvé la réponse dans un (allemand) mémoire de Master 🙂
Mon "testcode" est comme suit:
c'est là, dans les commentaires dans le milieu du code. Ilker Savas, "Entwicklung eines Systèmes zur visuellen Positionsbestimmung von Interaktionspartnern"
OriginalL'auteur EliteTUM