Finden, translation und Skalierung auf zwei Sätze von Punkte zu bekommen, die kleinste quadratische Fehler in der Entfernung?

Ich habe zwei Sätze von 3D-Punkten (original und nachgebaut) und Korrespondenz Informationen über die Paare - die Stelle aus einem Satz darstellt, die zweite. Ich muss 3D-translation und Skalierung Faktor, welche die Transformationen rekonstruieren festgelegt, sodass die Summe der quadratischen Abstände würden zumindest (rotation wäre auch schön, aber Punkte sind gedreht, ebenso, so ist dies nicht erste Priorität und könnte weggelassen werden, im Interesse der Einfachheit und Schnelligkeit). Und so ist meine Frage - ist dieses Problem gelöst und irgendwo im Internet? Persönlich würde ich verwenden, kleinste-Quadrate-Methode, aber ich habe nicht viel Zeit (und ich bin zwar einigermaßen gut in Mathe, ich benutze es nicht oft, also wäre es besser für mich, es zu vermeiden), so möchte ich eine andere Lösung, wenn es vorhanden ist. Ich bevorzuge die Lösung in C++, zum Beispiel unter Verwendung von OpenCV, aber-Algorithmus allein ist gut genug.

Wenn es keine solche Lösung finden, werde ich es berechnen von mir, ich will nicht, Sie zu stören so viel.

LÖSUNG: (aus den Antworten)
Für mich ist es Kabsch alhorithm;
Basis-info: http://en.wikipedia.org/wiki/Kabsch_algorithm
Allgemeine Lösung: http://nghiaho.com/?page_id=671

NOCH NICHT GELÖST:
Ich muss auch Maßstab. Skala Werte von SVD sind für mich nicht verständlich; wenn ich brauche, Maßstab etwa 1-4 für alle Achsen (geschätzt von mir), SVD-Skala ist über [2000, 200, 20], die nicht an allen hilft.

Wahrscheinlich Kabsch Algorithmus, was Sie brauchen. Unterschied der beiden centroide übersetzung gibt; und nachdem computing SVD der Kovarianzmatrix, einzigartigen Werte geben, die Skalierungsfaktoren und die unitären Matrizen geben die optimale rotationsmatrix.
Evgeny Kluev: ich danke Ihnen sehr, es sieht aus wie es ist. Ich werde versuchen und post-Ergebnisse (es wird einige Zeit dauern; ich habe einige andere Sachen zu implementieren). By the way, zum Glück für mich, OpenCV enthält SVD-Rechner, das vereinfacht vieles.
Evgeny Kluev: ich zutiefst entschuldige mich für die so späte Antwort: ich hatte mehr wichtige Projekte. Ich möchte Sie Fragen, wie soll ich das deuten Skalierungsfaktoren? Diese zahlen sind wirklich groß (200 - 2000) oder klein (~0.5), aber von meinem Urteil, Waage sollte etwa 1-4. Und auch, scale-Faktoren sind oft für verschiedene Achse (zum Beispiel [2000, 200, 20]).
Eigentlich gibt es keinen Weg, um Skalierungsfaktoren direkt von singulären Werte. Mein Fehler. Sorry. SVD-basierten Algorithmus anwendbar sein kann hier, aber ich weiß nicht, wie. Sie sind In jedem Fall kalt versuchen, mehr Allgemeinen Iterative closest point Algorithmus.
Haben Sie schaute auf meine Antwort unten? Erhalten Sie die Skala von Eigen-als auch eigen.tuxfamily.org/dox/... natürlich, dies setzt Voraus, Sie haben die Korrespondenzen

InformationsquelleAutor | 2012-11-17

Schreibe einen Kommentar