跳转到内容
AI Segmentation
QGIS
教程

QGIS 树冠提取与制图:6 种免费与付费方法

发布于 更新于

同一片公园绿地的三个面板:普通航空影像、植被呈红色的 NDVI 栅格,以及每个树冠都作为独立彩色多边形显示的结果。

要在 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")。

QGIS 中法国一座村庄上空的 NDVI 栅格,植被明亮、屋顶暗淡,旁边的图层直方图显示两个峰值。
来自一景 Sentinel-2 影像的 NDVI。直方图有两个峰,两峰之间的谷底就是阈值。没有通用数值,请以您自己的场景为准。

然后运行 Reclassify by table(native:reclassifybytable,处理工具箱 > 栅格分析),将阈值以上和以下各设为一行,并将输出数据类型设为 Byte。对结果做栅格转矢量。

**适合场景:**影像带有近红外波段,并且您需要覆盖范围。

**跳过场景:**必须把树木与草坪或农作物区分开。NDVI 做不到,因为三者都是绿色的。

方法 2:云端分割模型

分割模型已经学会了树冠的样子,因此它能把一片林分拆成可计数的对象,而阈值方法只会返回一整片。我们构建了其中一种,AI Segmentation。本节介绍的是我们自己的工具。

在 QGIS 中对已经打开的影像绘制一个区域,然后输入一个词。多边形会以项目 CRS 写入,每个多边形都带有面积和置信度分数。输入 tree 可得到每个树冠一个多边形,输入 tree canopy 可得到作为表面的覆盖范围。

从空中俯瞰的一座荷兰村庄,花园里和街道两旁的每个树冠都填充了各自的颜色,成为独立的多边形。
对一座荷兰村庄运行一次得到的 893 个树冠,各为独立多边形。直接从图层中数出,而非估算。

**最适合:**在没有 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 过滤。

在 QGIS 中显示的冠层高度模型,从地面处的绿色渐变为 25 m 处的深红色,树冠在平坦的灰色地面上十分突出。
阿姆斯特丹 Vondelpark 上空的 DSM 减去 DTM,数据来自分辨率为 0.5 m 的荷兰 AHN。树冠因高度而突出,而非因绿色,因此草坪和花园会被自动排除。

在 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:开放冠层数据集

也许已经有人绘制过您的区域。

在 QGIS 中加载的巴黎上空 Copernicus Tree Cover Density 图层,按树木覆盖百分比从浅绿到深绿分级渲染,城市两侧的两片林地呈现为实心深绿色。
2018 年 Copernicus Tree Cover Density 图层,以 WMS 方式串流加载到 QGIS 中,范围覆盖巴黎。免费、现成,但一旦需要当年的影像,它就不是合适的工具。

有四个值得了解。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 中免费试用,无需信用卡

大家常问的问题

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 中心 位于两者之上。