Si supponga di avere una buona corrispondenza tra due immagini e tentare di recuperare il movimento della telecamera tra di esse. posso usare OpenCV 3 di nuove caratteristiche, come questo:Stima di posa della camera: come interpreto le matrici di rotazione e di traduzione?
Mat E = findEssentialMat(imgpts1, imgpts2, focal, principalPoint, RANSAC, 0.999, 1, mask);
int inliers = recoverPose(E, imgpts1, imgpts2, R, t, focal, principalPoint, mask);
Mat mtxR, mtxQ;
Mat Qx, Qy, Qz;
Vec3d angles = RQDecomp3x3(R, mtxR, mtxQ, Qx, Qy, Qz);
cout << "Translation: " << t.t() << endl;
cout << "Euler angles [x y z] in degrees: " << angles.t() << endl;
Ora, ho difficoltà confezionamento mia testa intorno a ciò che R
e t
realmente significano. Sono la trasformazione necessaria per mappare le coordinate dallo spazio della fotocamera 1 allo spazio della fotocamera due, come in p_2 = R * p_1 + t
?
Considerate questo esempio, con la terra-verità corrispondenze etichettati manualmente
L'output che ottengo è questo:
Translation: [-0.9661243151855488, -0.04921320381132761, 0.253341406362796]
Euler angles [x y z] in degrees: [9.780449804801876, 46.49315494782735, 15.66510133665445]
cerco di abbinare questo a quello che vedi nell'immagine e mi viene in mente l'interpretazione, che mi dice, mi sono spostato a destra, poiché le coordinate si sono spostate lungo l'asse x negativo, ma mi avrebbe anche detto che mi sono spostato più lontano, come le coordinate hanno lungo l'asse z positivo.
Ho anche ruotato la fotocamera attorno all'asse y (a sinistra, che penso sarebbe una rotazione in senso antiorario attorno all'asse y negativo perché in OpenCV, l'asse y punta verso il basso, non lo fa ?)
Domanda: La mia interpretazione è corretta e se no, qual è quella corretta?
Ma la componente z positiva mi direbbe che la camera2 si è spostata verso la macchina, ma ciò non si adatta all'interpretazione che la camera2 è l'immagine a sinistra. Cosa mi manca? – oarfish
Rileggi ciò che ho scritto: "t è il vettore radicato su camera1, con la punta su camera2". Una componente Z positiva di t significa solo che il centro di camera2 è davanti al piano XY di camera1, cioè davanti al centro di camera1. Questo è perfettamente plausibile date le vostre immagini: immaginate di estendere il piano dell'immagine nella vista guardando la parte anteriore della macchina, e quindi decidere su quale lato di quel piano dovrebbe essere la telecamera della vista laterale. Inoltre, si prega di votare/accettare la risposta se lo trovi utile. –
Se lo faccio, mi sembra che il centro della telecamera 2 sia * dietro * alla telecamera 1, quindi z dovrebbe essere negativo. Ma non è molto chiaro a causa della rotazione. – oarfish