Domanda

Dati due nuvole di punti 3D consecutive 1 e 2 (non l'intera nuvola, diciamo 100 punti selezionati dalla nuvola con GoodFeatureStomatch di OpenCV), ottenuti da una mappa di profondità di Kinect, voglio calcolare l'omografia della fotocamera da 1 a 2. Comprendo che questo è un proiettivo trasformarsi, ed è già stato fatto da molte persone: Qui (diapositiva 12), Qui (diapositiva 30) e Qui in quello che sembra essere la carta classica. Il mio problema è che mentre sono un programmatore competente, non ho le abilità matematiche o trig per trasformare uno di questi metodi in codice. Poiché questo non è un problema facile, offro una grande generosità per il codice che risolve il seguente problema:

La fotocamera è all'origine, guardando nella direzione Z, al pentaedro irregolare [A, B, C, D, E, F]:camera position 1

La fotocamera si sposta da -90 mm a sinistra (x), +60 mm su (y), +50 mm in avanti (z) e ruota di 5 ° in basso, 10 ° a destra e -3 ° in senso antiorario:camera position 2

Ruotando l'intera scena in modo che la fotocamera sia tornata nella sua posizione originale mi consenta di determinare le posizioni dei vertici a 2:enter image description here

I file 3ds max utilizzati per prepararlo sono max 1, max 2 e max 3

Ecco le posizioni dei vertici prima e dopo, l'intrinseca, ecc.:vertices and intrinsics

Si noti che i vertici di Camera2 non sono accurati al 100%, c'è un po 'di rumore deliberato.

Ecco i numeri in un file Excel

Il codice di cui ho bisogno, che deve essere facilmente traducibile in VB.NET o C#, usando EMGUCV e OpenCV ove necessario, prende i 2 set di vertici e l'intrinseca e produce questo output:

Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y, 10 X, -3 Z.
The homography matrix to translate points in A to B is:
a1, a2, a3
b1, b2, b3
c1, c2, c3

Non so se l'omografia è 3x3 o 3x4 per le coordinate omogenee, ma deve permettermi di tradurre i vertici da 1 a 2.

Inoltre non conosco i valori A1, A2, ecc.; Questo è quello che devi trovare> ;-)

L'offerta da 500 taglie "sostituisce" la generosità che ho offerto questa domanda molto simile, Ho aggiunto un commento che indica questa domanda.

EDIT2: Mi chiedo se il modo in cui faccio questa domanda è fuorviante. Mi sembra che il problema sia più adatto a cloud point-cloud rispetto alla geometria della fotocamera (se sai come tradurre e ruotare da A a B, conosci la trasformazione della fotocamera e viceversa). In tal caso, forse la soluzione potrebbe essere ottenuta con l'algoritmo di Kabsch o qualcosa di simile

Nessuna soluzione corretta

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