Seite 1 von 1

Mit KDTree bestimmte Punkte aus Punktwolke filtern

Verfasst: Dienstag 8. Januar 2019, 22:58
von Hans-Uwe
Hi Leute,

ich habe ein Array mit zeilenweise eingetragenen Punkten (in drei Spalten die jeweiligen x-, y- und z-Koordinaten) und muss Punkte herausfiltern die in einem bestimmten minimalen und maximalen Abstand von einem bestimmten Punkt liegen. Dafür kann mir die KDTree-Funktion "query_radius" helfen. Mit dieser Funktion kann ich alle Punkte herausfinden, die sich innerhalb des maximalen Radius befinden und mir dafür die Listen "ind" (Indizes der gültigen Punkte) und "dist" (jeweiliger Abstand zum zetralen Punkt) ausgeben lassen.

Code: Alles auswählen

from sklearn.neighbors import KDTree

tree = KDTree(points_plusRand) #points_plusRand ist die Punktwolke
ind, dist = tree.query_radius(points_plusRand[:1], r=max_radius, return_distance=True)
Jetzt weiß ich einfach nicht wie ich weitermachen muss, um nochmal alle Punkte innerhalb des maximalen Abstands nach dem minimalen Abstand zu filtern. Ich habe mit den Indizes und Abständen der Punkte ja eigentlich alles was ich brauche, aber ich kann meine Gedanken nicht so ordnen und im Code ausdrücken wie ich gerne möchte.

Könnt ihr mir helfen? Ich habe einen Knoten im Kopf.

Viele Grüße
Hans-Uwe

Re: Mit KDTree bestimmte Punkte aus Punktwolke filtern

Verfasst: Mittwoch 9. Januar 2019, 00:01
von __deets__
Alle Indizes, zu deren korrespondierendem dist der Wert >= größer deines mindestabstandes ist.

Re: Mit KDTree bestimmte Punkte aus Punktwolke filtern

Verfasst: Mittwoch 9. Januar 2019, 00:12
von Hans-Uwe
Klar, aber wie schreibe ich dazu den Code? Ich weiß nicht wie ich über die Einträge der Distanzen, die innerhalb des maximalen und minimalen Abstand liegen, die Indize-Liste beschneiden soll, um damit die gesuchten Punkte der Punktwolke zu finden. Ich schaffe es einfach nicht diese Abfolge in mein Programm zu übersetzen..

Re: Mit KDTree bestimmte Punkte aus Punktwolke filtern

Verfasst: Mittwoch 9. Januar 2019, 09:37
von ArtooDetoo
Ich würde es vielleicht so machen:

Code: Alles auswählen

ind = ind[dist>=min_radius]

Re: Mit KDTree bestimmte Punkte aus Punktwolke filtern

Verfasst: Mittwoch 9. Januar 2019, 19:26
von Hans-Uwe
Ganz so einfach ist es leider nicht. :|

Mit meinen for-Schleifen komme ich leider auch nicht weiter..

Re: Mit KDTree bestimmte Punkte aus Punktwolke filtern

Verfasst: Mittwoch 9. Januar 2019, 21:50
von __deets__
Wie wäre es, wenn du die mal zeigst? Und das am besten anhand eines abgeschlossenen Beispiels, das wir selbst ausprobieren & verbessern können.