尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

lidR 树冠度量计算:从点云分割到每木属性的完整指南

lidR 树冠度量计算:从点云分割到每木属性的完整指南 lidR 树冠度量计算从点云分割到每木属性的完整指南【免费下载链接】lidRAirborne LiDAR data manipulation and visualisation for forestry application项目地址: https://gitcode.com/gh_mirrors/li/lidRlidR 是 R 语言中面向林业应用的机载 LiDAR 点云处理与可视化工具包而**树冠度量计算crown metrics**是它最强大的功能之一在完成单木分割后逐棵计算树高、冠幅面积、点云数量乃至三维形状特征输出为可直接用于统计建模的空间数据。无论你是林业研究者、遥感初学者还是 GIS 从业者本指南将带你从零走通点云 → 树顶检测 → 树冠分割 → 每木属性计算的完整流程学会用 crown_metrics 快速产出立木材积、生物量等模型的输入变量。什么是树冠度量计算简单来说树冠度量计算就是以每一棵树为单位从点云中提取描述该树的统计指标。与之相对的像素度量pixel metrics是把区域切成规则网格、按格子计算指标而树冠度量更符合林业工作者的思维——关心的是这棵树多高、冠有多大、有多少点。在 lidR 中这一功能的核心函数是crown_metrics()它的代码位于 R/metrics_crowns.R。函数签名如下crown_metrics(las, func, geom point, concaveman c(3, 0), attribute treeID)其中attribute指定点云中记录树编号的字段默认treeIDgeom决定输出的几何形态func则是你想为每棵树计算的指标表达式。准备工作安装 lidR 并读取点云开始之前请确保已安装 lidR 及其依赖install.packages(lidR) library(lidR)使用包自带的示例数据MixedConifer.laz混合针叶林数据进行演示读取时通过-drop_z_below 0过滤掉地面以下的点LASfile - system.file(extdata, MixedConifer.laz, package lidR) las - readLAS(LASfile, filter -drop_z_below 0)这份数据其实已经完成了单木分割点云中带有treeID字段可以直接体验crown_metrics()。不过为了讲清完整流程我们先从没有树 ID的状态出发一步步构建。第一步用 locate_trees 检测单木位置树冠度量计算的前提是知道每棵树在哪里。最常用的方法是用局部最大值滤波LMF检测树顶函数位于 R/locate_trees.R。先构建冠层高度模型CHM再在 CHM 上找树顶chm - rasterize_canopy(las, res 0.5, p2r(0.3)) ttops - locate_trees(chm, lmf(ws 5, hmin 2))lmf()的ws是搜索窗口大小米hmin是最低树高阈值。locate_trees()返回一个sf空间点对象每行代表一棵树包含树顶坐标和树高Z。窗口大小设置得越接近真实冠幅检测效果越好关于窗口与树高关系的细节可参考 R/algorithm-itd.R 中的实现与注释。第二步用 segment_trees 分割单木树冠有了树顶作为种子下一步就是把点云按树划开。segment_trees()见 R/segment_trees.R配合分割算法使用最经典的是 Dalponte Coomes (2016) 的区域生长算法las - segment_trees(las, dalponte2016(chm, ttops))dalponte2016()是种子 区域生长算法从每个树顶出发按照th_seed、th_cr等生长阈值逐步吸收相邻像素最终形成树冠多边形再映射回点云。其 C 实现位于 R/algorithm-its.R速度比原始 R 版本快几个数量级。分割完成后点云就多了一列treeID每棵树的点有了唯一编号plot(las, color treeID)其他可选算法还有li2012()、silva2016()、watershed()以及基于点云的li2012变体可根据数据特点选择。分割参数影响较大建议先在小区块上尝试再用LAScatalog批量处理。第三步用 crown_metrics 计算每木属性现在万事俱备可以计算每棵树的属性了。最简单的方式是使用内置标准度量.stdtreemetrics它返回树高Z、点数npoints和凸包面积convhull_areametrics - crown_metrics(las, .stdtreemetrics)metrics是一个sf对象每一行对应一棵树。直接在控制台查看前几行head(metrics)你还可以自己写度量表达式。例如想同时知道树高和 85% 分位高度metrics - crown_metrics(las, ~list(maxz max(Z), q85 quantile(Z, 0.85)))度量表达式可任意组合Z、Intensity、ReturnNumber等点云字段都能参与计算代码实现参考 R/metrics_template.R 中的template_metrics()。四种树冠几何形态点、凸包、凹包、包围盒geom参数控制输出几何是树冠度量计算中最灵活的部分geom point默认输出树顶位置点包含树高信息geom convex输出凸包多边形即包围树冠点的最小凸多边形geom concave输出凹包多边形更贴合真实冠形可通过concaveman c(3, 0)调节凹凸程度geom bbox输出轴对齐包围盒矩形。crown_metrics(las, .stdtreemetrics, geom convex) # 凸包 crown_metrics(las, .stdtreemetrics, geom concave) # 凹包 crown_metrics(las, .stdtreemetrics, geom bbox) # 包围盒凸包/凹包的面积可直接作为冠幅面积包围盒则适合快速估算冠幅上下限。几何构造代码见 R/metrics_stdmetrics.R 中的stdtreeapex、stdtreehullconvex等内部函数。用 stdshapemetrics 分析树冠三维形状除了高度和面积树冠的三维形状对森林结构研究也很有价值。lidR 提供.stdshapemetrics基于点云协方差矩阵的特征值分解计算线性度、平面度、球状度、各向异性等 9 个形状指标参考 Lucas et al. 2019shape - crown_metrics(las, .stdshapemetrics)例如linearity线性度反映树冠是否呈细长状sphericity球状度反映树冠接近球体的程度curvature曲率可用于区分针叶与阔叶树种。这些指标是机器学习和生态学研究的高质量特征。自定义度量写出你的每木指标函数内置度量不够用时可以定义任意函数。比如计算强度加权平均高myCrownMetrics - function(z, i) { list( zmax max(z), zwimean sum(z * i) / sum(i), # 强度加权平均高 crown_area length(z) # 点数作为冠幅代理 ) } metrics - crown_metrics(las, myCrownMetrics(Z, Intensity))函数返回的命名列表会自动成为输出表的列。这一机制与pixel_metrics、cloud_metrics等共享同一套模板引擎官方文档见 man/aggregate.Rd。大规模区域LAScatalog 上的树冠度量计算面对整片林场级别的海量数据crown_metrics()同样支持LAScatalog对象见 R/engine.R 的目录引擎自动分块并行处理并合并结果ctg - readLAScatalog(path/to/laz/files/) metrics - crown_metrics(ctg, .stdtreemetrics, geom convex)目录引擎会智能切块、自动处理块间缓冲以避免树冠被切开处理时自动合并输出具体机制可查看 R/catalog_apply.R 与 R/engine_chunks.R。这是 lidR 从实验室工具走向生产环境的关键能力。常见问题与排查技巧报错 The trees are not segmented yet说明点云还没有treeID先运行segment_trees()返回 NULL 并提示 No tree found分割参数过严或数据中没有符合条件的树可调低hmin、放宽th_seed凹包出现无效多边形concave模式下偶发的边界情况会触发警告并自动剔除属正常现象ID 不唯一分块处理时可用uniqueness gpstime或bitmerge生成全局唯一树 ID。总结通过locate_trees()检测树顶、segment_trees()分割树冠、crown_metrics()计算每木属性lidR 把从点云到每木属性这条经典林业分析链路压缩成了三行代码。配合四种几何形态、内置标准度量与自定义函数以及LAScatalog的海量数据支撑树冠度量计算可以轻松覆盖从单木研究到区域清查的各种场景。现在就加载一份数据试试吧下一篇文章我们将探讨如何把这些每木属性用于生物量建模与碳储量估算。快速回顾① 读点云 → ② 建 CHM 找树顶 → ③ 分割树冠得到 treeID → ④ crown_metrics 计算属性 → ⑤ 导出为 sf 空间数据用于建模分析。【免费下载链接】lidRAirborne LiDAR data manipulation and visualisation for forestry application项目地址: https://gitcode.com/gh_mirrors/li/lidR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表