Domanda

Sto facendo la calibrazione della fotocamera da Tsai Algo. Ho ottenuto una matrice intrinse ed estrinseca, ma come posso ricostruire le coordinate 3D da quell'informazione?

enter image description here

1) Posso usare l'eliminazione gaussiana per trovare i punti x, y, z, w e poi saranno x/w, y/w, z/w come sistema omogeneo.

2) Posso usare ilDocumentazione di OpenCV approccio:

enter image description here

come so u, v, R , t , Posso calcolare X,Y,Z.

Tuttavia, entrambi i metodi finiscono in risultati diversi che non sono corretti.

Cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Se hai parametri estrinseci, allora hai tutto. Ciò significa che puoi avere omografia dall'Extrinsics (chiamata anche Camerapose). La posa è una matrice 3x4, l'omografia è una matrice 3x3, H definito come

                   H = K*[r1, r2, t],       //eqn 8.1, Hartley and Zisserman

insieme a K essendo la matrice intrinseca della fotocamera, R1 e R2 essendo le prime due colonne della matrice di rotazione, R; t è il vettore di traduzione.

Quindi normalizza dividendo tutto T3.

Cosa succede alla colonna R3, non lo usiamo? No, perché è ridondante in quanto è il prodotto incrociato delle 2 prime colonne di posa.

Ora che hai l'omografia, proietta i punti. I tuoi punti 2D sono x, y. Aggiungili az = 1, quindi ora sono 3d. Proiettali come segue:

        p          = [x y 1];
        projection = H * p;                   //project
        projnorm   = projection / p(z);      //normalize

Spero che sia di aiuto.

Altri suggerimenti

Come ben indicato nei commenti sopra, proiettare le coordinate di immagini 2D nello "spazio della telecamera" 3D richiede intrinsecamente inventare le coordinate Z, poiché queste informazioni sono totalmente perse nell'immagine. Una soluzione è assegnare un valore fittizio (z = 1) a ciascuno dei punti di spazio dell'immagine 2D prima della proiezione come risposta da jav_rock.

p          = [x y 1];
projection = H * p;                   //project
projnorm   = projection / p(z);      //normalize

Un'alternativa interessante a questa soluzione fittizia è quella di formare un modello per prevedere la profondità di ciascun punto prima della riproiezione nello spazio della fotocamera 3D. Ho provato questo metodo e ho avuto un alto grado di successo usando un Pytorch CNN addestrato su scatole di delimitazione 3D dal set di dati Kitti. Sarebbe felice di fornire codice, ma sarebbe un po 'lungo per la pubblicazione qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top