27 votos

¿Qué herramientas de procesamiento LiDAR están disponibles en Python?

He estado utilizando FUSIÓN y la línea de comandos FUSION Lidar Toolkit (LTK) para procesar datos LiDAR. Una amplia búsqueda en Google ("Lidar Python") dio como resultado libLAS y pyLAS como bibliotecas LiDAR de Python, sin embargo, parece que sólo proporcionan acceso de lectura y escritura a los datos LAS.

Estoy especialmente interesado en la creación de imágenes de intensidad y densidad, además de modelos de superficie del dosel, a partir de nubes de puntos. Existe algún conjunto de herramientas en Python generalmente aceptado que pueda realizar el mismo tipo de tareas que FUSION LTK?

19voto

csmba Puntos 2440

laspy es otro buen software de lectura/escritura LAS. Soporta el trabajo con los datos directamente en matrices numpy y una serie de otras características agradables Pythonic. Sin embargo, no es un software de procesamiento en sí.

PDAL tiene la capacidad de utilizar Python como lenguaje de filtrado en línea, pero tampoco es un motor de procesamiento.

No hay mucho en el carcaj de Python para LiDAR y procesamiento de nubes de puntos. Creo que parte de esto tiene que ver con los volúmenes de datos que se suelen procesar y la respuesta típica de recurrir a C/C++ cuando nos enfrentamos al reto. Espero que a medida que Python mejore (PyPy está impulsando muchas cosas, y es la razón por la que trabajé para tener laspy desarrollado) más software de procesamiento de nubes de puntos en Python esté disponible. Creo que las perspectivas están mejorando, pero las cosas todavía no están del todo ahí.

11voto

Recientemente he publicado una biblioteca independiente (es decir, sin dependencias) de código abierto (MIT) llamada WhiteboxTools para realizar muchos tipos de análisis geoespaciales, incluido el tratamiento de datos LiDAR. La biblioteca está escrita en Rust y cuenta con un amplio soporte para Programación basada en Python . Por ejemplo, el siguiente script de Python utiliza la biblioteca WhiteboxTools para rellenar los datos de color RGB de los puntos LiDAR en un archivo 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) 

Las herramientas de procesamiento específicas para LiDAR de WhiteboxTools incluyen las siguientes funciones:

  • BloqueMáximo: Crea un ráster bloque-máximo a partir de un archivo LAS de entrada.
  • BloqueMínimo: Crea una trama de bloque mínimo a partir de un archivo LAS de entrada.
  • FilterLidarScanAngles: Elimina los puntos de un archivo LAS con ángulos de escaneo superiores a un umbral.
  • Encontrar puntos de borde de línea aérea: Identifica puntos a lo largo del borde de una línea de vuelo en un archivo LAS.
  • Línea de vueloSuperposición: Lee un archivo de puntos LiDAR (LAS) y genera un ráster que contiene el número de líneas de vuelo solapadas en cada celda de la cuadrícula.
  • LidarElevationSlice: Da salida a todos los puntos dentro de un archivo de puntos LiDAR (LAS) que se encuentran entre un rango de elevación especificado.
  • LasToAscii: Convierte uno o varios archivos LAS en archivos de texto ASCII.
  • LidarColourize: Añade los campos de color rojo-verde-azul de un archivo LiDAR (LAS) basado en una imagen de entrada.
  • LidarGroundPointFilter: Identifica los puntos del terreno en el conjunto de datos LiDAR.
  • LidarIdwInterpolation: Interpola archivos LAS utilizando un esquema de distancia inversa ponderada (IDW).
  • LidarHillshade: Calcula un valor hillshade para los puntos dentro de un archivo LAS y almacena estos datos en el campo RGB.
  • LidarHistograma: Crea un histograma a partir de datos LiDAR.
  • LidarInfo: Imprime información sobre un conjunto de datos LiDAR (LAS), incluidos los datos de cabecera, frecuencia de retorno de puntos y clasificación, así como información sobre los registros de longitud variable (VLR) y las geoclaves.
  • LidarJoin: Une varios archivos LiDAR (LAS) en un único archivo LAS.
  • LidarKappaIndex: Realiza un análisis del índice kappa de concordancia (KIA) en las clasificaciones de dos archivos LAS.
  • LidarNearestNeighbourGridding: Cuadricula archivos LAS utilizando el esquema de vecino más cercano.
  • LidarPointDensity: Calcula el patrón espacial de densidad de puntos de un conjunto de datos LiDAR.
  • LidarPointStats: Crea varios rásters que resumen la distribución de los datos de puntos LAS.
  • LidarRemoveDuplicates: Elimina los puntos duplicados de un conjunto de datos LiDAR.
  • LidarRemoveOutliers: Elimina los valores atípicos (puntos altos y bajos) en una nube de puntos LiDAR.
  • LidarSegmentación: Segmenta una nube de puntos LiDAR basándose en vectores normales.
  • LidarSegmentationBasedFilter: Identifica los puntos del terreno dentro de las nubes de puntos LiDAR utilizando un enfoque basado en la segmentación.
  • LidarTile: Agrupa un archivo LiDAR LAS en varios archivos LAS.
  • LidarTophatTransform: Realiza una transformación de sombrero blanco en un conjunto de datos Lidar; como estimación de la altura sobre el suelo, es útil para modelar el dosel vegetal.
  • NormalVectors: Calcula los vectores normales de los puntos de un archivo LAS y almacena estos datos (componentes vectoriales XYZ) en el campo RGB.

Además, existen numerosas herramientas para procesar los MDE interpolados a partir de datos LiDAR de origen (por ejemplo, eliminación de ruido para preservar las características, hidroaplicación, etc.). Encontrará más información en la página Manual del usuario . Código fuente aquí y los binarios compilados se encuentran en el sitio web de Geomorfometría e Hidrogeomática, aquí .

2voto

P a u l Puntos 2877

Aunque no es estrictamente una biblioteca 'Python', sino más bien un conjunto de envoltorios para otras herramientas, en particular GRASS, están los 'ARSF DEM Scripts' que he escrito:

https://github.com/pmlrsg/arsf_dem_scripts

Uno de los objetivos era proporcionar un conjunto común de funciones Python para diferentes herramientas de línea de comandos (denominadas mediante subproceso) con un method utilizado para especificar la herramienta.

Ejemplo de uso para generar una imagen DSM, de intensidad y densidad es:

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)

Hay bastantes herramientas de procesamiento LiDAR disponibles a través de la envoltura Python de GRASS que también podrían utilizarse en lugar de / además de lo que está disponible a través de arsf_dem .

2voto

Peter Kahn Puntos 1860

pylidar es un conjunto relativamente nuevo de módulos Python para el procesamiento LiDAR. Se basa en SPDLib y RIOS y utiliza numpy.

Puede descargarse desde aquí

2voto

nelm Puntos 39

Si nos fijamos en el código fuente de la Caja de herramientas QGIS para LAStools (ahora parte del framework de plugins de procesamiento) puedes ver cómo llamar a software externo (aquí LAStools ) para llevar a cabo las operaciones de procesamiento LiDAR.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X