Quels outils de traitement LiDAR sont disponibles en Python?

22

J'utilise FUSION et la ligne de commande FUSION Lidar Toolkit (LTK) pour traiter les données LiDAR. Une large recherche sur Google ("Lidar Python") a donné libLAS et pyLAS en tant que bibliothèques Python LiDAR, cependant, celles-ci semblent fournir uniquement un accès en lecture et en écriture aux données LAS.

Je suis particulièrement intéressé par la création d'images d'intensité et de densité en plus des modèles de surface de la canopée à partir de nuages ​​de points. Existe-t-il un ensemble d'outils généralement acceptés en Python qui peuvent accomplir le même genre de tâches que FUSION LTK est capable de faire?

Aaron
la source
1
Ce n'est pas une réponse directe à votre question, mais comme je travaille sur un logiciel Python pour la reconstruction d'arbres botaniques à partir de données de nuage de points acquises par LIDAR, la pile technologique que j'utilise pourrait peut-être vous donner quelques idées. En particulier, la couche de visualisation est construite à l'aide de VTK, qui est très puissant.
cjauvin
ArcMap 10.1 a des utilitaires pour gérer les filtres Lidar Datacloud pour l'affichage et l'analyse avec d'autres couches. C ++ est probablement la meilleure méthode pour gérer les fichiers .las riches en données comme recommandé ci-dessus.
Je ne vois pas comment cette réponse est la question du PO. Il veut un outil en Python. Si vous proposez C ++, vous devez sauvegarder cette revendication avec une raison détaillée.
Devdatta Tengshe

Réponses:

13

laspy est un autre bon logiciel de lecture / écriture LAS. Il prend en charge le travail avec les données directement dans des tableaux numpy et un certain nombre d'autres fonctionnalités Pythonic intéressantes. Cependant, il ne traite pas de logiciel en soi.

PDAL a la capacité d'utiliser Python comme langage de filtrage en cours de développement, mais ce n'est pas non plus un moteur de traitement.

Il n'y a pas trop dans le carquois Python pour le traitement LiDAR et le nuage de points. Je pense que cela a à voir avec les volumes de données généralement traités et la réponse typique à atteindre pour C / C ++ face au défi. J'espère qu'au fur et à mesure que Python s'améliorera (PyPy conduit beaucoup de choses, et c'est la raison pour laquelle j'ai travaillé pour que laspy soit développé), plus de logiciels de traitement de nuage de points Python seront disponibles. Je pense que les perspectives s'améliorent mais les choses ne sont pas encore tout à fait là.

Howard Butler
la source
7

J'ai récemment publié une bibliothèque autonome open source (MIT) (c'est-à-dire sans dépendances) appelée WhiteboxTools pour effectuer de nombreux types d'analyses géospatiales, y compris le traitement des données LiDAR. La bibliothèque est écrite en Rust et prend en charge de manière approfondie les scripts basés sur Python . Par exemple, le script Python suivant utilise la bibliothèque WhiteboxTools pour remplir les données de couleur RVB des points LiDAR dans un fichier 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) 

Les outils de traitement spécifiques à LiDAR de WhiteboxTools incluent les fonctions suivantes:

  • BlockMaximum: crée un raster de bloc maximum à partir d'un fichier LAS d'entrée.
  • BlockMinimum: crée un raster de bloc minimum à partir d'un fichier LAS d'entrée.
  • FilterLidarScanAngles: supprime les points d'un fichier LAS avec des angles de balayage supérieurs à un seuil.
  • FindFlightlineEdgePoints: identifie les points le long du bord d'une ligne de vol dans un fichier LAS.
  • FlightlineOverlap: lit un fichier de points LiDAR (LAS) et génère un raster contenant le nombre de lignes de vol se chevauchant dans chaque cellule de la grille.
  • LidarElevationSlice: génère tous les points d'un fichier de points LiDAR (LAS) situés entre une plage d'altitude spécifiée.
  • LasToAscii: convertit un ou plusieurs fichiers LAS en fichiers texte ASCII.
  • LidarColourize: ajoute les champs de couleur rouge-vert-bleu d'un fichier LiDAR (LAS) en fonction d'une image d'entrée.
  • LidarGroundPointFilter: identifie les points au sol dans l'ensemble de données LiDAR.
  • LidarIdwInterpolation: interpole les fichiers LAS à l'aide d'un schéma pondéré à distance inverse (IDW).
  • LidarHillshade: calcule une valeur d'ombrage pour les points d'un fichier LAS et stocke ces données dans le champ RVB.
  • LidarHistogram: crée un histogramme à partir des données LiDAR.
  • LidarInfo: imprime des informations sur un ensemble de données LiDAR (LAS), y compris l'en-tête, la fréquence de retour des points, et des données de classification et des informations sur les enregistrements de longueur variable (VLR) et les geokeys.
  • LidarJoin: joint plusieurs fichiers LiDAR (LAS) en un seul fichier LAS.
  • LidarKappaIndex: effectue une analyse de l'indice d'accord kappa (KIA) sur les classifications de deux fichiers LAS.
  • LidarNearestNeighbourGridding: Grille les fichiers LAS en utilisant le schéma du plus proche voisin.
  • LidarPointDensity: calcule le modèle spatial de densité de points pour un ensemble de données LiDAR.
  • LidarPointStats: crée plusieurs rasters résumant la distribution des données de points LAS.
  • LidarRemoveDuplicates: supprime les points en double d'un ensemble de données LiDAR.
  • LidarRemoveOutliers: supprime les valeurs aberrantes (points hauts et bas) dans un nuage de points LiDAR.
  • LidarSegmentation: segmente un nuage de points LiDAR basé sur des vecteurs normaux.
  • LidarSegmentationBasedFilter: identifie les points au sol dans les nuages ​​de points LiDAR en utilisant une approche basée sur la segmentation.
  • LidarTile: tuile un fichier LAS LiDAR en plusieurs fichiers LAS.
  • LidarTophatTransform: effectue une transformation de chapeau blanc sur un ensemble de données Lidar; comme estimation de la hauteur au-dessus du sol, ceci est utile pour modéliser le couvert végétal.
  • NormalVectors: calcule des vecteurs normaux pour les points d'un fichier LAS et stocke ces données (composantes vectorielles XYZ) dans le champ RVB.

De plus, il existe de nombreux outils pour traiter les DEM qui sont interpolés à partir des données source LiDAR (par exemple, débruitage préservant les fonctionnalités, application hydraulique, etc.). Les détails peuvent être trouvés dans le manuel de l' utilisateur . Le code source peut être trouvé ici , et les binaires compilés sont sur le site Web Geomorphometry and Hydrogeomatics, ici .

WhiteboxDev
la source
Hou la la! Au plaisir de tester ces outils.
Aaron
J'espère que cela fonctionnera pour vous. Envoyez-moi un e-mail si vous avez des questions.
WhiteboxDev
Je suppose que LidarPointStats est similaire à FUSION GridMetrics? Existe-t-il une documentation dans laquelle les mesures de grille sont créées lors de l'utilisation de LidarPointStats?
Aaron
@Aaron Je ne suis pas trop sûr de l'outil de FUSION car je n'ai jamais utilisé le logiciel, mais cet outil génère les éléments suivants: num_points, num_pulses, z_range, intensité_range, predom_class. Les détails peuvent être trouvés ici ( github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/… ) et également dans le manuel de l'utilisateur.
WhiteboxDev
@Aaron J'aurais probablement dû également préciser que l'outil outil lidar_point_stats rapporte chacune de ces statistiques cellule par cellule. Autrement dit, il existe un raster produit pour chacune des statistiques que l'utilisateur spécifie comme sortie souhaitée. Par exemple: lidar_point_stats ('input.las', resolution = 1.0, num_points = True, num_pulses = True)
WhiteboxDev
2

Bien qu'il ne s'agisse pas strictement d'une bibliothèque 'Python' mais plutôt d'un ensemble de wrappers pour d'autres outils, en particulier GRASS, il y a les 'Scripts DEM ARSF' que j'ai écrits:

https://github.com/pmlrsg/arsf_dem_scripts

L'un des objectifs était de fournir un ensemble commun de fonctions Python pour différents outils de ligne de commande (appelés à l'aide de sous-processus) avec un methodindicateur utilisé pour spécifier l'outil.

Exemple d'utilisation pour générer une image DSM, d'intensité et de 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)

Il existe un certain nombre d'outils de traitement LiDAR disponibles via le wrapper GRASS Python qui pourraient également être utilisés à la place de / en plus de ce qui est disponible via arsf_dem.

Danclewley
la source
2

pylidarest un ensemble relativement nouveau de modules Python pour le traitement LiDAR. Il est basé sur SPDLib et RIOS et utilise numpy.

Il est disponible en téléchargement à partir d' ici

dmci
la source
2

Commencer à jouer avec les outils trouvés ici. Cela a été très utile. https://github.com/brycefrank/pyfor

bw4sz
la source
Excellent lien! Je suis particulièrement impatient de jouer avec les métriques de la grille.
Aaron
1

Si vous regardez le code source de la boîte à outils QGIS pour LAStools (qui fait maintenant partie du framework de plugin de traitement), vous pouvez voir comment appeler un logiciel externe (ici LAStools ) pour effectuer des opérations de traitement LiDAR.

LAStools
la source