概述:
目的是从无人机获取的影像数据中,识别并定位到每一颗独立树木,从而获取每棵树的单木信息(树高、冠幅等)
DSM (Digital Surface Model - 数字表面模型): 它包含了地表以上所有物体的高度信息,如建筑物、车辆、树冠的顶部。DSM可以直观地理解为一张记录了地表最高点高度的“高程照片”。
DEM (Digital Elevation Model - 数字高程模型): 只包含裸露的地表地形高度,不包括任何建筑物、植被。
CHM (Canopy Height Model - 冠层高度模型): 这是最关键的数据。它由 DSM 减去 DEM 得到,代表了纯植被的高度(树冠顶部相对于地面的高度)。CHM看起来像一幅由许多小山丘组成的图像,每个“小山丘”理论上就对应一棵树的树冠。
具体方法技术:
基于局部最大值/最小值算法主要通过CHM数据进行操作实现,核心思想为一棵树的最高点(树冠顶点)或最低点(树干基部,需特定数据)在空间上是一个局部极值点,这个点就可以被认为是这棵树的位置。
基于局部最大值法:假设树冠顶点是周围一定区域内最高的点,寻找树冠顶点
数据预处理:
生成CHM: 首先必须拥有DSM和DEM数据,通过 CHM = DSM - DEM 计算得到冠层高度模型。
平滑滤波(至关重要): 原始的CHM数据可能因为噪声、不规则树冠(如双顶)而显得粗糙。直接寻找局部最大值会找到过多的错误点(过分割)。因此,通常使用高斯滤波或中值滤波对CHM进行平滑处理,以消除小波动,凸显出主要树冠的形态。
高斯滤波: 效果更自然,能更好地保持树冠形状。
中值滤波: 能更好地保持边缘和消除椒盐噪声。
https://www.kdocs.cn/l/cllg0bwrYaOE
移动窗口搜索:
定义一个特定大小的移动窗口(例如 3x3, 5x5 像素)。窗口大小的选择是关键参数,需要根据图像分辨率(GSD)和期望的树冠大小来设定。
规则: 将这个窗口在平滑后的CHM上逐像素移动。对于窗口中心的像素,如果它的值是整个窗口内最大的,且其值大于某个设定的最小高度阈值(例如,高于2米以排除灌木和噪声),则该点被识别为一个树冠顶点,即一棵树的位置。
结果输出:
所有被识别出的局部最大值点的坐标(X, Y)就是单木的位置。其对应的CHM值(Z)可以近似作为该树的树高。
示例:
平滑后的CHM数据(俯视图,数值代表高度):
[ 5, 5, 6, 5, 5 ]
[ 5, 8, 9, 8, 5 ]
[ 6, 9, 10, 9, 6 ] ——中心点‘10’是3x3窗口内的最大值,被识别为一棵树
[ 5, 8, 9, 8, 5 ]
[ 5, 5, 6, 5, 5 ]
(2)如何生成CHM数据
生成CHM(Canopy Height Model,冠层高度模型)是通过将DSM(数字表面模型)减去DEM(数字高程模型)来实现的,公式为:CHM = DSM - DEM。
方法一:直接在大疆智图中导出CHM
通过空三和三维重建数据处理后可以生成高质量DSM和DEM,重建完成后,选择二维地图成果,点击导出选择CHM,选择GeoTIFF格式导出。(工作站大疆智图3.7.0版本支持直接导出)
方法二:通过ArcGIS计算得出CHM 数据
通过大疆智图重建完成导出DSM和DEM数据,然后使用ArcGIS计算
在ArcGIS中添加DSM和DEM图层,打开"Spatial Analyst"工具箱中的"栅格计算器",输入公式:Raster("DSM") - Raster("DEM"),输出可生成CHM 。
设置无效值:
使用Con工具将负值设为0:
python
Con(("CHM"<0),0,"CHM")
方法三:使用python脚本处理
import numpy as np
import rasterio
from rasterio import mask
def generate_chm(dsm_path, dem_path, output_path):
# 读取DSM数据
with rasterio.open(dsm_path) as dsm:
dsm_data = dsm.read(1)
dsm_profile = dsm.profile
# 读取DEM数据
with rasterio.open(dem_path) as dem:
dem_data = dem.read(1)
# 计算CHM (DSM - DEM)
chm_data = dsm_data - dem_data
# 将负值设为0(地表以下的高度无效)
chm_data[chm_data < 0] = 0
# 保存CHM
with rasterio.open(output_path, 'w', **dsm_profile) as dst:
dst.write(chm_data, 1)
(3)基于局部最小值法:寻找树干基部(使用较少,需要更高质量数据)
通过LiDAR点云实现,它不依赖于CHM,而是直接处理LiDAR获取的三维点云数据。算法会过滤出最后一次回波(Last Return)或地面点分类后的低点云。在这些低点中搜索局部最小值点。理论上,这些点因为激光穿透冠层间隙到达了地面或树干基部,所以高度值较低。识别出的局部最小值点被认为是树干基部的位置。
优点: 对于树干明显、林下通畅的森林,此法能更精确地定位树木的实际茎干位置。
缺点: 对茂密的下层植被或复杂林下地形非常敏感,容易产生大量错误识别。
【金山文档 | WPS云文档】 单木识别定位(基于局部最大值_最小值算法) https://www.kdocs.cn/l/coAPZfXixbPz