Quais ferramentas de processamento LiDAR estão disponíveis no Python?


22

Eu tenho usado o FUSION e a linha de comando FUSION Lidar Toolkit (LTK) para processar dados do LiDAR. Uma ampla pesquisa no Google ("Lidar Python") produziu libLAS e pyLAS como bibliotecas Python LiDAR, no entanto, elas parecem fornecer apenas acesso de leitura e gravação aos dados do LAS.

Estou particularmente interessado em criar imagens de intensidade e densidade, além de modelos de superfície de dossel a partir de nuvens de pontos. Existe um conjunto de ferramentas geralmente aceito no Python que pode realizar o mesmo tipo de tarefas que o FUSION LTK é capaz?


1
Não é uma resposta direta à sua pergunta, mas como eu tenho trabalhado em um software Python para a reconstrução de árvores botânicas a partir de dados em nuvem de pontos adquiridos pelo LIDAR, talvez a pilha de tecnologia que eu esteja usando possa lhe dar algumas idéias. Em particular, a camada de visualização é criada usando o VTK, que é muito poderoso.
precisa saber é o seguinte

O ArcMap 10.1 possui ultilidades para lidar com os filtros Lidar Datacloud para exibição e análise com outras camadas. C ++ é provavelmente o melhor método para manipular os arquivos .las ricos em dados, conforme recomendado acima.

Não vejo como essa resposta é a pergunta do OP. Ele quer uma ferramenta em Python. Se você está sugerindo C ++, deve fazer backup dessa reivindicação com um motivo detalhado.
Devdatta Tengshe 22/03

Respostas:


13

O laspy é outro bom software de leitura / gravação LAS. Ele suporta o trabalho com os dados diretamente em matrizes numpy e vários outros recursos Pythonic interessantes. No entanto, não está processando software por si só.

O PDAL tem a capacidade de usar o Python como uma linguagem de filtragem no pipeline, mas também não é um mecanismo de processamento.

Não há muito no quiver Python para LiDAR e processamento de nuvem de pontos. Acho que parte disso tem a ver com os volumes de dados normalmente processados ​​e com a resposta típica para alcançar C / C ++ quando confrontados com o desafio. Espero que, à medida que o Python melhore (o PyPy está impulsionando muitas coisas, e é a razão pela qual trabalhei para desenvolver o laspy) mais softwares de processamento de nuvem de pontos Python se tornem disponíveis. Eu acho que as perspectivas estão melhorando, mas as coisas ainda não estão lá.


7

Recentemente, lancei uma biblioteca autônoma de código aberto (MIT) (ou seja, sem dependências) chamada WhiteboxTools para executar muitos tipos de análises geoespaciais, incluindo o processamento de dados LiDAR. A biblioteca é escrita em Rust e possui amplo suporte para scripts baseados em Python . Por exemplo, o script Python a seguir usa a biblioteca WhiteboxTools para preencher os dados de cores RGB dos pontos LiDAR em um arquivo 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) 

As ferramentas de processamento específicas do LiDAR do WhiteboxTools incluem as seguintes funções:

  • BlockMaximum: cria uma varredura com máximo de bloco a partir de um arquivo LAS de entrada.
  • BlockMinimum: cria uma varredura de mínimo de bloco a partir de um arquivo LAS de entrada.
  • FilterLidarScanAngles: remove pontos em um arquivo LAS com ângulos de varredura maiores que um limite.
  • FindFlightlineEdgePoints: identifica pontos ao longo da borda de uma linha de vôo em um arquivo LAS.
  • FlightlineOverlap: lê um arquivo de ponto LiDAR (LAS) e gera uma varredura contendo o número de linhas de vôo sobrepostas em cada célula da grade.
  • LidarElevationSlice: gera todos os pontos em um arquivo de pontos LiDAR (LAS) que se encontram entre um intervalo de elevação especificado.
  • LasToAscii: Converte um ou mais arquivos LAS em arquivos de texto ASCII.
  • LidarColourize: adiciona os campos de cores vermelho, verde e azul de um arquivo LiDAR (LAS) com base em uma imagem de entrada.
  • LidarGroundPointFilter: identifica pontos de referência no conjunto de dados LiDAR.
  • LidarIdwInterpolation: interpola arquivos LAS usando um esquema de distância inversa ponderada (IDW).
  • LidarHillshade: Calcula um valor de colina para pontos em um arquivo LAS e armazena esses dados no campo RGB.
  • LidarHistogram: Cria um histograma a partir de dados LiDAR.
  • LidarInfo: imprime informações sobre um conjunto de dados LiDAR (LAS), incluindo cabeçalho, frequência de retorno do ponto e dados e informações de classificação sobre os registros de comprimento variável (VLRs) e geokeys.
  • LidarJoin: une vários arquivos LiDAR (LAS) em um único arquivo LAS.
  • LidarKappaIndex: Executa uma análise de índice de concordância kappa (KIA) nas classificações de dois arquivos LAS.
  • LidarNearestNeighbourGridding: grade arquivos LAS usando o esquema do vizinho mais próximo.
  • LidarPointDensity: Calcula o padrão espacial da densidade de pontos para um conjunto de dados LiDAR.
  • LidarPointStats: cria várias rasters resumindo a distribuição dos dados de pontos do LAS.
  • LidarRemoveDuplicates: remove pontos duplicados de um conjunto de dados LiDAR.
  • LidarRemoveOutliers: remove os outliers (pontos altos e baixos) em uma nuvem de pontos LiDAR.
  • LidarSegmentation: Segmenta uma nuvem de pontos LiDAR com base em vetores normais.
  • LidarSegmentationBasedFilter: identifica pontos de base nas nuvens de pontos LiDAR usando uma abordagem baseada em segmentação.
  • LidarTile: agrupa um arquivo LiDAR LAS em vários arquivos LAS.
  • LidarTophatTransform: executa uma transformação de cartola branca em um conjunto de dados Lidar; como uma estimativa da altura acima do solo, isso é útil para modelar o dossel da vegetação.
  • NormalVectors: calcula vetores normais para pontos em um arquivo LAS e armazena esses dados (componentes vetoriais XYZ) no campo RGB.

Além disso, existem inúmeras ferramentas para processar os DEMs que são interpolados a partir dos dados de origem LiDAR (por exemplo, denoising com preservação de recursos, imposição hídrica, etc.). Detalhes podem ser encontrados no Manual do Usuário . O código-fonte pode ser encontrado aqui , e os binários compilados estão no site de Geomorfometria e Hidrogeomática, aqui .


Uau! Ansioso para testar essas ferramentas.
Aaron

Espero que funcione para você. Envie-me um e-mail se tiver alguma dúvida.
WhiteboxDev

Presumo que LidarPointStats é semelhante ao FUSION's GridMetrics? Existe alguma documentação na qual as métricas de grade são criadas ao usar o LidarPointStats?
Aaron

@ Aaron Não tenho muita certeza da ferramenta da FUSION, pois nunca usei o software, mas ela gera o seguinte: num_points, num_pulses, z_range, intensidade_range, predom_class. Os detalhes podem ser encontrados aqui ( github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/… ) e também no manual do usuário.
WhiteboxDev

@ Aaron Eu provavelmente também deveria ter esclarecido que a ferramenta lidar_point_stats está relatando cada uma dessas estatísticas célula por célula. Ou seja, existe uma varredura produzida para cada uma das estatísticas especificadas pelo usuário como uma saída desejada. Por exemplo: lidar_point_stats ('input.las', resolução = 1.0, num_points = True, num_pulses = True)
WhiteboxDev

2

Embora não seja estritamente uma biblioteca 'Python', mas um conjunto de wrappers para outras ferramentas, em particular o GRASS, existem os 'ARSF DEM Scripts' que eu escrevi:

https://github.com/pmlrsg/arsf_dem_scripts

Um dos objetivos era fornecer um conjunto comum de funções Python para diferentes ferramentas de linha de comando (chamadas usando subprocesso) com um methodsinalizador usado para especificar a ferramenta.

Exemplo de uso para gerar uma imagem DSM, intensidade e densidade é:

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)

Existem várias ferramentas de processamento LiDAR disponíveis no wrapper GRASS Python que também podem ser usadas em vez de / além do que está disponível arsf_dem.


2

pylidaré um conjunto relativamente novo de módulos Python para processamento LiDAR. É baseado em SPDLib e RIOS e usa numpy.

Está disponível para download aqui



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.