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

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

评论

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

ArcMap 10.1具有实用程序,可处理激光雷达数据云过滤器,以便与其他图层一起显示和分析。如上所述,C ++可能是处理数据丰富的.las文件的最佳方法。

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

#1 楼

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

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

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

#2 楼

我最近发布了一个名为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:使用LAS文件插值
LidarHillshade:计算LAS文件中点的山体阴影值,并将这些数据存储在RGB字段中。
LidarHistogram:根据LiDAR数据创建直方图。
/> LidarInfo:打印有关LiDAR(LAS)数据集的信息,包括标题,点返回频率和分类数据,以及有关可变长度记录(VLR)和地理关键字的信息。
LidarJoin:将多个LiDAR(LAS)文件连接到单个LAS文件中。
LidarKappaIndex:对两个LAS文件的类别执行kappa协议索引(KIA)分析。
LidarNearestNeighbourGridding:使用最近的网格对LAS文件进行网格化-neighbour方案。
LidarPointDensity:计算LiDAR数据集的点密度的空间模式。
LidarPointStats:创建总结LAS点数据分布的多个栅格。
LidarRemoveDuplicates:从中删除重复点LiDAR数据集。
LidarRemoveOutliers:移除LiDAR点云中的离群值。
LidarSegmentation:根据法向矢量对LiDAR点云进行分段。
LidarSegmentationBasedFilter:标识地面点在LiDAR点云中使用基于分段的方法。
LidarTile:将LiDAR LAS文件平铺为多个LAS文件。
LidarTophatTransform:对Lidar数据集执行白色礼帽变换;
法向矢量:计算LAS文件中点的法向矢量,并将这些数据(XYZ矢量分量)存储在RGB字段中。

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

评论


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

–亚伦♦
18-3-21的1:37

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

– WhiteboxDev
18年3月21日在11:05

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

–亚伦♦
18年3月21日在20:01

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

– WhiteboxDev
18年3月21日在22:20

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

– WhiteboxDev
18-3-21在22:27



#3 楼

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

https://github.com / pmlrsg / arsf_dem_scripts

目的之一是为带有method标志的不同命令行工具(称为使用子进程)提供一组通用的Python函数。
<生成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可用的工具之外。

#4 楼

pylidar是用于LiDAR处理的一组相对较新的Python模块。它基于SPDLib和RIOS,并使用numpy。

可从此处下载

#5 楼

如果查看LAStools(现在是处理插件框架的一部分)的QGIS工具箱的源代码,您将看到如何调用外部软件(在这里为LAStools)来执行LiDAR处理操作。

#6 楼

开始尝试使用此处找到的工具。它非常有用。 https://github.com/brycefrank/pyfor

评论


优秀的链接!我特别期待使用网格指标。

–亚伦♦
18年11月27日在1:03