Allineare nuvole di punti tramite 3 punti di correlazione?
Domanda
Diciamo che ho 3 nuvole di punti: primo, che ha 3 punti {x1, y1, z1}, {x2, y2, z2}, {x3, Y3, Z3} e la seconda nuvola di punti che ha stessi punti come {XX1 , YY1, ZZ1}, {xx2, yy2, zz2}, {xx3, yy3, ZZ3} ... suppongo di allineare secondo nuvola di punti per prima devo moltiplicare la seconda di uno punti da T [3x3matrix].
1) Allora, come faccio a trovare questa matrice di trasformazione (T)? Ho provato a fare le equazioni a mano, ma non sono riuscito a risolverli. C'è una soluzione da qualche parte, perché io sono abbastanza sicuro che io non sono il primo a inciampare nel problema.
2) Suppongo che matrice potrebbe includere l'inclinazione e tranciatura. C'è un modo per trovare matrice con solo 7 gradi di libertà (3translation, 3rotation, 1scale)?
Soluzione
La matrice T1 trasformazione che prende i versori {1, 0, 0}, {0, 1, 0}, e {0, 0, 1} per {x1, y1, z1}, {x2, y2, z2}, {x3, y3, Z3} è semplicemente
| x1 x2 x3 | T1 = | y1 y2 y3 | | z1 z2 z3 |
E similarmente T2 trasformazione che prende quei 3 vettori unitari per la seconda serie di punti è
| xx1 xx2 xx3 | T2 = | yy1 yy1 yy3 | | zz1 zz2 zz3 |
Pertanto, la matrice che prende i primi tre punti per i secondi tre punti è data da T2 * T1 -1 . Se T1 non è singolare, allora questa trasformazione è univocamente determinato, quindi non ha gradi di libertà. Se T1 è una matrice singolare, allora ci potrebbero essere soluzioni, o ci potrebbero essere infinite soluzioni.
Quando si dice che si desidera 7 gradi di libertà, questo è un po 'un uso improprio della terminologia. Nel caso generale, la matrice è composta da 3 gradi di libertà rotazionali, 3 gradi proporzioni e 3 gradi di taglio, per un totale di 9. Si può capire questi parametri eseguendo una fattorizzazione QR . La matrice Q dà i parametri di rotazione, e la matrice R dà i parametri di scalatura (lungo la diagonale) ed i parametri di taglio (sopra la diagonale).
Altri suggerimenti
Approccio di Adam Rosenfield è corretta. Ma la soluzione, come T2 * Inv (T1) è sbagliato. Poiché in Matrix moltiplicazione A * B = B * A: Quindi risultato è Inv (T1) * T2
Il trasformazione a sette parametri che si sta parlando viene indicato come una trasformazione conforme 3d, o talvolta una somiglianza trasformazione 3d dato che i due nuvole sono simili. Se le due forme sono identici, soluzione Adam Rosenfields è buona. Dove ci sono piccole differenze, e si desidera ottenere un migliore adattamento, la soluzione più comunemente usato è una href="http://en.wikipedia.org/wiki/Helmert_transformation" rel="nofollow trasformazione di Helmert che utilizza un metodo di minimi quadrati per minimizzare i residui. La Wikipedia e Google roba su questo non sembra molto a colpo d'occhio. Il mio riferimento su questo è Ghilani & Wolf di calcoli di regolazione , P345. Questo è anche un grande libro su matrice di matematica applicata ai problemi spaziali e una buona aggiunta alla libreria.
modifica: la versione 9 parametro di Adamo di questa trasformazione è indicato come un trasformazione affine
Ecco un esempio di calcolare minimi quadrati stime dei parametri di una trasformazione affine 2D R.