Inge Söderkvist (2009) hat eine schöne Zusammenfassung der Lösung des Problems der starren Körperbewegung durch Singular Value Decomposition (SVD).
{x1,…,xn}{y1,…,yn}Rdxi
∑i=1n||Rxi+d−yi||2
xi,yiR3×3det(R)=1
Der erste Schritt besteht darin, die jeweiligen Mittelwerte von den Punkten , was den Effekt hat, dass die unbekannte Übersetzung (vorerst) "eliminiert" wird . Das heißt, das Problem wird:x¯¯¯,y¯¯¯xi,yid
minR∈SO(3)||RA−B||F
Dabei ist und . Hier bezeichnet die spezielle orthogonale Gruppe von Rotationsmatrizen in 3D, aus der wir auswählen dürfen , und die Matrixnorm bezeichnet hier die Frobenius-Norm , dh die Quadratwurzel der Summe der Quadrate von Matrixeinträgen (wie ein Euklidischer Norm, aber auf Matrixeinträgen).A=[x1−x¯¯¯,…,xn−x¯¯¯]B=[y1−y¯¯¯,…,yn−y¯¯¯]SO(3)RF
Jetzt sind beide Matrizen. Die obige Minimierung ist ein orthogonales Procrustes-Problem, das nur Rotationsmatrizen zulässt. Die Lösung ergibt sich aus der Singularwertzerlegung der "Kovarianz" -Matrix :A,B3×nRC=BAT
C=USVT
Dabei sind orthogonale Matrizen und die diagonale Matrix der Singularwerte . Numerische lineare Algebra-Pakete wie Matlab und Octave berechnen die SVD für Sie.U,VS=diag(σ1,σ2,σ3)σ1≥σ2≥σ3≥0
Sobald wir die SVD haben, definieren Sie wobei das Vorzeichen im mittleren Faktor so gewählt wird, dass . Normalerweise hat eine reale Anwendung , und daher wäre das gewählte Vorzeichen positiv. Wenn nicht, bedeutet dies, dass die beste orthogonale (abstandserhaltende) Anpassung an die neuen Punkte eine Reflexion beinhaltet, und es wird vorgeschlagen, die Daten auf Fehler zu überprüfen.R=Udiag(1,1,±1)VTdet(R)=1det(UVT)=1
Schließlich definieren wir die Übersetzung . Erledigt!d=y¯¯¯−Rx¯¯¯
Die Variante der orthogonalen Procrustes-Probleme, bei denen nur Rotationen zulässig sind, ist auch Gegenstand eines anderen Wikipedia-Artikels zum Kabsch-Algorithmus . Die Notation in den Wikipedia-Artikeln unterscheidet sich von unserer durch die Multiplikation mit rechts und nicht (wie hier) links.R