/ / Passage des coordonnées centrées sur la caméra aux coordonnées centrées sur les motifs - matlab, vision par ordinateur, calibrage par caméra

Passer des coordonnées centrées sur la caméra aux coordonnées centrées sur le motif - matlab, vision par ordinateur, calibration par caméra

J'ai actuellement un modèle d'alignement de caméra défini dans l'appareil photo en tant que coordonnées d'origine:

http://i.imgur.com/UnSCAvG.png

et, comme la caméra était immobile, j'essaie de convertir le système en modèle à modèle fixe

http://i.imgur.com/OKunxwA.png

Matlab a la gentillesse de me le montrer mais hélasLà, je n'ai trouvé aucun moyen d'extraire les données à moins que ce ne soit sur un modèle à caméra fixe. Il devrait être simple d’appliquer l’inverse de la translation et de la rotation pour changer de système, mais malheureusement cela ne fonctionne pas et je ne vois pas pourquoi.

oldpoint = [0 0 0 1]";

translation = ([1 0  0 18.1043121043; 0 1 0 31.092351038; 0 0 1 -80.0610295707; 0 0 0 1]);
rotation = [eul2rotm([0.0957937074  -0.0234017529   -0.037084526]) zeros(3,1); 0 0 0 1];


newpoint = translation * point;

newpoint = rotation * newpoint;

J’ai essayé différentes solutions, mais jusqu’à présent, aucune n’est approximative pour les coordonnées que j’essaie d’obtenir.

Réponses:

0 pour la réponse № 1

Deux choses n'allaient pas, matlab n'utilisait pas les angles euler et Z devait être inversé.

clc;
clear;
%%
oldpoint = [0 0 0 1]";

newpoints = zeros(13,4);

i = 1;
while( i<= length(translations) )
trans = translations(i,:);
rota = rotations(i,:);

display(trans);
display(rota);

translation = ([1 0  0 -trans(1); 0 1 0 -trans(2); 0 0 1 trans(3); 0 0 0 1]);
rotation = [rotationVectorToMatrix([-rota(1) -rota(2) -rota(3)]) zeros(3,1); 0 0 0 1];

newpoint = translation  * oldpoint;
newpoint = rotation * newpoint;

newpoints(i,:) = newpoint;
i = i + 1;
end