2013-04-11 22 views
7

Ho calibrato la mia fotocamera e trovato i parametri intrinseci (K). Inoltre ho calcolato la Matrice Fondamentale (F).Modo corretto per estrarre la traduzione da Essential Matrix tramite SVD

Ora E = K_T * F * K. Fin qui tutto bene.

Ora passiamo la matrice essenziale (E) al SVD di utilizzare i valori di decomposizione (U, W, V) per estrarre la rotazione e traslazione:

essentialMatrix = K.Transpose().Mul(fund).Mul(K); 
CvInvoke.cvSVD(essentialMatrix, wMatrix, uMatrix, vMatrix, Emgu.CV.CvEnum.SVD_TYPE.CV_SVD_DEFAULT); 

** Domanda) A questo punto, sono stati proposti due metodi, e questo mi ha confuso che uno davvero dare il giusto risposta- specificatamente per la conversione:

al primo metodo enter link description here l'autore suggerisce per calcolare la R, T come segue:

enter image description here

Ma in secondo luogo il metodo [http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf] l'autore fornisce un'altra formula per T che è + U, U come illustrato di seguito:

enter image description here

sto danno attuazione alla presente su C# .NET utilizzando le librerie OpenCV. Qualcuno sa quale Formula di traduzione è quella giusta?

+1

Il collegamento per il secondo metodo è morto. Il documento è stato spostato su: http://igt.ip.uca.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf –

risposta

4

la prima soluzione mostra la rappresentazione matrice del prodotto incrociato con il vettore t (quindi prima soluzione = [t] x), mentre la seconda soluzione mostra solo il vettore di traduzione t (https://en.wikipedia.org/wiki/Essential_matrix).

La definizione di [t] x è:

enter image description here

(da http://gandalf-library.sourceforge.net/tutorial/report/img148.png)

+0

In Prima soluzione, T1, T2 sono matrici nonZero 3X3 ma in realtà come traduzione t , Ho bisogno della matrice 3X1. come devo estrarre 3X1 da una matrice nonZero 3X3 senza perdere informazioni? –

+0

se estrai la traduzione con SVD, il vettore di traduzione è 'SVD (E) .u.col (2)', come descritto nel secondo metodo del tuo post. come estrai la tua matrice di traduzione 3x3? puoi anche guardare http://stackoverflow.com/questions/16639106/camera-motion-from-corresponding-images per ulteriori informazioni – 3x14159265

+0

Ho usato il 1o metodo sopra menzionato per estrarre T1, T2 che sono 3X3. Sto facendo qualcosa di sbagliato? Nel collegamento fornito, ancora una volta il tizio è saltato dal calcolo di t1, t2 a t senza menzionare la conversione/relazione tra t1, t2 e t come lo riporto di seguito: t1 = decomp.u.col (2); // u3 t2 = -decomp.u.col (2); // u3 new_pos = old_pos + -R.t() * t; –