Schnelle Flugzeug passend zu viele Punkte
Ich bin auf der Suche, um zu passen in ein Flugzeug, um einen Satz von ~ 6-10k 3D-Punkte. Ich bin auf der Suche zu tun, dies so schnell als möglich, und die Genauigkeit ist nicht das höchste Anliegen (ehrlich gesagt, das Flugzeug kann um +-10 ° Grad in jede der kardinalen Achsen).
Mein Aktueller Ansatz ist es, best of best fit, aber es ist unglaublich langsam (ich bin der Hoffnung, zu extrahieren Flugzeuge mit einer rate von etwa 10-50k mal jedes mal, wenn ich den Algorithmus, und bei diesem Tempo würde es fertig in Wochen, anstelle von Stunden), wie es funktioniert auf allen möglichen Kombinationen von 6.000-Punkte-Marke, so ~35,000,000,000 Iterationen, und ehrlich gesagt, es hat eine viel höhere Genauigkeit, als ich brauche.
Weiß jemand, der etwas schwächer Flugzeug-Montage-Techniken, die möglicherweise Geschwindigkeit mein Algorithmus wesentlich?
EDIT:
Habe ich es geschafft die Anzahl der Wiederholungen runter auf ~42k durch die Schaffung von Ebenen in jedem 3D-Winkel (Durchlaufen bei 5 Grad zu jeder Zeit) und die Prüfung der vorhandenen Punkte gegen diese zu finden, die besten Flieger, statt mit Montage-Ebenen zu den Punkten, die ich habe.
Ich bin sicher, es gibt etwas zu gewinnen hier durch teilen und zu erobern, obwohl ich mir sorgen, ich könnte springen Sie geradeaus vorbei an der besten Flieger.
Leider weiß ich nicht, ich bin stecken mit Vanille MATLAB, obwohl ich eine Menge Programmier-Erfahrung im Allgemeinen, so ich sollte in der Lage sein zu handhaben, ein ziemlich komplexer Algorithmus.
Wenn Genauigkeit ist nicht Ihr Haupt-Anliegen, reduzieren Sie die Eingabe der Komplexität Ihrer Daten. Führen Sie kmeans oder etwas auf den ersten Satz mit 6-10k Punkte, und dann passen die Ebene der Exemplare.
gute Idee. Um die Leistung zu verbessern, auch weitere, zufällige Teilmenge der Punkte, die vielleicht genug.
InformationsquelleAutor Nick Udell | 2012-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die standard-Ebene Gleichung
Ax + By + Cz + D = 0
, und schreiben Sie die Gleichung als matrix-Multiplikation.P
ist Ihr unbekannt4x1 [A;B;C;D]
Nun erweitern Sie diese an alle Ihre tatsächlichen Punkte, eine Nx4-matrix
G
. Das Ergebnis ist nicht mehr genau 0, es sind die Fehler, die Sie versuchen zu minimieren.Also, was Sie wollen, ist der nächstgelegene Vektor in den null-Raum von G, die von der SVD. Let ' s test:
OK, denken Sie daran, dass P kann durch einen Skalar. Also nur um zu zeigen, dass wir übereinstimmen:
ans =
2.0000
3.0038
2.5037
-0.9997
InformationsquelleAutor Peter
In der computer vision eine standard-Möglichkeit ist die Verwendung von RANSAC oder MSAC, in Ihrem Fall;
http://en.wikipedia.org/wiki/RANSAC
InformationsquelleAutor Jorgen
Sieht es aus wie
griddata
könnte das sein, was Sie wollen. Der link ist ein Beispiel.Wenn das nicht funktioniert, vielleicht check out
gridfit
auf der MATLAB File Exchange. Es wird das match ein allgemeinerer Fall alsgriddata
.Werden Sie wahrscheinlich nicht wollen, um Ihre eigenen Rollen Oberfläche passend, da es mehrere gut dokumentierte tools gibt.
Nehmen wir das Beispiel von
griddata
:Hmm mein problem mit dem griddata ist, um es zu bekommen, um mir ein Flugzeug, ich habe (auf der Grundlage Ihres ersten Beispiel) sagen, dass es zu generieren zq mit 4 Punkten an (-1,-1), (-1,1), (1,-1), (1,1) (mit 2:-2 - die Grenzen der Daten in den Beispiel - für einige Grund nur NaN zurück). Leider scheint dies, um zu garantieren, dass die Ecken der Ebene an (-1,-1), (-1,1), (1,-1), (1,1) und es scheint nicht, werden Sie mehr Punkte zu berücksichtigen. Wenn ich erhöhen die Anzahl der Punkte, die ich nicht mehr in ein Flugzeug.
Fügen Sie einige code, die Sie versucht haben in Ihrer Antwort, damit ich Ihnen helfen kann, mehr.
InformationsquelleAutor kevlar1818
Können Sie versuchen, die consolidator von John D ' Errico. Es aggregiert die Punkte innerhalb einer bestimmten Toleranz, wird diese ermöglichen es, die Datenmenge reduzieren und die Geschwindigkeit erhöhen. Sie können auch überprüfen, Johannes gridfit Funktion, die in der Regel schneller und flexibler als
griddata
InformationsquelleAutor zamazalotta