Ich bin mir nicht sicher, wie ich dieses Problem klar erklären soll. Bitte nehmen Sie Kontakt mit mir auf. Ich habe eine Basis von 3 orthonormalen Einheitsvektoren und eine Position, eine Standard-4x4-Transformationsmatrix in der Computergrafik.
Außerdem habe ich mehrere Punkte (Offsets) in diesem Raum, die ich in den Weltraum verwandle. Die Punkte werden dann leicht gestört, und jetzt möchte ich die neue Basis finden, die der Darstellung der gestörten Punkte am nächsten kommt.
Es ist nicht genau so, als würde man Hauptkomponenten finden, weil ich möchte, dass die ursprünglichen Offsets berücksichtigt werden. Wenn das Sinn macht. Wie Federn von jedem neuen Punkt zu ihren jeweiligen Startpositionen. Ich denke, die Antwort liegt in der Lösung eines Problems der kleinsten Quadrate, aber ich habe es mir angesehen und jetzt tut mir der Kopf weh.
Kann es mir jemand einfach erklären. Ich würde eine geschlossene Lösung bevorzugen, aber eine iterative wäre auch in Ordnung. Vielen Dank
quelle
Antworten:
Inge Söderkvist (2009) hat eine schöne Zusammenfassung der Lösung des Problems der starren Körperbewegung durch Singular Value Decomposition (SVD).
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,yi d
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) R F
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,B 3×n R C=BAT
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,V S=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)VT det(R)=1 det(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
quelle