QGIS 树冠提取与制图:6 种免费与付费方法
发布于 更新于

要在 QGIS 中使用多光谱影像绘制树冠,先在 Raster > Raster Calculator… 中建立 NDVI,再用 Reclassify by table 按阈值切分,最后运行 Raster > Conversion > Polygonize (raster to vector)。这样得到的是覆盖范围,而不是单株树木。其他五种方法涵盖 LiDAR、开放数据,以及需要每个树冠一个多边形的情况。
| 您拥有的数据 | 方法 | 成本 |
|---|---|---|
| 带有近红外波段的多光谱影像 | 方法 1,NDVI 后栅格转矢量 | 免费,QGIS 核心功能 |
| RGB 影像、没有显卡、需要树冠 | 方法 2,云端分割模型 | 免费额度,之后订阅 |
| LiDAR,或 DSM 与 DTM | 方法 3,冠层高度模型 | 免费,QGIS 核心功能 |
| 需要分离多个类别的影像 | 方法 4,有监督分类 | 免费,一个插件 |
| 范围很大,接受使用去年的日期 | 方法 5,开放冠层数据集 | 免费下载 |
| RGB 影像和 NVIDIA 显卡 | 方法 6,本地分割模型 | 免费,但需要自己找到模型 |
先决定您需要的是覆盖范围还是树冠。覆盖范围是一整片表面,可以直接得到百分比。树冠是可计数的对象,这正是街道调查或公园清查所需要的结果。
菜单路径、算法 id、插件版本和价格均于 2026 年 9 月 3 日根据 QGIS 3.44 手册及各项目自己的页面查阅。
方法 1:NDVI 阈值
使用投影 CRS。这里的每种方法最后都要计算面积,而以度为单位的面积没有实际意义。
NDVI 将绿色植被与屋顶、道路和水体分开。打开 Raster > Raster Calculator…,输入 ("nir@1" - "red@1") / ("nir@1" + "red@1")。

然后运行 Reclassify by table(native:reclassifybytable,处理工具箱 > 栅格分析),将阈值以上和以下各设为一行,并将输出数据类型设为 Byte。对结果做栅格转矢量。
**适合场景:**影像带有近红外波段,并且您需要覆盖范围。
**跳过场景:**必须把树木与草坪或农作物区分开。NDVI 做不到,因为三者都是绿色的。
方法 2:云端分割模型
分割模型已经学会了树冠的样子,因此它能把一片林分拆成可计数的对象,而阈值方法只会返回一整片。我们构建了其中一种,AI Segmentation。本节介绍的是我们自己的工具。
在 QGIS 中对已经打开的影像绘制一个区域,然后输入一个词。多边形会以项目 CRS 写入,每个多边形都带有面积和置信度分数。输入 tree 可得到每个树冠一个多边形,输入 tree canopy 可得到作为表面的覆盖范围。

**最适合:**在没有 GPU 的设备上,从 RGB 影像中为每个树冠生成一个多边形。
**价格:**每月免费处理 1.5 km² 地面范围,另有 20 个云端半自动模式对象,无需信用卡。Pro 版本每月 €39,不含增值税,可处理 100 km² 和 500 个对象。免费试用 Pro 7 天:绑定银行卡,试用期结束前取消则不会扣费。
**运行环境:**QGIS 3.22 及更高版本,Windows、macOS 或 Linux。模型在欧盟境内的服务器上运行。
**安装:**插件管理器,然后用邮箱登录。无需安装依赖包,也无需下载权重。
**它的优势:**简单的词语表现良好。在 90 天的真实运行中,tree 在 10.5% 的分块上返回空结果,而 orchard 在 716 个分块上的空结果率为 47.3%,因此插件会在您产生费用之前,将第二个词提示为第一个词。
**它的不足:**封闭林分没有可识别的树冠边界,因此 tree 运行会返回一整片,而不是每个树干一个多边形。在这种情况下使用 tree canopy,并接受覆盖范围结果。两种云端模式都会将影像发送到我们的服务器,只有在您自己的设备上运行的半自动模式不会这样做。
方法 3:从 LiDAR 生成冠层高度模型
高度是唯一能把树木与草坪区分开的信号,而 QGIS 可以直接从 LAS 或 LAZ 文件生成两个表面,使用 Export to raster(pdal:exportraster、Point Cloud Conversion)。将 Attribute 设为 Z。对于地形,添加过滤表达式 Classification == 2,这是 QGIS 所使用 ASPRS 类别中的 Ground。对于表面,按 ReturnNumber == 1 过滤。

在 Raster > Raster Calculator… 中用 "dsm@1" - "dtm@1" 做减法,或者在较大的分块上使用 grass:r.mapcalc.simple。按您的规范中定义为树冠的高度进行重分类,然后做栅格转矢量。输出会为每个像素携带高度,这是本页其他方法都无法提供的信息。
**适合场景:**您拥有 LiDAR,或一组国家级 DSM 和 DTM。
**跳过场景:**点云没有分类。QGIS 3.44 没有地面分类算法,因此未分类点需要先在 QGIS 外部通过 PDAL 处理。
方法 4:有监督分类
为树木、草地、屋顶和道路绘制训练多边形,然后让分类器为每个像素赋予类别,并对树木类别做栅格转矢量。dzetsaka 是我今天会安装的插件。它采用 GPL 许可,版本为 5.0.11,可运行于 QGIS 3.0 至 4.99,并提供包括 Random Forest 和 SVM 在内的 11 种分类器。
Semi-Automatic Classification Plugin 更为知名,也能处理波段组和预处理,但要先检查版本。9.0.4 版本需要 QGIS 3.99,也就是 QGIS 4 系列。在 QGIS 3.44 上,您得到的是 2024 年 11 月发布的 8.5.0。
**适合场景:**树冠是同一场景中需要提取的多个类别之一。
**跳过场景:**您只需要树木。训练样本所花的时间比方法 1 更多。
方法 5:开放冠层数据集
也许已经有人绘制过您的区域。

有四个值得了解。Meta 和 WRI 冠层高度图 覆盖全球,自 2026 年 3 月起为第 2 版,像素大小为 1.2 m,相对于机载 LiDAR 的平均绝对误差为 3.0 m。ETH Zurich 的地图 针对 2020 年提供 10 m 分辨率数据,来源为 Sentinel-2 和 GEDI,采用 CC BY 4.0 许可。
另外两个数据集具有区域性或历史性。Copernicus Tree Cover Density 图层以 10 m 分辨率覆盖欧洲,从 2018 年到 2024 年按年提供,下载需要 EU Login。Hansen Global Forest Change 分辨率为 30 m,时间从 2000 年开始,因此适合分析随时间变化的情况。
城市也会发布自己的数据。巴黎提供 219,432 棵树的点数据,墨尔本提供 2021 年的 57,980 个树冠多边形,二者都是可以粘贴到 QGIS 中的 GeoJSON URL。
四个全球栅格数据都支持范围请求(range requests),因此可以使用 /vsicurl/ 流式读取分块,而不是下载整个文件。Copernicus 在 https://land.copernicus.eu/en/products/high-resolution-layer-forests-and-tree-cover/tree-cover-density-2018-present-raster-10-m-europe-yearly 提供 WMTS,您需要手动设置年份。它宣传的日期最早可追溯到 1984 年,但几乎没有日期实际包含数据。
**适合场景:**区域很大,并且采集日期不必是您自己的。
**跳过场景:**您上个月才飞行采集了现场,或者您需要树冠。这里的大多数数据是百分比栅格,而不是可计数的对象。
方法 6:本地分割模型
Deepness、Geo-SAM 和 samgeo 会在您的设备上运行分割模型。任何数据都不会离开设备,也不会产生费用。
**适合场景:**影像不能离开您的设备。
**跳过场景:**您没有 NVIDIA 显卡,或者不想寻找模型、申请权重并构建 Python 环境。
六种方法并排比较
| 您的需求 | 方法 |
|---|---|
| 使用自己的多光谱影像获取覆盖范围 | 方法 1 |
| RGB 影像中的树冠,无需 GPU | 方法 2 |
| 获取冠层高度,或将树木与草地分开 | 方法 3 |
| 将树冠作为多个类别中的一个类别 | 方法 4 |
| 快速、免费处理大范围区域 | 方法 5 |
| 树冠,且数据不离开设备 | 方法 6 |
需要记住的内容
选择方法之前,先决定您需要覆盖范围还是树冠,因为这是关于交付成果的问题,而不是关于影像的问题。
只要能获得高度数据,高度就胜过颜色,因此只要有 LiDAR,LiDAR 冠层高度模型就是更好的选择。
NDVI 会把草坪、农作物和橡树视为同一种东西,因此单靠阈值永远无法得到树木。
封闭林分没有可识别的树冠边界,因此本页的每种方法在那里都会返回覆盖范围,没有一种能返回树干数量。
对于整个欧洲范围的覆盖百分比,Copernicus 图层免费且已经完成,因此在该区域运行模型等于为同一个答案付两次钱。
大家常问的问题
QGIS 不使用插件可以绘制树冠吗?
可以,通过方法 1、3 和 5,也就是 QGIS 核心功能加上数据下载。但您得到的是多边形形式的覆盖范围,永远不是单个树冠。
每棵树一个多边形,还是整片树冠一个多边形?
NDVI 或高度模型的阈值处理会给您覆盖范围。只有分割模型能把林分拆成可计数的树冠,而在方法 2 中,您输入的词决定了最终得到两者中的哪一种。
如何计算树冠覆盖百分比?
每个多边形都有自己的面积,因此将面积列求和,再除以您测量的区域面积。这只需要一次字段计算,而且几何数据可以打开检查。
NDVI 和 LiDAR 高度模型哪个更准确?
高度模型,而且差距很明显。NDVI 会把草坪和橡树视为同一种东西,而冠层高度模型会通过数米的高度差将它们分开。
这些方法有免费的吗?
方法 1 和 3 至 6 除了您自己的数据,以及方法 6 所需的显卡之外,不产生费用。方法 2 每月免费提供 1.5 km²,之后为每月 €39,不含增值税。
可以直接用 LAS 文件生成冠层高度模型吗?
地面表面来自被分类为地面的点,而 QGIS 3.44 没有负责分类的算法。在未分类的点云上,过滤器会返回空结果,地形也会变成平面。
我会得到哪个版本的 Semi-Automatic Classification Plugin?
9.0.4 版本需要 QGIS 3.99,也就是 QGIS 4 系列。在 QGIS 3.44 上,管理器提供的是 2024 年 11 月发布的 8.5.0,所以在责怪训练样本之前,先检查自己实际安装的是哪个版本。
栅格转矢量指南 介绍了本页每种方法最后都会进行的栅格转矢量和清理步骤,QGIS 中的 SAM 一文 比较了运行分割模型的插件。若想把方法 3 的高度模型步骤串成一条指令,而不是逐个分块重复,AI Agent 可以在您已打开的工程中运行它们。QGIS AI 中心 位于两者之上。
中使用多光谱影像绘制树冠,先在 

