Das Fitting einer Ellipse auf die 3D-Datenpunkte
Habe ich eine große Menge von 3D-Daten Punkte, zu denen ich passen muss, um ein ellipsoid.
Mein Mathe ist ziemlich schlecht, also ich habe Probleme bei der Umsetzung die Methode der kleinsten Quadrate ohne jede Mathematik-Bibliotheken.
Kennt jemand oder ein Stück code, das kann passen, ein ellipsoid auf die Daten, die ich anschließen kann, direkt in mein Projekt? In C wäre am besten, aber es sollte kein problem für mich konvertieren von C++, Java, C#, python etc.
EDIT: Nur in der Lage zu finden, das Zentrum wäre eine große Hilfe auch. Beachten Sie, dass die Punkte nicht gleichmäßig verteilt, so dass die Einnahme der Mittelwert nicht in der Mitte.
Können ellipsoid gedreht werden?
Ich erwarte von Ihnen fallen auf der Oberfläche eines Ellipsoids, so dass das Zentrum ist hohl.
InformationsquelleAutor Hannesh | 2011-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Least-Squares data fitting ist wahrscheinlich eine gute Methode geben die Art der Daten, die Sie beschreiben. Die GNU Scientific Library enthält lineare und non-linear least-squares-data fitting-Routinen. In Ihrem Fall ist, können Sie wandeln Sie Ihre Daten in ein linearer Raum und lineare least-squares, aber das hängt von den tatsächlichen Anwendungsfall. Ansonsten benötigen Sie für die Verwendung von nicht-linearen Methoden.
InformationsquelleAutor andand
hier gehen Sie:
Dieses Papier beschreibt das fitting einer Ellipse auf mehreren Dimensionen, ebenso WIE das finden der Mitte für die ellipois. Hoffe, das hilft,
http://www.physics.smu.edu/~scalise/SMUpreprints/SMU-HEP-10-14.pdf
(btw, ich nehme an, dass diese Antwort ein bisschen spät, aber ich dachte, ich möchte hinzufügen, diese Lösung für alle, die stolpert über Ihre Frage in der Suche für die gleiche Sache 🙂
InformationsquelleAutor Nick Levesque
Wenn Sie möchten, dass die minimum-Volumen umschließenden ellipsoid, check out diese, SO die Antwort für eine bounding-ellipsoid.
Wenn Sie möchten, die am besten passende ellipse in der least-squares-Sinne, Lesen Sie in diesem MATLAB-code für Fehler-Ellipsoide wo finden Sie die Kovarianzmatrix von Ihrem Mittelwert verschoben 3D-Punkte und verwenden Sie, um zu konstruieren, das ellipsoid.
InformationsquelleAutor Jacob
Konnte ich nicht finden, einen guten Java-basierten Algorithmus für die Montage ein ellipsoid, so landete ich schreiben es selbst. Es gab einige gute algorithmen für eine ellipse mit 2D-Punkte, aber nicht für ein ellipsoid mit 3D-Punkte. Ich experimentierte mit ein paar verschiedene MATLAB-Skripte und stellte sich schließlich auf Yury Petrov ' s Ellipsoid Passen. Es passt ein ellipsoid, das Polynom Ax^2 + By^2 + Cz^2 + 2Dxy + 2Exz + 2Fyz + 2Gx + 2Hy + 2Iz = 1. Es spielt keine Einschränkungen zu zwingen, ein ellipsoid, so haben Sie eine relativ große Anzahl von Punkten zu verhindern, dass eine zufällige quardic vom Wesen passen, anstatt des Ellipsoids. Other than, die es funktioniert wirklich gut. Ich schrieb ein kleines Java-Bibliothek Apache Commons Math implementiert, dass Yury Petrov ' s Skript in Java. Das GIT-repository finden Sie unter https://github.com/BokiSoft/EllipsoidFit.
InformationsquelleAutor Kaleb
Entwickelten wir eine Reihe von Matlab-und Java-codes, um fit Ellipsoide hier:
https://github.com/pierre-weiss
Können Sie auch überprüfen, unsere open-source Eisigen plugin. Die folgende übung hilfreich sein kann:
https://www.youtube.com/endscreen?video_referrer=watch&v=nXnPOG_YCxw
Hinweis: die meisten existierenden codes passen eine generische quadratische und nicht zu verhängen eine längliche Form. Um mehr Robustheit, die Sie benötigen, zu gehen, um konvexe Programmierung, anstatt nur lineare algebra. Dies ist, was getan wird in den angegebenen Quellen.
Cheers,
Pierre
InformationsquelleAutor P. Weiss
Ich habe eine Idee. Etwa Lösung, nicht das beste, aber halten die Punkte im inneren. In der XY-Ebene finden Sie den radius R1, die erhalten Punkte. Gleiche tun für die XZ-Ebene (R2) und die YZ-Ebene (R3). Verwenden Sie dann die Höchstwerte auf jeder Achse. A=max(R1,R2), B=max(R1,R3) und C=max(R2,R3).
Zunächst aber finden der Durchschnitt (Zentrum) aller Punkte und richten Sie es an origin.
Gut, es ist keine so gute Idee. 🙂 es ist komplexer, als es aussieht auf den ersten moment.
InformationsquelleAutor Prcela
Ich habe gerade den gleichen Prozess durchgemacht.
Hier ist ein python-Modul, das basiert auf der Arbeit von Nima Moshtagh. Verwiesen wird in vielen Orten, aber auch in dieser Frage über einen Umschließende ellipse
Dieses Modul behandelt auch das auftragen der endgültigen ellipsoid. Genießen Sie!
https://github.com/minillinim/ellipsoid/blob/master/ellipsoid.py
InformationsquelleAutor minillinim
Ich portiert Yury Petrov ' s least-squares Matlab Monteur Java vor einiger Zeit, es muss nur JAMA: https://github.com/mdoube/BoneJ/blob/master/src/org/doube/geometry/FitEllipsoid.java
Sicher:Matlab-source - mathworks.com/matlabcentral/fileexchange/24693-ellipsoid-fit
JAMA ist eine Java matrix-Bibliothek - ähnliche Bibliotheken müssen existieren für C/C++ math.nist.gov/javanumerics/jama
InformationsquelleAutor mdoube
Hier ist eine sehr einfache Methode zu finden, Schwerpunkte, basierend auf der zufälligen Suche. Keine lineare algebra verwendet. Also, wenn Sie in Ordnung mit nicht-perfekte Lösung:
Ergebnis kann verbessert werden, indem die übergabe-array-2ten mal in umgekehrter Richtung
Schwerpunkte die gesetzt bei vecCenter +/- vecFocus
InformationsquelleAutor Anno Nymous