Quali strumenti di elaborazione LiDAR sono disponibili in Python?


22

Ho usato FUSION e la riga di comando FUSION Lidar Toolkit (LTK) per elaborare i dati LiDAR. Un'ampia ricerca su Google ("Lidar Python") ha prodotto libLAS e pyLAS come librerie Python LiDAR, tuttavia, queste sembrano fornire solo accesso in lettura e scrittura ai dati LAS.

Sono particolarmente interessato a creare immagini di intensità e densità oltre ai modelli di superficie a baldacchino da nuvole di punti. Esiste un set di strumenti generalmente accettato in Python in grado di svolgere lo stesso tipo di attività di cui FUSION LTK è in grado?


1
Non è una risposta diretta alla tua domanda, ma dato che ho lavorato su un software Python per la ricostruzione di alberi botanici dai dati della nuvola di punti acquisiti da LIDAR, forse lo stack tecnologico che ho usato potrebbe darti alcune idee. In particolare, il livello di visualizzazione viene creato utilizzando VTK, che è molto potente.
cjauvin,

ArcMap 10.1 ha funzionalità avanzate per gestire i filtri Lidar Datacloud per la visualizzazione e l'analisi con altri livelli. C ++ è probabilmente il metodo migliore per gestire i file .las ricchi di dati come consigliato sopra.

Non vedo come questa risposta sia la domanda del PO. Vuole uno strumento in Python. Se stai suggerendo C ++, dovresti eseguire il backup di tale affermazione con un motivo dettagliato.
Devdatta Tengshe,

Risposte:


13

laspy è un altro buon software di lettura / scrittura LAS. Supporta lavorare con i dati direttamente in array intorpiditi e una serie di altre belle funzionalità di Pythonic. Tuttavia, non sta elaborando software di per sé.

PDAL ha la capacità di usare Python come linguaggio di filtraggio in-pipeline, ma neanche questo è un motore di elaborazione.

Non c'è troppo nella faretra Python per LiDAR e l'elaborazione della nuvola di punti. Penso che parte di questo abbia a che fare con i volumi di dati tipicamente elaborati e la risposta tipica da raggiungere per C / C ++ di fronte alla sfida. Spero che, man mano che Python migliora (PyPy stia guidando molte cose, ed è la ragione per cui ho lavorato per avere sviluppato inaspettatamente) più software di elaborazione della nuvola di punti Python diventa disponibile. Penso che le prospettive stiano migliorando, ma le cose non sono ancora del tutto lì.


7

Di recente ho rilasciato una libreria open-source (MIT) stand-alone (cioè senza dipendenze) chiamata WhiteboxTools per eseguire molti tipi di analisi geospaziale, inclusa l'elaborazione dei dati LiDAR. La libreria è scritta in Rust e ha un ampio supporto per gli script basati su Python . Ad esempio, il seguente script Python utilizza la libreria WhiteboxTools per popolare i dati di colore RGB dei punti LiDAR in un file LAS:

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) 

Gli strumenti di elaborazione specifici di LiDAR di WhiteboxTools includono le seguenti funzioni:

  • BlockMaximum: crea un raster a blocchi massimo da un file LAS di input.
  • BlockMinimum: crea un raster minimo di blocco da un file LAS di input.
  • FilterLidarScanAngles: rimuove i punti in un file LAS con angoli di scansione maggiori di una soglia.
  • FindFlightlineEdgePoints: identifica i punti lungo il bordo di una linea di volo in un file LAS.
  • FlightlineOverlap: legge un file di punti LiDAR (LAS) e genera un raster contenente il numero di linee di volo sovrapposte in ciascuna cella della griglia.
  • LidarElevationSlice: genera tutti i punti all'interno di un file di punti LiDAR (LAS) compresi in un intervallo di elevazione specificato.
  • LasToAscii: converte uno o più file LAS in file di testo ASCII.
  • LidarColourize: aggiunge i campi di colore rosso-verde-blu di un file LiDAR (LAS) in base a un'immagine di input.
  • LidarGroundPointFilter: identifica i punti di terra all'interno del set di dati LiDAR.
  • LidarIdwInterpolation: interpola i file LAS utilizzando uno schema ponderato a distanza inversa (IDW).
  • LidarHillshade: calcola un valore di una sfumatura per i punti all'interno di un file LAS e memorizza questi dati nel campo RGB.
  • Istogramma Lidar: crea un istogramma dai dati LiDAR.
  • LidarInfo: stampa informazioni su un set di dati LiDAR (LAS), inclusi intestazione, frequenza di ritorno punto, dati di classificazione e informazioni sui record a lunghezza variabile (VLR) e geokeys.
  • LidarJoin: unisce più file LiDAR (LAS) in un singolo file LAS.
  • LidarKappaIndex: esegue un indice Kappa di analisi (KIA) sulle classificazioni di due file LAS.
  • LidarNearestNeighbourGridding: griglia i file LAS utilizzando lo schema del vicino più vicino.
  • LidarPointDensity: calcola il modello spaziale della densità dei punti per un set di dati LiDAR.
  • LidarPointStats: crea diversi raster che sintetizzano la distribuzione dei dati dei punti LAS.
  • LidarRemoveDuplicates: rimuove i punti duplicati da un set di dati LiDAR.
  • LidarRemoveOutliers: rimuove gli outlier (punti alti e bassi) in una nuvola di punti LiDAR.
  • LidarSegmentation: segmenta una nuvola di punti LiDAR in base a vettori normali.
  • LidarSegmentationBasedFilter: identifica i punti di terra all'interno delle nuvole di punti LiDAR usando un approccio basato sulla segmentazione.
  • LidarTile: affianca un file LAS LiDAR in più file LAS.
  • LidarTophatTransform: esegue una trasformazione top hat bianca su un set di dati Lidar; come stima dell'altezza dal suolo, questo è utile per modellare il baldacchino della vegetazione.
  • Vettori normali: calcola i vettori normali per i punti all'interno di un file LAS e memorizza questi dati (componenti vettoriali XYZ) nel campo RGB.

Inoltre, esistono numerosi strumenti per l'elaborazione dei DEM interpolati dai dati sorgente LiDAR (ad es. Denoising che preserva le funzionalità, applicazione del sistema idroelettrico, ecc.). I dettagli sono disponibili nel Manuale dell'utente . Il codice sorgente può essere trovato qui , e i binari compilati si trovano sul sito Web di Geomorfometria e Idrogeomatica, qui .


Wow! In attesa di testare questi strumenti.
Aaron

Spero che funzioni per te. Mandami una email se hai domande.
WhiteboxDev

Presumo che LidarPointStats sia simile a FUSION GridMetrics? Esiste una documentazione in cui vengono create le metriche della griglia quando si utilizza LidarPointStats?
Aaron

@Aaron Non sono troppo sicuro dello strumento di FUSION poiché non ho mai usato il software, ma questo strumento produce quanto segue: num_points, num_pulses, z_range, intensità_range, predom_class. I dettagli sono disponibili qui ( github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/… ) e anche nel manuale dell'utente.
WhiteboxDev

@Aaron Probabilmente avrei dovuto anche chiarire che lo strumento lidar_point_stats sta riportando ciascuna di queste statistiche cella per cella. Cioè, esiste un raster prodotto per ciascuna delle statistiche che l'utente specifica come output desiderato. Ad esempio: lidar_point_stats ('input.las', risoluzione = 1.0, num_points = True, num_pulses = True)
WhiteboxDev

2

Sebbene non sia strettamente una libreria "Python" ma piuttosto un insieme di wrapper per altri strumenti, in particolare GRASS, ci sono gli "Script DEM ARSF" che ho scritto:

https://github.com/pmlrsg/arsf_dem_scripts

Uno degli obiettivi era fornire un set comune di funzioni Python per diversi strumenti della riga di comando (chiamati utilizzando sottoprocesso) con un methodflag utilizzato per specificare lo strumento.

Esempio di utilizzo per generare un'immagine DSM, intensità e densità è:

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)

Ci sono alcuni strumenti di elaborazione LiDAR disponibili attraverso il wrapper GRASS Python che potrebbero anche essere usati al posto di / in aggiunta a quelli disponibili arsf_dem.


2

pylidarè un set relativamente nuovo di moduli Python per l'elaborazione LiDAR. Si basa su SPDLib e RIOS e utilizza numpy.

È disponibile per il download da qui



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.