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

22

He estado usando FUSION y la línea de comando FUSION Lidar Toolkit (LTK) para procesar datos LiDAR. Una amplia búsqueda en Google ("Lidar Python") arrojó libLAS y pyLAS como bibliotecas Python LiDAR, sin embargo, parece que solo proporcionan acceso de lectura y escritura a los datos LAS.

Estoy particularmente interesado en crear imágenes de intensidad y densidad además de modelos de superficie de dosel a partir de nubes de puntos. ¿Existe un conjunto de herramientas generalmente aceptado en Python que pueda realizar el mismo tipo de tareas que FUSION LTK es capaz de hacer?

Aaron
fuente
1
No es una respuesta directa a su pregunta, pero como he estado trabajando en un software Python para la reconstrucción de árboles botánicos a partir de datos de nube de puntos adquiridos por LIDAR, tal vez la pila de tecnología que he estado usando podría darle algunas ideas. En particular, la capa de visualización se construye con VTK, que es muy potente.
cjauvin
ArcMap 10.1 tiene funciones para manejar los filtros Lidar Datacloud para su visualización y análisis con otras capas. C ++ es probablemente el mejor método para manejar los archivos .las ricos en datos como se recomienda anteriormente.
No veo cómo esta respuesta es la pregunta del OP. Quiere una herramienta en Python. Si está sugiriendo C ++, debe hacer una copia de seguridad de ese reclamo con un motivo detallado.
Devdatta Tengshe

Respuestas:

13

Laspy es otro buen software de lectura / escritura de LAS. Es compatible con el trabajo con los datos directamente en matrices numpy y una serie de otras características agradables Pythonic. Sin embargo, no está procesando software per se.

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

No hay demasiado en el carcaj de Python para LiDAR y el procesamiento de nube de puntos. Creo que algo de esto tiene que ver con los volúmenes de datos típicamente procesados ​​y la respuesta típica para alcanzar C / C ++ cuando se enfrenta al desafío. Espero que a medida que Python mejore (PyPy está impulsando muchas cosas, y es la razón por la que trabajé para desarrollar laspy), más software de procesamiento de nube de puntos Python estará disponible. Creo que las perspectivas están mejorando, pero las cosas todavía no están del todo ahí.

Howard Butler
fuente
7

Recientemente he lanzado una biblioteca de código abierto (MIT) independiente (es decir, sin dependencias) llamada WhiteboxTools para realizar muchos tipos de análisis geoespaciales, incluido el procesamiento de datos LiDAR. La biblioteca está escrita en Rust y tiene un amplio soporte para scripts basados en Python . Por ejemplo, el siguiente script de Python usa la biblioteca WhiteboxTools para completar 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 de LiDAR de WhiteboxTools incluyen las siguientes funciones:

  • BlockMaximum: crea un ráster de bloque máximo a partir de un archivo LAS de entrada.
  • BlockMinimum: crea un ráster mínimo de bloque a partir de un archivo LAS de entrada.
  • FilterLidarScanAngles: elimina puntos en un archivo LAS con ángulos de escaneo superiores a un umbral.
  • FindFlightlineEdgePoints: identifica puntos a lo largo del borde de una línea de vuelo en un archivo LAS.
  • FlightlineOverlap: lee un archivo de puntos LiDAR (LAS) y genera un ráster que contiene el número de líneas de vuelo superpuestas en cada celda de la cuadrícula.
  • LidarElevationSlice: genera 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 más archivos LAS en archivos de texto ASCII.
  • LidarColourize: agrega los campos de color rojo-verde-azul de un archivo LiDAR (LAS) basado en una imagen de entrada.
  • LidarGroundPointFilter: identifica puntos de terreno dentro del conjunto de datos LiDAR.
  • LidarIdwInterpolation: interpola archivos LAS utilizando un esquema de distancia inversa ponderada (IDW).
  • LidarHillshade: calcula un valor de sombreado para puntos dentro de un archivo LAS y almacena estos datos en el campo RGB.
  • LidarHistogram: crea un histograma a partir de datos LiDAR.
  • LidarInfo: Imprime información sobre un conjunto de datos LiDAR (LAS), incluidos el encabezado, la frecuencia de retorno de punto y los datos de clasificación e información sobre los registros de longitud variable (VLR) y geokeys.
  • LidarJoin: une múltiples archivos LiDAR (LAS) en un solo archivo LAS.
  • LidarKappaIndex: realiza un análisis de índice de acuerdo kappa (KIA) en las clasificaciones de dos archivos LAS.
  • LidarNearestNeighbourGridding: Cuadrícula de archivos LAS utilizando el esquema de vecino más cercano.
  • LidarPointDensity: calcula el patrón espacial de densidad de puntos para un conjunto de datos LiDAR.
  • LidarPointStats: crea varios rásteres que resumen la distribución de datos de puntos LAS.
  • LidarRemoveDuplicates: elimina puntos duplicados de un conjunto de datos LiDAR.
  • LidarRemoveOutliers: elimina los valores atípicos (puntos altos y bajos) en una nube de puntos LiDAR.
  • Segmentación Lidar: Segmenta una nube de puntos LiDAR basada 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: Mosaica un archivo LiDAR LAS en múltiples archivos LAS.
  • LidarTophatTransform: realiza una transformación de sombrero blanco en un conjunto de datos Lidar; Como una estimación de la altura sobre el suelo, esto es útil para modelar el dosel de vegetación.
  • NormalVectors: calcula vectores normales para puntos dentro de un archivo LAS y almacena estos datos (componentes del vector XYZ) en el campo RGB.

Además, existen numerosas herramientas para procesar los DEM que se interpolan a partir de los datos de origen de LiDAR (por ejemplo, eliminación de ruido que preserva las características, aplicación de la ley hidroeléctrica, etc.). Los detalles se pueden encontrar en el Manual del usuario . El código fuente se puede encontrar aquí , y los binarios compilados están en el sitio web de Geomorfometría e Hidrogeomática, aquí .

WhiteboxDev
fuente
¡Guauu! Estoy ansioso por probar estas herramientas.
Aaron
Espero que te funcione. Solo envíeme un correo electrónico si tiene alguna pregunta.
WhiteboxDev
¿Asumo que LidarPointStats es similar a FUSION GridMetrics? ¿Existe alguna documentación en la que se crean métricas de cuadrícula al usar LidarPointStats?
Aaron
@ Aaron No estoy muy seguro acerca de la herramienta FUSION ya que nunca he usado el software, pero esta herramienta genera lo siguiente: num_points, num_pulses, z_range, Intensity_range, predomina_class. Los detalles se pueden encontrar aquí ( github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/… ) y también en el manual del usuario.
WhiteboxDev
@Aaron Probablemente también debería haber aclarado que la herramienta de herramientas lidar_point_stats informa cada una de esas estadísticas celda por celda. Es decir, se genera un ráster para cada una de las estadísticas que el usuario especifica como salida deseada. Por ejemplo: lidar_point_stats ('input.las', resolución = 1.0, num_points = True, num_pulses = True)
WhiteboxDev
2

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

https://github.com/pmlrsg/arsf_dem_scripts

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

El uso de ejemplo para generar una imagen DSM, 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 del contenedor GRASS Python que también podrían usarse en lugar de / además de lo que está disponible a través de arsf_dem.

danclewley
fuente
2

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

Está disponible para descargar desde aquí

dmci
fuente
2

Comienza a jugar con las herramientas que se encuentran aquí. Ha sido bastante útil. https://github.com/brycefrank/pyfor

bw4sz
fuente
Excelente enlace! Estoy especialmente ansioso por jugar con las métricas de la grilla.
Aaron