Python提供哪些LiDAR处理工具?


22

我一直在使用FUSION和命令行FUSION Lidar Toolkit(LTK)来处理LiDAR数据。广泛的Google搜索(“ Lidar Python”)产生了libLASpyLAS作为Python LiDAR库,但是,这些库似乎仅提供对LAS数据的读写访问。

除了来自点云的冠层曲面模型之外,我对创建强度和密度图像特别感兴趣。Python中是否有一套公认的工具可以完成FUSION LTK能够完成的同类任务?


1
这不是您问题的直接答案,但是由于我一直在研究Python软件,用于从LIDAR采集的点云数据中重建植物树,也许我一直在使用的技术堆栈可以为您提供一些想法。特别是,可视化层是使用非常强大的VTK构建的。
cjauvin 2014年

ArcMap 10.1具有处理Lidar Datacloud过滤器以与其他图层一起显示和分析的功能。如上所述,C ++可能是处理数据丰富的.las文件的最佳方法。

我不知道这个答案是OP的问题。他想要使用Python的工具。如果您建议使用C ++,则应详细说明该主张。
Devdatta Tengshe 2014年

Answers:


13

laspy是另一个出色的LAS读/写软件。它支持直接在numpy数组中使用数据以及许多其他不错的Pythonic功能。但是,它本身不是在处理软件。

PDAL可以将Python用作管道内过滤语言,但这也不是处理引擎。

用于LiDAR和点云处理的Python颤振器中没有太多内容。我认为其中一些与通​​常处理的数据量以及面对挑战时C / C ++的典型响应有关。我确实希望随着Python的改进(PyPy推动了很多事情,这就是我努力开发松散的原因),更多的Python点云处理软件将可用。我认为前景正在改善,但事情还没有到位。


7

我最近发布了一个名为WhiteboxTools的开源(MIT)独立(即无依赖性)库,用于执行多种类型的地理空间分析,包括LiDAR数据处理。该库是用Rust编写的,并广泛支持基于Python的脚本。例如,以下Python脚本使用WhiteboxTools库在LAS文件中填充LiDAR点的RGB颜色数据:

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) 

WhiteboxTools的LiDAR专用处理工具包括以下功能:

  • BlockMaximum:根据输入的LAS文件创建最大块的栅格。
  • BlockMinimum:从输入LAS文件创建最小块栅格。
  • FilterLidarScanAngles:删除LAS文件中扫描角度大于阈值的点。
  • FindFlightlineEdgePoints:在LAS文件中标识沿飞行路线边缘的点。
  • FlightlineOverlap:读取LiDAR(LAS)点文件,并输出一个栅格,其中包含每个网格像元中重叠的飞行路线的数量。
  • LidarElevationSlice:输出LiDAR(LAS)点文件中位于指定海拔范围之间的所有点。
  • LasToAscii:将一个或多个LAS文件转换为ASCII文本文件。
  • LidarColourize:基于输入图像添加LiDAR(LAS)文件的红-绿-蓝颜色字段。
  • LidarGroundPointFilter:标识LiDAR数据集中的地面点。
  • LidarIdwInterpolation:使用反距离加权(IDW)方案对LAS文件进行插值。
  • LidarHillshade:计算LAS文件中点的山体阴影值,并将这些数据存储在RGB字段中。
  • LidarHistogram:从LiDAR数据创建直方图。
  • LidarInfo:打印有关LiDAR(LAS)数据集的信息,包括标题,点返回频率和分类数据,以及有关可变长度记录(VLR)和地理关键字的信息。
  • LidarJoin:将多个LiDAR(LAS)文件连接到单个LAS文件中。
  • LidarKappaIndex:对两个LAS文件的分类执行协议的kappa索引(KIA)分析。
  • LidarNearestNeighbourGridding:使用最近邻居方案对LAS文件进行网格化。
  • LidarPointDensity:计算LiDAR数据集的点密度的空间模式。
  • LidarPointStats:创建几个栅格,概述LAS点数据的分布。
  • LidarRemoveDuplicates:从LiDAR数据集中删除重复点。
  • LidarRemoveOutliers:移除LiDAR点云中的离群值(高点和低点)。
  • LidarSegmentation:根据法线向量分割LiDAR点云。
  • LidarSegmentationBasedFilter:使用基于分段的方法识别LiDAR点云内的地面点。
  • LidarTile:将LiDAR LAS文件平铺为多个LAS文件。
  • LidarTophatTransform:对Lidar数据集执行白色礼帽转换;作为对地面高度的估计,这对于建模植被冠层很有用。
  • NormalVectors:计算LAS文件中点的法线向量,并将这些数据(XYZ向量分量)存储在RGB字段中。

此外,还有许多用于处理从LiDAR源数据中插入的DEM的工具(例如,保留特征的去噪,水电执法等)。详细信息可以在用户手册中找到。源代码可以发现这里和编译的二进制文件是Geomorphometry和Hydrogeomatics网站上,在这里


哇!期待测试出这些工具。
亚伦

希望对您有用。如有任何疑问,请给我发送电子邮件。
WhiteboxDev

我认为LidarPointStats与FUSION相似GridMetrics吗?使用LidarPointStats时,是否有任何文档可用于创建网格度量?
亚伦

@Aaron我不太了解FUSION的工具,因为我从未使用过该软件,但是该工具会输出以下内容:num_points,num_pulses,z_range,intensity_range,predom_class。可以在这里找到详细信息(github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/…)以及用户手册。
WhiteboxDev

@Aaron我可能还应该澄清一下,lidar_point_stats工具工具正在逐个单元地报告这些统计信息。即,为用户指定为期望输出的每个统计数据生成了一个栅格。例如:lidar_point_stats('input.las',resolution = 1.0,num_points = True,num_pulses = True)
WhiteboxDev

2

尽管不是严格意义上的“ Python”库,而是其他工具(尤其是GRASS)的一组包装器,但我编写了“ ARSF DEM脚本”:

https://github.com/pmlrsg/arsf_dem_scripts

目的之一是为不同的命令行工具(称为使用子进程)提供一组通用的Python函数,并带有method用于指定工具的标志。

生成DSM,强度和密度图像的示例用法是:

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)

通过GRASS Python包装器可以使用很多LiDAR处理工具,这些工具也可以代替/除了可以通过使用的工具之外arsf_dem




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.