跳转到内容
AI Segmentation
QGIS
Tutorial

QGIS 树木普查:用航拍影像或 LiDAR 建立树木清查

发布于

QGIS 里的树木清查是一个点图层,每棵树一个点,带一行属性:编号、树种、树干尺寸、健康状况和最近一次检查的日期。航拍影像或 LiDAR 让你在办公室里就能得到点位、冠幅和高度。树种、树干和健康状况则要靠野外调查。

这种分工正是大多数指南略过的地方。没有哪个模型能从 20 cm 的正射影像上读出树种或腐朽的树干,所以最快的清查方式是:办公室负责数,野外负责判断。

简短回答

你的起点方法办公室能得到什么
你所在的城市或客户已经公布了树木台账方法 1:开放树木数据带树种、通常还有树干尺寸的点
一张正射影像和几百棵树方法 2:手工数字化点位你自己放置的点
一个 LiDAR 表面模型和地形模型方法 3:用冠层高度模型找树顶每个点带一个高度
一张正射影像和几千棵树方法 4:分割模型每棵树一个树冠多边形,再生成带冠幅的点

四种方法的结尾都一样:把图层放到平板上带去野外,由人补充影像看不到的信息。

树木清查要记录什么

在放置第一个点之前,先写好属性表。野外调查之后再改,就意味着要再去一次。

属性办公室可得野外可得
树木编号可以,自动生成如果树上有挂牌,记录牌号
位置可以树冠遮住树干的地方需要校正
冠径或冠幅面积可以,来自影像复核
高度有 LiDAR 时可以没有 LiDAR 时现场测量
树种不可以可以
胸径或围径不可以可以,在你的标准规定的高度测量
健康状况、缺陷、下次检查不可以可以

在德国,树木台账(Baumkataster)记录的是注意义务所要求的检查,多数所有者遵循 FLL 树木检查指南(2020 年版)和 GALK 的树木台账指南。这些文件规定了野外字段清单,所以请以它们为起点,而不是以这张表为起点。

网上常见的误解

「AI 可以只靠影像建立完整的树木清查。」 它能数树冠、量树冠。它看不到树冠下面的树干,从 RGB 照片上叫不出大多数树种,也判断不了某根树枝会不会掉下来。任何承诺一次飞行就得到完整台账的页面,卖的都只是工作的前一半。

「树冠图就是树木清查。」 树冠图是一个表面,回答的是「这个街区有多大比例被遮荫」。清查回答的是「哪一棵树,在哪里,状态如何」。如果你要的是覆盖率,用 QGIS 绘制树冠覆盖才是合适的指南。

开始之前

  • QGIS 3.22 或更高版本。
  • 影像要足够新,能反映今年的树木。有叶期影像最适合看树冠,落叶期影像更适合看树干和分枝。
  • 一个以米为单位的投影坐标系,这样面积和直径的结果才是以米计的。

免费影像比大多数人想象的要好:

  • 波兰: Geoportal 上的国家正射影像自 2020 年 6 月 24 日起可免费用于任何用途,大部分分辨率为 25 cm,城市地区为 10 cm 或更高。免费的「Pobieracz danych GUGiK」插件可以在 QGIS 内下载。
  • 德国: 多个州把 DOP20(20 cm 正射影像)作为开放数据发布,其中包括巴登-符腾堡州和下萨克森州。联邦机构提供的全德国服务是收费的。
  • 英格兰: 环境署依据开放政府许可证(Open Government Licence)发布覆盖几乎全国的 1 m LiDAR 表面模型和地形模型。
  • 美国: NAIP 航拍影像可从 USDA 免费获取。

方法 1:开放树木数据

很多城市已经有树木台账并且公开发布。柏林公开了行道树和公园树木,多特蒙德公布了一份由自有数据和航拍影像建立的台账,科隆在 2025 年 7 月把台账放到了网上,巴黎以点的形式提供了 219,432 棵树。在 QGIS 里加载文件或服务,你一开始就有已经填好的树种。

OpenStreetMap 也标注单棵树,是 natural=tree 的点。在 QGIS 中下载 OSM 数据介绍了如何用 QuickOSM 获取它们。

适合: 树木归城市所有,而且台账较新。

不适合: 工作涉及私有土地、校园或新开发区。开放台账只包含公共树木。

方法 2:手工数字化点位

用 Layer > Create Layer > New GeoPackage Layer… 创建图层,几何类型选 Point,并添加上表中的字段。开启编辑,然后在正射影像上点击每个树冠的中心。

这是办公室方法里最准确的,也是最慢的。每个点都由你决定,所以一排树篱不会变成十二棵树,两个相连的树冠也不会变成一个。

适合: 几百棵树,或者每棵树都很重要的场地,例如规划申请。

不适合: 数量达到几千棵。

方法 3:用冠层高度模型找树顶

有了 LiDAR,每棵树的树顶就是它邻域内最高的像素,所以不需要任何训练就能找到树顶。先建立冠层高度模型,也就是表面模型减去地形模型,做法见树冠覆盖指南;DSM 与 DTM 的说明介绍了这两种输入。

找到局部最大值

对冠层高度模型运行 r.neighbors(GRASS),方法设为 maximum,邻域为 5 个像素。像素为 1 m 时,窗口就是 5 m。

保留树顶

在 Raster > Raster Calculator… 中,保留等于局部最大值且高于 3 m 的像素:("chm@1" = "chm_max@1") AND ("chm@1" > 3)。

把像素转成点

用 Raster pixels to points 转换结果,再用 Extract by attribute 保留值为 1 的点。

添加高度

用 Sample raster values 在冠层高度模型上采样,为每个点添加高度。

关键的设置是窗口大小。太小,一棵宽大的橡树会得到三个树顶;太大,两棵小树会合并成一个。让它与你场地上典型的树冠宽度匹配,并目视检查一个样本。

适合: 你有 LiDAR,并且需要高度。

不适合: 你只有影像,或者 LiDAR 比你要数的树更旧。

方法 4:分割模型

分割模型已经学会树冠长什么样,可以从普通的 RGB 正射影像上为每棵树返回一个多边形。我们做了一个,AI Segmentation,这一节讲的是我们自己的工具。

在 QGIS 中打开的正射影像上画一个区域,输入 tree。模型在我们的服务器上运行,所以不需要显卡,每个树冠以你项目 CRS 下的多边形返回,带有 area_m2 和置信度 score。

航拍的村庄,花园里和街道两旁的每个树冠都被填上各自的颜色,成为单独的多边形。
一次运行得到荷兰某村庄的 893 个树冠,每个都是独立的多边形。数量取自图层,不是估算。

把树冠变成清查点:

每个树冠生成一个点

对树冠图层运行 Centroids。每个点保留其树冠的属性。

添加冠径

用字段计算器添加冠径,字段类型为小数:2 * sqrt("area_m2" / pi())。

给树编号

添加一个 tree_id 字段,填入 @row_number,再加上属性表中需要野外填写的空字段。

适合: 街道、公园或花园里的几千棵树,而且你已有影像。

不适合: 林分郁闭的地方。树冠之间没有空隙时,tree 运行会返回一个大形状,而不是每棵树一个多边形,这种情况请用方法 3。影像瓦片会发送到我们的服务器;如果影像不能离开你的电脑,请用方法 2 或 3。

在野外完成

用 QField 把点图层带到树旁。它是 OPENGIS.ch 出品的免费移动应用,用于 QGIS 项目。它可以离线工作,打开你在 QGIS 里设置好的表单,还能为每棵树添加照片。出发前在 QGIS 里为树种和健康状况设置下拉列表,这样每个调查员写的都是同样的词。

对于需要法律记录的定期检查,有专门的台账软件,其中一些,例如德国的 Baumsicht,运行在 QGIS 上。你在这里建立的点图层可以导入其中。

要点

  • 树木清查是每棵树一个带属性的点,不是树冠表面。
  • 办公室提供位置、冠幅,有 LiDAR 时还有高度。野外提供树种、树干和健康状况。
  • 先用开放台账,几百棵树用手工数字化,需要高度时用 LiDAR 树顶,影像上的几千棵树用分割模型。
  • 信任总数之前,用你手工数过的样本检查每一种自动方法。

常见问题

树木清查是强制的吗?

通常没有法律要求必须有台账本身。道路和步道旁树木的所有者必须为安全而检查它们,台账是证明检查确实进行过的方式。在德国,这项注意义务就是大多数城镇保存树木台账的原因。

AI 能从航拍影像识别树种吗?

从大多数人手里的 RGB 正射影像上,不能可靠地识别。树种制图需要多光谱或高光谱影像和本地训练数据,即便如此也要在野外核实。我们的插件返回的是树冠,不是树种。

自动树木检测有多准?

与其说取决于工具,不如说取决于树冠。孤立的行道树和花园树结果很好,相连的树冠会合并。在你自己的影像上手工数 50 棵树,与图层对比,就得到了你场地的误差率。

能免费在 QGIS 里做树木清查吗?

能。开放台账、手工数字化和 LiDAR 树顶只花时间,QField 也是免费的。分割模型在大规模计数时节省时间,并且可以免费开始。

关于相关的工作,什么是正射影像解释了这里每种方法背后的影像,QGIS AI 插件页面列出了每个插件运行所需的条件。

在 QGIS 中免费试用,无需银行卡