Welche LiDAR-Verarbeitungswerkzeuge stehen in Python zur Verfügung?

22

Ich habe FUSION und das Befehlszeilen-FUSION Lidar Toolkit (LTK) verwendet, um LiDAR-Daten zu verarbeiten. Eine umfassende Google-Suche ("Lidar Python") ergab libLAS und pyLAS als Python LiDAR-Bibliotheken. Diese bieten jedoch nur Lese- und Schreibzugriff auf LAS-Daten.

Ich interessiere mich besonders für die Erstellung von Intensitäts- und Dichtebildern zusätzlich zu Überdachungsoberflächenmodellen aus Punktwolken. Gibt es in Python einen allgemein anerkannten Satz von Tools, die dieselben Aufgaben ausführen können, zu denen FUSION LTK in der Lage ist?

Aaron
quelle
1
Es ist keine direkte Antwort auf Ihre Frage, aber da ich an einer Python-Software für die Rekonstruktion botanischer Bäume aus von LIDAR erfassten Punktwolkendaten gearbeitet habe, könnte Ihnen der von mir verwendete Technologie-Stack einige Ideen geben. Insbesondere wird die Visualisierungsebene mit VTK erstellt, was sehr leistungsfähig ist.
cjauvin
ArcMap 10.1 verfügt über die ultimativen Funktionen zum Verarbeiten von Lidar Datacloud-Filtern für die Anzeige und Analyse mit anderen Layern. C ++ ist wahrscheinlich die beste Methode, um mit den datenreichen .las-Dateien wie oben empfohlen umzugehen.
Ich verstehe nicht, wie diese Antwort die Frage des OP ist. Er will ein Werkzeug in Python. Wenn Sie C ++ vorschlagen, sollten Sie diese Behauptung mit einem detaillierten Grund untermauern.
Devdatta Tengshe

Antworten:

13

Laspy ist eine weitere gute LAS-Lese- / Schreibsoftware. Es unterstützt das direkte Arbeiten mit den Daten in Numpy-Arrays und einer Reihe weiterer nützlicher Pythonic-Funktionen. Es verarbeitet jedoch keine Software an sich.

PDAL kann Python als In-Pipeline-Filtersprache verwenden, dies ist jedoch auch keine Verarbeitungsengine.

Im Python-Köcher ist nicht viel für die Verarbeitung von LiDAR und Punktwolken enthalten. Ich denke, ein Teil davon hat mit dem Datenvolumen zu tun, das normalerweise verarbeitet wird, und mit der typischen Reaktion, die auf C / C ++ zu erwarten ist, wenn es um die Herausforderung geht. Ich hoffe, dass mit der Verbesserung von Python (PyPy treibt viele Dinge voran und es ist der Grund, warum ich an der Entwicklung von Laspy gearbeitet habe) mehr Python-Punktwolkenverarbeitungssoftware verfügbar wird. Ich denke, die Aussichten verbessern sich, aber die Dinge sind noch nicht ganz da.

Howard Butler
quelle
7

Ich habe kürzlich eine eigenständige Open-Source-Bibliothek (MIT) (dh keine Abhängigkeiten) mit dem Namen WhiteboxTools veröffentlicht, mit der viele Arten von Geodatenanalysen, einschließlich LiDAR-Datenverarbeitung, durchgeführt werden können. Die Bibliothek ist in Rust geschrieben und bietet umfassende Unterstützung für Python-basiertes Scripting . Das folgende Python-Skript verwendet beispielsweise die WhiteboxTools-Bibliothek, um die RGB-Farbdaten von LiDAR-Punkten in einer LAS-Datei aufzufüllen:

from whitebox_tools import WhiteboxTools

wbt = WhiteboxTools()
wbt.work_dir = "/path/to/data/"
in_lidar = "lidar_data.las"
in_image = "airphoto.tif"
out_lidar = "colourized_lidar.las"
wbt.lidar_colourize(in_lidar, in_image, out_lidar) 

Die LiDAR-spezifischen Verarbeitungswerkzeuge von WhiteboxTools umfassen die folgenden Funktionen:

  • BlockMaximum: Erstellt ein Block-Maximum-Raster aus einer Eingabe-LAS-Datei.
  • BlockMinimum: Erstellt ein Block-Minimum-Raster aus einer Eingabe-LAS-Datei.
  • FilterLidarScanAngles: Entfernt Punkte in einer LAS-Datei, deren Scanwinkel einen Schwellenwert überschreiten.
  • FindFlightlineEdgePoints: Identifiziert Punkte entlang der Kante einer Fluglinie in einer LAS-Datei.
  • FlightlineOverlap: LiDAR-Punktedatei (LAS-Punktedatei) lesen und ein Raster mit der Anzahl überlappender Fluglinien in jeder Gitterzelle ausgeben.
  • LidarElevationSlice: Gibt alle Punkte in einer LiDAR (LAS) -Punktdatei aus, die zwischen einem angegebenen Höhenbereich liegen.
  • LasToAscii: Konvertiert eine oder mehrere LAS-Dateien in ASCII-Textdateien.
  • LidarColourize: Fügt die rot-grün-blauen Farbfelder einer LiDAR-Datei (LAS) basierend auf einem Eingabebild hinzu.
  • LidarGroundPointFilter: Identifiziert Bodenpunkte innerhalb des LiDAR-Datensatzes.
  • LidarIdwInterpolation: Interpoliert LAS-Dateien mithilfe eines IDW-Schemas (Inverse Distance Weighted).
  • LidarHillshade: Berechnet einen Hillshade-Wert für Punkte in einer LAS-Datei und speichert diese Daten im RGB-Feld.
  • LidarHistogram: Erstellt ein Histogramm aus LiDAR-Daten.
  • LidarInfo: Druckt Informationen zu einem LiDAR-Dataset (LAS), einschließlich Header, Punktrückgabefrequenz sowie Klassifizierungsdaten und Informationen zu Datensätzen variabler Länge (VLRs) und Geokeys.
  • LidarJoin: Fügt mehrere LiDAR-Dateien (LAS) zu einer einzigen LAS-Datei zusammen.
  • LidarKappaIndex: Führt eine KIA-Analyse (Kappa Index of Agreement) für die Klassifizierung von zwei LAS-Dateien durch.
  • LidarNearestNeighbourGridding: Gittert LAS-Dateien nach dem Nearest-Neighbor-Schema.
  • LidarPointDensity: Berechnet das räumliche Muster der Punktdichte für einen LiDAR-Datensatz.
  • LidarPointStats: Erstellt mehrere Raster, die die Verteilung der LAS-Punktdaten zusammenfassen.
  • LidarRemoveDuplicates: Entfernt doppelte Punkte aus einem LiDAR-Datensatz.
  • LidarRemoveOutliers: Entfernt Ausreißer (hohe und niedrige Punkte) in einer LiDAR-Punktwolke.
  • LidarSegmentation: Segmentiert eine LiDAR-Punktwolke basierend auf normalen Vektoren.
  • LidarSegmentationBasedFilter: Identifiziert Bodenpunkte in LiDAR-Punktwolken mithilfe eines segmentierungsbasierten Ansatzes.
  • LidarTile: Kachelt eine LiDAR-LAS-Datei in mehrere LAS-Dateien.
  • LidarTophatTransform: Führt eine White-Top-Hat-Transformation für ein Lidar-Dataset durch. als schätzung der höhe über dem boden ist dies nützlich für die modellierung des vegetationsdaches.
  • NormalVectors: Berechnet Normalvektoren für Punkte in einer LAS-Datei und speichert diese Daten (XYZ-Vektorkomponenten) im RGB-Feld.

Darüber hinaus gibt es zahlreiche Tools zur Verarbeitung der DEMs, die aus LiDAR-Quelldaten interpoliert werden (z. B. funktionserhaltende Rauschunterdrückung, Hydroverstärkung usw.). Details finden Sie im Benutzerhandbuch . Der Quellcode kann hier gefunden werden hier , und die kompilierten Binärdateien sind auf der Geomorphometrie und Hydrogeomatics Website hier .

WhiteboxDev
quelle
Wow! Ich freue mich darauf, diese Tools zu testen.
Aaron
Ich hoffe, dass es für Sie klappt. Schicken Sie mir einfach eine E-Mail, wenn Sie Fragen haben.
WhiteboxDev
Ich nehme an, LidarPointStats ähnelt FUSION GridMetrics? Gibt es eine Dokumentation, in der Raster-Metriken erstellt werden, wenn LidarPointStats verwendet wird?
Aaron
@Aaron Ich bin mir beim FUSION-Tool nicht sicher, da ich die Software noch nie verwendet habe, aber dieses Tool gibt Folgendes aus: num_points, num_pulses, z_range, intense_range, predom_class. Details finden Sie hier ( github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/… ) und auch im Benutzerhandbuch.
WhiteboxDev
@ Aaron Ich hätte wahrscheinlich auch klarstellen müssen, dass das Tool lidar_point_stats jede dieser Statistiken zellenweise meldet. Das heißt, für jede Statistik, die der Benutzer als gewünschte Ausgabe angibt, wird ein Raster erstellt. Zum Beispiel: lidar_point_stats ('input.las', Auflösung = 1.0, num_points = True, num_pulses = True)
WhiteboxDev
2

Obwohl es sich nicht ausschließlich um eine 'Python'-Bibliothek handelt, sondern um eine Reihe von Wrappern für andere Tools, insbesondere GRASS, gibt es die' ARSF DEM Scripts ', die ich geschrieben habe:

https://github.com/pmlrsg/arsf_dem_scripts

Eines der Ziele bestand darin, einen gemeinsamen Satz von Python-Funktionen für verschiedene Befehlszeilentools (die mit Hilfe von Unterprozessen aufgerufen werden) mit einem methodFlag bereitzustellen , mit dem das Tool angegeben wird.

Beispiel für die Erstellung eines DSM-, Intensitäts- und Dichtebilds:

from arsf_dem import dem_lidar

# DSM image (GRASS, points2grid, SPDLib, FUSION or licensed LAStools)
dem_lidar.las_to_dsm('in_las.las', 'out_dsm.tif',
                      method='points2grid')

# Intensity image (GRASS or licensed version of LAStools)
dem_lidar.las_to_intensity('in_las.las', 'out_intensity.tif',
                           method='GRASS')

# Density image (GRASS only)
dem_lidar.grass_lidar.las_to_density('in_las.las', 'out_density.tif',
                                     bin_size=10)

Es gibt eine ganze Reihe von LiDAR-Verarbeitungswerkzeugen, die über den GRASS Python-Wrapper verfügbar sind und die auch anstelle von / zusätzlich zu den verfügbaren Tools verwendet werden können arsf_dem.

Danclewley
quelle
2

pylidarist ein relativ neuer Satz von Python-Modulen für die LiDAR-Verarbeitung. Es basiert auf SPDLib und RIOS und verwendet Numpy.

Es kann hier heruntergeladen werden

dmci
quelle
2

Fangen Sie an, mit den hier gefundenen Werkzeugen herumzuspielen. Es war ziemlich nützlich. https://github.com/brycefrank/pyfor

bw4sz
quelle
Hervorragender Link! Ich freue mich besonders darauf, mit den Rasterkennzahlen zu spielen.
Aaron
1

Wenn Sie sich den Quellcode der QGIS-Toolbox für LAStools (jetzt Teil des Verarbeitungs-Plugin-Frameworks) ansehen, können Sie sehen, wie Sie externe Software (hier LAStools ) aufrufen , um LiDAR-Verarbeitungsvorgänge auszuführen.

LAStools
quelle