2016-04-18 9 views
0

Wir haben eine 3D-Punktwolke mit einigen zylindrischen Formen. Wir können pro-grammatisch auf jede der Koordinaten des Punktes (x, y, z) zugreifen.Können Sie einen Algorithmus vorschlagen, der die Punkte markiert, die zu einem Zylinder gehören?

+0

Was wissen Sie über den Zylinder? Ist die Zylinderachse notwendigerweise parallel zur z-Achse? Versuchen Sie, den Zylinder zu optimieren, um eine große Anzahl von Punkten abzudecken? –

+0

Ich versuche auf jeden Punkt von jeder (x, y, z) Koordinate zuzugreifen, wo alle Punkte, die zu einem Zylinder gehören @Danial –

Antwort

0

Überprüfen Sie, ob z innerhalb [minz..maxz]

if (z > maxz || z < minz) 
    return false; 

Dann sehen, ob der Punkt innerhalb des Kreises der Mitte ist (centerX,centerY) und radious R:

return ((x-centerX)*(x-centerX) + (y-centerY)*(y-centerY) <= R*R); 

dies den Zylinder übernimmt wird

nicht gedreht
+0

@Exception Ich bin etwas verwirrt über diese Linie "Punkt ist innerhalb des Kreises der Mitte (centerX (MitteY) "Kannst du es noch einmal klar erklären. thnx im Voraus –

+0

@AbdurRazzak ein Kreis hat Gleichung (x-xc)^2 + (y-yc)^2 = r^2, siehe https://en.wikipedia.org/wiki/Circle#Equations. Wenn Sie in Ihrem Fall also überprüft haben, ob z in Ordnung ist, müssen Sie nur überprüfen, ob (x, y) ein Punkt ist, für den (x-xc)^2 + (y-yc)^2 <= r^2 – Exceptyon

+0

thnx @exception –

1

Sie könnten den Algorithmus RANSAC verwenden. Auf der Wikipedia-Seite gibt es ein Beispiel für eine 2D-Punktwolke und eine Linie. Die Erweiterung auf 3D und einen Zylinder ist einfach.

Grundsätzlich wählen Sie nach dem Zufallsprinzip minimale Teilmengen aus der Punktewolke, die einen Zylinder vollständig bestimmen, Sie erstellen ein mathematisches Modell des Zylinders und dann schauen Sie, wie viele Punkte diese Hypotesis bestätigen (zB nicht weiter vom modellierten Zylinder entfernt) als irgendeine Schwelle) und Sie behalten den besten Zylinder bis jetzt. Du machst das einige Male.

Für einen Zylinder benötigen Sie, Ich denke, 4 5 Punkte, um seinen Radius und die Hauptachse Vektor zu erhalten. Dann brauchen Sie vielleicht noch weitere Punkte, um eine Höhe des Zylinders zu bestimmen, wenn Sie es sind.

Es gibt einen Artikel, der sich mit der Bestimmung zylindrischer Gleichungen aus fünf Punkten befasst: Cylinders Through Five Points: Computational Algebra and Geometry. Es hat auch Mathematica Code im Anhang und viele Referenzen auf andere Artikel.

+0

@zagkljan kannst du mich über mathematisches Modell des Zylinders klar machen ..... ??? thnx im Voraus –

+0

@AbdurRazzak Ich habe einen Verweis auf einen Artikel hinzugefügt, der Ihnen die Antworten geben könnte. – zegkljan

0

umreißt eine Lösung: (Wir ähnliche Lösung in der Vergangenheit verwendet haben, aber ich verlor die Details)

Sie im Grunde brauchen Zentrum (C), Achse (n) finden (Richtung Cosinus) und Radius (R) für einen Zylinder.

dann für jeden Punkt P, Abweichung (oder Fehler) von der Soll-Zylinder und einem Punkt (Normalabstand zwischen dem Punkt zu berechnen und der Achse).

delta^2 = |(P -C) - (P - C) . n * n|^2 - r^2

Wir müssen die Fehler minimieren. Durch die Verwendung von partiellen Differentiationen und einigen Vektoren können wir Werte herausfinden, die dem minimalen Fehler entsprechen. Es ist auch möglich, die Punkte zu probieren (wenn wir wissen, dass sie zur selben Oberfläche gehören).

Verwandte Themen