LIdar360冠层高度模型(CHM)处理流程

软件安装

从北京数字绿土科技有限公司官方网站下载最新版 LiDAR360 软件,软件安装和激活请参考用户手册。

新手用户在软件的七天免费试用期内,完全有时间掌握基础操作并处理点云数据。

第一章 数据加载及其预处理

1 数据导入

1.1 导入单个点云数据的方法为:文件 > 数据 > 加载数据,然后选择 LiDAR360 支持的点云文件格式点击确定;也可以直接将一个或多个点 云数据直接拖入到软件界面上,软件将自动加载点云数据。

拖放完毕后将会弹出下图所示的界面,此时直接单击应用即可。之 后会在相应文件夹下生成 LiData 文件,该文件将会自动加载到软件中, 之后对该点云进行的任何操作都不会影响原始的 las 文件。

2.数据的预处理

2.1去噪

点击 机载林业 > 去噪,使用默认参数设置,点击确定。

PS:这里不选择重采样的原因是,本数据之前已经预处理过,点云数据具有代表性

重采样的主要作用是减少点云数据中不必要的点数,以降低其他处理功能的计算负担。重采样可以通过不同的方法进行,包括设置最小点间距、采样率或使用Octree(八叉树)细分级别来控制保留的点数。重采样的目的是在一个较大的数据集中创建一个更小但更具代表性的点云,以便于更高效的数据处理和分析。重采样功能在数据管理模块中,可以通过点击“数据管理 > 点云工具 > 重采样”来访问。

去噪则专注于移除点云数据中的噪声点,这些噪声点可能是由于测量误差、反射异常或其他干扰因素产生的。去噪功能通过统计分析方法识别并去除这些异常点,从而提高数据的质量。去噪处理后,点云数据更加干净,为后续的分析和建模提供更准确的数据基础。去噪功能同样位于数据管理模块,可以通过点击“数据管理 > 点云工具 > 去噪”来访问。

总结来说,重采样主要是为了减少数据量并提高处理效率,而去噪则是为了提高数据的准确性和质量。两者都是点云数据处理中不可或缺的步骤。

2.2点面点分类

点击 机载林业 > 地面点分类,使用默认参数设置,点击确定。

2.3生成 DEM

点击机载林业> 数字高程模型,使用默认参数设置,点击确定。

以地面点分类后的数据作为输入。分辨率大小根据自己的实验要求更改。

这里详细解释一下三种插值方法

  1. 反距离权重插值(Inverse Distance Weighting, IDW): 这种方法依据地理学第一定律,通过附近点计算栅格单元的值,并根据点到栅格单元中心点的距离来确定加权平均值。用户需要设置权重值,权重是采样点到像素中心距离的幂值,控制采样点高程对像素中心的影响程度。此外,可以设置可变半径或固定半径来定义各个栅格像元值插值的输入点。(想象一下,你在一个陌生的城市,想要找到最近的咖啡馆。你可能会向周围的人询问,而那些离你近的人提供的信息会比离你远的人更有影响力。IDW就是这样工作的,它认为距离我们越近的点,对我们想要预测的位置的影响越大。所以,如果你想要计算一个点的高程,你会看它周围的点,最近的点会有更大的权重。)

  2. 克里金插值(Kriging): 克里金插值法计算优化的协方差,并使用高斯过程插值栅格值。这种方法同样可以使用可变半径或固定半径来定义各个栅格像元值插值的输入点。克里金插值是一种地统计学方法,它模型化了空间变量的变异性,并提供了误差估计。(克里金插值更像是一个有经验的向导,它不仅考虑了距离,还考虑了地形的模式和趋势。比如,你知道山脉通常是连续的,河流通常遵循特定的流向。克里金插值会利用这些模式来预测未知点的高程,就像向导会根据地形特征带你找到目的地一样。)

  3. 不规则三角网插值(Triangulated Irregular Network, TIN): TIN插值方法从最近的邻近点组成的多个三角形共同形成的表面上提取栅格单元值。LiDAR360支持两种构网方式:狄洛尼(Delaunay)三角网和无凹坑TIN。狄洛尼三角网使用传统的逐点插入法构建,所有点云全部参与构网。无凹坑TIN剔除高程异常的点云,可以生成不带有明显尖峰的三角网。用户可以设置临界边长和插入缓冲区来控制三角网的构建。(想象你有一个由橡皮筋连接的点阵,这些点就是你知道高程的具体位置。当你从这些点拉伸橡皮筋,它们会形成一个不规则的三角网。TIN插值就是基于这些三角面来估算未知点的高程。这种方法很适合模拟自然地形,因为它可以捕捉到像山谷和山脊这样的复杂特征。)

这些插值方法各有优势,选择哪种方法取决于数据的特性和用户的具体需求。例如,IDW方法计算简单,适用于各种地形条件,而克里金插值则提供了更为精确的估计,特别是在数据点分布不均匀的情况下。TIN方法则适用于生成较为复杂的地形表面,能够更好地表示地形的细微变化。在实际应用中,用户可能需要根据点云数据的密度、地形的复杂程度以及对精度的要求来选择最合适的插值方法。

这是DEM结果,本研究使用的是第三种插值方法,因为本研究区地形起伏较大,并且点云数据过于稀疏

第二章 生成CHM

2.1生成DSM

点击机载林业 > 数字表面模型,分辨率设置为 1米(根据自己的实验需求进行设置),插值方式选择 IDW,其 他参数采用默认设置,点击确定。

2.2 生成CHM

2.4导入ARCgis

当数据被导入ArcGIS并进行分析时,如果它们呈现出标准的正态分布,这通常表明数据集是准确无误的。这种分布形状说明数据点紧密围绕平均值聚集,且极端值较少,这是我们期待从精确测量中得到的结果

### 使用 Open3D 创建或处理高度模型 Open3D 是一款强大的开源库,适用于三维数据处理和可视化。为了创建或处理高度模型 (CHM),通常需要先获取点云数据并对其进行预处理。 #### 获取点云数据 可以使用激光雷达或其他传感器采集森林区域的高分辨率点云数据。这些数据可以通过文件读取的方式加载到程序中: ```python import open3d as o3d # 加载点云数据 point_cloud = o3d.io.read_point_cloud("path_to_lidar_data.ply") o3d.visualization.draw_geometries([point_cloud]) ``` #### 预处理点云数据 在实际应用中,原始点云可能存在噪声和其他不需要的信息。因此,在计算 CHM 前应执行滤波和平滑操作来提高精度[^1]。 ```python # 统计滤波去除离群点 cl, ind = point_cloud.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) inlier_cloud = point_cloud.select_by_index(ind) outlier_cloud = point_cloud.select_by_index(ind, invert=True) o3d.visualization.draw_geometries([inlier_cloud]) # 显示过滤后的点云 ``` #### 计算地面点与植被点分离 对于 CHM 的生成来说,区分地面点和树木顶部非常重要。这一步骤可通过分类算法实现,比如 RANSAC 平面拟合方法找到地形表面;之后利用距离阈值筛选出高于一定高度以上的植物部分。 ```python plane_model, inliers = inlier_cloud.segment_plane(distance_threshold=0.3, ransac_n=3, num_iterations=1000) ground_points = inlier_cloud.select_by_index(inliers) vegetation_points = inlier_cloud.select_by_index(inliers, invert=True) o3d.visualization.draw_geometries([ground_points], window_name="Ground Points") o3d.visualization.draw_geometries([vegetation_points], window_name="Vegetation Points") ``` #### 构建高度模型 一旦获得了纯净的植被点集,则可以根据其 z 轴坐标减去对应位置处的地表高度值得到相对高度值,并以此为基础建立栅格化的 CHM 图像表示形式。 ```python def create_chm(veg_pts, ground_pts, grid_size=0.5): import numpy as np veg_xyz = np.asarray(veg_pts.points) ground_xyz = np.asarray(ground_pts.points) min_bound = np.min(np.vstack((veg_xyz[:, :2], ground_xyz[:, :2])), axis=0) - grid_size / 2. max_bound = np.max(np.vstack((veg_xyz[:, :2], ground_xyz[:, :2])), axis=0) + grid_size / 2. x_bins = int(((max_bound[0]-min_bound[0])/grid_size)+1.) y_bins = int(((max_bound[1]-min_bound[1])/grid_size)+1.) chm_grid = np.zeros(shape=(y_bins,x_bins)) for i in range(len(veg_xyz)): xi = int((veg_xyz[i][0]-min_bound[0])/grid_size) yi = int((veg_xyz[i][1]-min_bound[1])/grid_size) if 0<=xi<x_bins and 0<=yi<y_bins: height_diff = veg_xyz[i][2]-(np.mean(ground_xyz[(abs(ground_xyz[:,:2]-veg_xyz[i][:2]).sum(axis=-1)<grid_size),2])) chm_grid[yi,xi]=height_diff return chm_grid chm_image = create_chm(vegetation_points, ground_points) plt.imshow(chm_image,cmap='viridis') plt.colorbar(label='Height above ground(m)') plt.title('Canopy Height Model(CHM)') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值