主要内容

从航空激光雷达数据中提取森林指标和单株树属性

这个例子展示了如何从航空激光雷达数据中提取森林指标和单个树的属性。

森林研究和应用越来越多地利用从机载激光扫描系统获得的激光雷达数据。来自高密度激光雷达的点云数据不仅可以测量森林指标,还可以测量单个树木的属性。

本例使用机载激光雷达系统捕获的LAZ文件中的点云数据作为输入。在本例中,您首先通过将点云数据分类为地面和植被点来提取森林指标,然后通过将植被点分割为单个树来提取单个树的属性。该图提供了该过程的概述。

加载和可视化数据

解压缩forestData.zip到一个临时目录,并从LAZ文件加载点云数据,forestData.laz,进入MATLAB®工作区。资料来自开放地形资料集[1].点云主要包含地面和植被点。方法将点云数据加载到工作区中readPointCloud的功能lasFileReader对象。来可视化点云pcshow函数。

dataFolder = fullfile(tempdir,“forestData”, filesep);dataFile = dataFolder +“forestData.laz”检查文件夹和数据文件是否已经存在folderExists = exists (dataFolder,“dir”);fileExists = exists (dataFile,“文件”);创建一个新的文件夹,如果它不存在。如果~ folderExists mkdir (dataFolder);结束%如果航空数据文件不存在,则提取它如果~ fileExists解压(“forestData.zip”, dataFolder);结束从文件中读取LAZ数据lasReader = lasFileReader(dataFile);读取点云以及相应的扫描角度信息[ptCloud,pointAttributes] = readPointCloud(lasReader,“属性”“ScanAngle”);可视化输入点云图pcshow(ptCloud.Location)“输入点云”

段地面

地面分割是分离植被数据,提取森林指标的预处理步骤。方法将从LAZ文件加载的数据分割为接地点和非接地点segmentGroundSMRF函数。

分割接地点,提取非接地点和接地点groundPtsIdx = segmentGroundSMRF(ptCloud);nonGroundPtCloud = select(ptCloud,~groundPtsIdx);groundPtCloud = select(ptCloud,groundPtsIdx);分别用洋红色和绿色可视化非接地点和接地点。图pcshowpair(nonGroundPtCloud,groundPtCloud)分割的非接地点和接地点

仰角归一化

使用海拔归一化来消除地形对植被数据的影响。使用高度归一化的点作为输入来计算森林指标和树属性。这些是海拔正常化的步骤。

  1. 方法消除x轴和y轴上的重复点(如果有的话)groupsummary函数。

  2. 方法创建插值scatteredInterpolant对象,以估计点云数据中每个点的地面。

  3. 将每个点的高程归一化,方法是用原始高程减去插值后的地面高程。

groundPoints = groundPtCloud.Location;消除沿x轴和y轴的重复点[uniqueZ,uniqueXY] = groupsummary(groundPoints(:,3),groundPoints(:,1:2),@mean);uniqueXY = [uniqueXY{:}];创建插值,并使用它来估计每一点的地面高程F = scatteredInterpolant(double(uniqueXY),double(uniqueZ),“自然”);estElevation = F(double(ptCloud.Location(:,1)),double(ptCloud.Location(:,2)));用地面归一化标高normalizedPoints = ptCloud.Location;normalizedPoints(:,3) = normalizedPoints(:,3) - estElevation;可视化归一化点图pcshow(normalizedPoints) title(“归一化高程点云”

提取森林指标

方法从归一化点提取林度量helperExtractForestMetricsHelper函数,作为支持文件附加到本示例中。助手函数首先根据所提供的数据将点云划分为网格gridSize,然后计算森林指标。辅助函数假设所有归一化高度低于cutoffHeight是地面,剩下的点是植被。计算这些森林指标。

  • 树冠盖(CC) -林冠覆盖2为树冠垂直投影所覆盖森林的比例。用植被回归与总回归数的比值来计算。

  • 间隙分数(GF) -差距分数3.)是光线穿过树冠而不碰到树叶或其他植物元素的概率。将其计算为地面收益与总收益的比值。

  • 叶面积指数(LAI) -叶面积指数3.为单位地面面积上的单侧叶面积。LAI值使用该方程计算 - 因为 ln 女朋友 k ,在那里为平均扫描角度,女朋友间隙分数,和k消光系数,消光系数与叶角分布密切相关。

设置网格大小为每像素10米,cutOffHeight为2米gridSize = 10;cutOffHeight = 2;leafAngDistribution = 0.5;%提取森林指标[canopyCover,gapFraction,leafAreaIndex] = helperExtractForestMetrics(normalizedPoints,...pointAttributes.ScanAngle、gridSize cutOffHeight leafAngDistribution);可视化森林度量hForestMetrics = figure;axCC = subplot(2,2,1,Parent=hForestMetrics);axCC。位置= [0.05 0.51 0.4 0.4];显示亮度图像(canopyCover、家长= axCC)标题(axCC,“树冠覆盖”)轴colormap(灰色)axGF = subplot(2,2,2,Parent=hForestMetrics);axGF。位置= [0.55 0.51 0.4 0.4];显示亮度图像(gapFraction“父”axGF)标题(axGF“差距分数”)轴colormap(gray) axLAI = subplot(2,2,[3 4],Parent=hForestMetrics);axLAI。位置= [0.3 0.02 0.4 0.4];显示亮度图像(leafAreaIndex、家长= axLAI)标题(axLAI,“叶面积指数”)轴colormap(灰色)

生成冠层高度模型(CHM)

树冠高度模型(CHMs)是树木、建筑物和其他结构高于地面地形的高度的栅格表示。使用CHM作为树检测和分割的输入。方法从规范化的高度值生成CHMpc2dem函数。

设置网格大小为每像素0.5米gridRes = 0.5;%生成CHMcanopyModel = pc2dem(pointCloud(normalizedPoints),gridRes,拐角fillmethod =“马克斯”);将无效和负的CHM值剪辑为零华冠模型(isnan(华冠模型)|华冠模型<0)= 0;执行高斯平滑去除噪声效果H = fspecial(“高斯”, 5 [5], 1);华冠模型= imfilter(华冠模型,H,“复制”“相同”);可视化CHM图imagesc(canopyModel)“树冠高度模型”)轴colormap(灰色)

探测树顶

方法检测树顶helperDetectTreeTopsHelper函数,作为支持文件附加到本示例中。helper函数通过在可变窗口大小中查找局部最大值来检测树顶[4在CHM中。对于树顶检测,helper函数只考虑归一化高度大于的点minTreeHeight

将minTreeHeight设置为5米minTreeHeight = 5;%检测树顶[treeTopRowId,treeTopColId] = helperDetectTreeTops(canopyModel,gridRes,minTreeHeight);形象化树梢图imagesc(canopyModel)保持情节(treeTopColId treeTopRowId,“处方”MarkerSize = 3)标题(“检测到树顶的CHM”)轴colormap (“灰色”

分割单个树

方法分割单个树helperSegmentTreesHelper函数,作为支持文件附加到本示例中。辅助函数利用标记控制的分水岭分割[5来分割单个的树。首先,该函数创建一个二值标记图像,其中树顶位置由值指示1.然后,函数通过最小值分割对CHM补进行过滤,以去除不是树顶的最小值。然后,该函数对过滤后的CHM补片进行分水岭分割,对单个树进行分割。分割之后,将单个树段可视化。

%分割单个树label2D = helperSegmentTrees(canopyModel,treeTopRowId,treeTopColId,minTreeHeight);标识label2D中每个点的行id和列id,并转移标签每点%rowId = ceil((ptCloud.Location(:,2) - ptCloud.YLimits(1))/gridRes) + 1;colId = ceil((ptCloud.Location(:,1) - ptCloud.XLimits(1))/gridRes) + 1;ind = sub2ind(size(label2D),rowId,colId);标签3d =标签2d (ind);提取有效的标签和对应的点validSegIds = label3D ~= 0;ptVeg = select(ptCloud,validSegIds);veglabel3D = label3D(validSegIds);为每个标签指定颜色numColors = max(veglabel3D);colorMap = randi([0 255],numColors,3)/255;labelColors = label2rgb(veglabel3D,colorMap,OutputFormat=“三胞胎”);%可视化树段图pcshow(ptvegf . location,labelColors)“单个树段”)视图(2)

提取树属性

方法提取单个树属性helperExtractTreeMetricsHelper函数,作为支持文件附加到本示例中。首先,该函数从标签中识别属于单个树的点。然后,该函数提取树的属性,如沿x轴和y轴的树顶位置、近似树高、树冠直径和面积。helper函数以表的形式返回属性,其中每一行表示单个树的属性。

%提取树属性treeMetrics = helperExtractTreeMetrics(normalizedPoints,label3D);%显示前5个树段指标disp(头(treeMetrics, 5));
TreeId NumPoints TreeApexLocX TreeApexLocY TreeHeight CrownDiameter CrownArea ______ _________ ____________ ____________ __________ _____________ _________ 1 388 2.6867e+05 4.1719e+06 29.509 7.5325 44.562 2 22 2.6867e+05 4.1719e+06 21.464 0.99236 0.77344 3 243 2.6867e+05 4.1719e+06 24.201 5.7424 25.898 4 101 2.6867e+05 4.1719e+06 21.927 3.4571 9.3867 5 54 2.6867e+05 4.1719e+06 19.515 3.0407 7.2617

参考文献

[1]汤普森,美国Illilouette Creek Basin Lidar Survey, Yosemite Valley, CA, 2018.国家机载激光测绘中心(NCALM)。由OpenTopography分发。https://doi.org/10.5069/G96M351N.访问:2021-05-14

马,秦,苏燕君,郭清华。来自机载激光雷达、航空图像和卫星图像的冠层覆盖估计的比较。应用地球观测和遥感专题选刊10,不。9(2017年9月):4225-36。https://doi.org/10.1109/JSTARS.2017.2711482

[3]理查德森,杰弗里J., L.莫妮卡·莫斯卡尔,金秀亨。航空离散回归激光雷达有效叶面积指数的建模方法。农林气象学149年,没有。6-7(2009年6月):1152-60。https://doi.org/10.1016/j.agrformet.2009.02.007

[4] Pitkänen, J., M. Maltamo, J. Hyyppä,余鑫。基于机载激光冠层高度模型的单株树木自适应检测方法。国际摄影测量、遥感和空间信息科学档案36岁的没有。8(2004年1月):187-91。

[5]陈,祁,丹尼斯·巴尔多奇,龚鹏,麦琪·凯利。“利用小足迹激光雷达数据分离稀树草原林地中的单个树木。”摄影测量工程与遥感“,72年,没有。8(2006年8月1日):923-32。https://doi.org/10.14358/PERS.72.8.923

Baidu
map