3

Supposons que j'ai les coordonnées X, Y, Z et l'orientation Rx, Ry, Rz d'un objet par rapport à une caméra. En outre, j'ai les coordonnées U, V, W et l'orientation Ru, Rv, Rw de cette caméra dans le monde.3D Coordonnées de la caméra aux coordonnées du monde (changement de base?)

Comment transformer la position (position et rotation) de l'objet en sa position dans le monde?

Cela ressemble à un changement de base pour moi, mais je n'ai pas encore trouvé de source claire.

Répondre

3

En fait vous avez deux bases: l'une relative à la caméra, l'autre absolue (le monde). Donc, vous voulez essentiellement transformer vos données relatives en données absolues.

Lieu

Ceci est le plus facile. Vous devez traduire la position (X, Y, Z) par le vecteur t (U, V, W). Donc, toutes vos positions en absolu sont (Ax, Ay, Az) = (X, Y, Z) + t = (X + U, Y + V, Z + W).

Orientation

C'est un peu plus difficile. Vous devez trouver la matrice de rotation qui fait tourner votre caméra de (je suppose) (0,0,1) à (Ru, Rv, Rw). Vous devriez regarder Basic Rotation Matrices afin de décomposer les 2 rotations qui prennent (0,0,1) à (Ru, Rv, Rw) (une selon l'axe X, une selon l'axe Z par exemple). Je vous conseille de dessiner la base absolue et le vecteur (Ru, Rv, Rw) sur une feuille de papier, c'est le moyen le plus simple d'obtenir le bon résultat. Vous avez donc 2 rotations de base matrices r1 et r2. La matrice de rotation résultante r = r1 * r2 (ou r2 * r1, peu importe). Donc l'orientation absolue de votre objet est (ARx, ARy, ARz) = r * (Rx, Ry, Rz).

Espérons que cela aide!

2

J'ai trouvé ce document qui est assez clair sur le sujet. http://www.cse.psu.edu/~rcollins/CSE486/lecture12.pdf

Il traite, entre autres, l'opération inverse, à savoir, allant du monde à la caméra coordonnées 3D. Où, Pc est un point dans le monde de la caméra, Pw est un point dans le monde normal, R est une matrice de rotation et C est la traduction de la caméra.

Malheureusement, il est plutôt difficile d'ajouter des formules de latex, donc je vais donner du code matlab à la place.

function lecture12_collins() 
% for plotting simplicity I choose my points on plane z=0 in this example 
% Point in the world 
Pw = [2 2.5 0 1]'; 
% rotation 
th = pi/3; 
% translation 
c = [1 2.5 0]'; 
% obtain world to camera coordinate matrix 
T = GetT(th, c); 
% calculate the camera coordinate 
Pc = T*Pw 
% get the camera to world coordinate 
T_ = GetT_(th, c) 
% Alternatively you could use the inverse matrix 
% T_ = inv(R*C) 

% calculate the worldcoordinate 
Pw_ = T_*Pc 

assert (all(eq(Pw_ ,Pw))) 


function T = GetT(th, c) 
% I have assumed rotation around the z axis only here. 
R = [cos(th) -sin(th) 0 0 
    sin(th) cos(th) 0 0 
      0  0 1 0 
      0  0 0 1]; 
C = [1 0 0 -c(1) 
    0 1 0 -c(2) 
    0 0 1 -c(3) 
    0 0 0 1]; 
T = R*C; 

function T_ = GetT_(th, c) 
% negate the angle 
R_ = [cos(-th) -sin(-th) 0 0 
    sin(-th) cos(-th) 0 0 
      0  0 1 0 
      0  0 0 1]; 
% negate the translation 
C_ = [1 0 0 c(1) 
    0 1 0 c(2) 
    0 0 1 c(3) 
    0 0 0 1]; 
T_ = C_*R_ 

Jusqu'à présent, c'est sur l'emplacement seulement. La rotation que j'ai résolu en utilisant les connaissances supplémentaires que j'avais de la rotation. Je sais que ma caméra est perpendiculaire à l'objet et que sa rotation est seulement autour de l'axe z. Je peux juste ajouter la rotation de la caméra et de l'objet.

Questions connexes