跳至內容
AI Segmentation
QGIS
Tutorial

QGIS 樹冠圖製作:6 種免費與付費方法

同一片公園地的三格對比:原始航拍影像、植被顯示為紅色的 NDVI raster,以及每個樹冠都是獨立彩色多邊形的成果。

要用 從多光譜影像繪製樹冠,在 Raster > Raster Calculator… 裡建立 NDVI,用 Reclassify by table 切出閾值,再跑 Raster > Conversion > Polygonize (raster to vector)。這樣得到的是覆蓋面,不是單棵樹。另外五種方法涵蓋 LiDAR、開放資料,以及你需要每個樹冠各一個多邊形的情況。

網路上常講錯的三件事

教學和論壇最常重複三個答案,每一個都會浪費你一個下午。

「NDVI 切個閾值就是樹了。」 NDVI 只分得出綠色和非綠色。草地、小麥田和橡樹都是綠色,所以全都會掉進同一類。NDVI 給你的是植被覆蓋,把它叫做樹冠是你必須自己辯護的決定。

「拿 LAS 檔直接跑出樹冠高度模型。」 地面高程來自被分類為地面的點,而 QGIS 3.44 沒有可以分類地面的演算法。雲是未分類的,過濾器什麼都回傳不了,地形跑出來就是平的。

「裝 Semi-Automatic Classification Plugin,裝最新版。」 9.0.4 版需要 QGIS 3.99,也就是 QGIS 4 系列。在 QGIS 3.44 上,管理員給你的是 2024 年 11 月的 8.5.0,所以怪你的樣本之前,先看你到底拿到哪一版。

簡短答案

你有什麼方法成本
有近紅外波段的多光譜影像方法 1,NDVI 閾值後向量化免費,QGIS 核心
LiDAR,或一組 DSM 和 DTM方法 2,樹冠高度模型免費,QGIS 核心
影像,且要分出好幾個類別方法 3,監督式分類免費,一個 plugin
範圍很大,且去年的日期也可以方法 4,開放樹冠資料集免費下載
RGB 影像和一張 NVIDIA 顯卡方法 5,地端分割模型免費,需自行找模型
RGB 影像、沒有顯卡,想要樹冠方法 6,雲端分割模型免費額度,之後需訂閱

開始之前

用投影座標系統工作。這裡每個方法最後都會算面積,而用度算出來的面積沒有用。

先決定你要的是覆蓋還是樹冠。覆蓋是一整片表面,百分比一下就算出來。樹冠是一顆一顆可數的物件,街道調查或公園盤點要的是這個。

方法 1:NDVI 閾值

NDVI 把綠色植被和屋頂、道路、水分開。打開 Raster > Raster Calculator…,輸入 ("nir@1" - "red@1") / ("nir@1" + "red@1")

An NDVI raster over a French village in QGIS, vegetation bright and roofs dark, with the layer histogram beside it showing two peaks.
NDVI from a Sentinel-2 scene. The histogram has two peaks and the valley between them is your threshold. There is no universal number, so read your own scene.

接著跑 Reclassify by tablenative:reclassifybytable,Processing Toolbox,Raster analysis),閾值以上一列、以下一列,輸出資料型態設為 Byte。再把結果向量化。

適用時機: 影像有近紅外波段,而且你要的是覆蓋。

不適用時機: 樹必須和草地或農作物分開。NDVI 做不到,因為三者都是綠的。

方法 2:從 LiDAR 做樹冠高度模型

高度是唯一能把樹和草地分開的訊號,而 QGIS 可以直接從 LAS 或 LAZ 檔做出兩個表面,用 Export to rasterpdal:exportraster,Point Cloud Conversion)。Attribute 設為 Z。地形那一層,加上過濾式 Classification == 2,這在 QGIS 用的 ASPRS 分類裡就是 Ground。表面那一層,用 ReturnNumber == 1 過濾。

A canopy height model in QGIS coloured from green at ground level to dark red at 25 metres, tree crowns standing out over flat grey ground.
DSM minus DTM over a park. Crowns stand out because they are tall, not because they are green, so lawns and gardens drop out on their own.

Raster > Raster Calculator…"dsm@1" - "dtm@1" 相減,圖幅大就用 grass:r.mapcalc.simple。按你的規範寫明樹冠的高度切下去,再向量化。輸出每個像素都有高度,這是本頁其他方法都給不了的。

適用時機: 你有 LiDAR,或有國家級的 DSM 和 DTM。

不適用時機: 你的點沒有分類過。QGIS 3.44 沒有地面分類演算法,未分類的點要先在 QGIS 外面過 PDAL。

方法 3:監督式分類

為樹、草、屋頂、道路各畫訓練多邊形,再讓分類器給每個像素貼標籤,把樹那一類向量化。dzetsaka 是我今天會裝的那一個。它是 GPL,5.0.11 版,跑在 QGIS 3.0 到 4.99,內建十一種分類器,含 Random Forest 和 SVM。

Semi-Automatic Classification Plugin 名氣更大,波段組合和前處理也包了,但先看版本。9.0.4 版需要 QGIS 3.99,也就是 QGIS 4 系列。在 QGIS 3.44 上你拿到的是 2024 年 11 月的 8.5.0。

適用時機: 樹冠是同一景裡好幾個需要的類別之一。

不適用時機: 你只要樹。畫訓練樣本花的時間比方法 1 還多。

方法 4:開放樹冠資料集

你的區域可能已經有人畫好了。

Copernicus Tree Cover Density loaded in QGIS over a European city, shaded from pale to dark green by percentage of tree cover.
Copernicus Tree Cover Density streamed into QGIS as a WMTS layer. Free, finished, and the wrong tool the moment you need this year's imagery.

四個值得知道的。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 layer 覆蓋歐洲,10 m,從 2018 年到 2024 年每年都有,下載要一個 EU Login。Hansen Global Forest Change 是 30 m,從 2000 年開始,所以要看長時間變化就用它。

城市自己也會發。巴黎發了 219,432 棵樹的點,墨爾本發了 2021 年的 57,980 個樹冠多邊形,都是 GeoJSON 網址,貼進 QGIS 就能用。

四個全球 raster 都支援範圍請求,所以用 /vsicurl/ 串流圖磚來看,不要整檔下載。Copernicus 用 WMTS 供應,位址是 https://land.copernicus.eu/cdse/tcd_europe_10m_yearly,年份自己手動設。它宣稱 1984 以來的每個日期都有,但幾乎都沒有資料。

適用時機: 範圍很大,拍攝日期不用是你自己的。

不適用時機: 你上個月才飛過,或你要的是樹冠。大多是百分比 raster,不是可數的物件。

方法 5:地端分割模型

DeepnessGeo-SAMsamgeo 在你自己的電腦上跑分割模型。什麼都不外流,也不收錢。

適用時機: 影像不能離開你的電腦。

不適用時機: 你沒有 NVIDIA 顯卡,或不想找模型、要權重、組 Python 環境。

方法 6:雲端分割模型

分割模型學過樹冠長什麼樣子,所以它能把一片林子切成可數的物件,而閾值只會回傳一整片。這一種是我們做的,AI Segmentation。這一節講的是我們自己的工具。

在 QGIS 裡已經打開的影像上框一個範圍,輸入一個字。多邊形會帶著面積和信心分數,落在你的專案 CRS 裡。輸入 tree 得到一個樹冠一個多邊形,輸入 tree canopy 得到整片覆蓋。

A Dutch village from the air where every tree crown, in gardens and along the streets, is filled with its own colour as a separate polygon.
893 crowns from one run over a Dutch village, each its own polygon. Counted off the layer, not estimated.

最適合: 在 RGB 影像上要一個樹冠一個多邊形,電腦上沒有 GPU。

價格: 每月 3 km² 地面免費,加 50 個雲端 Semi-Auto 物件,不用卡。Pro 是每月 39 歐元不含稅,200 km² 和 500 個物件。

執行環境: QGIS 3.22 以後,Windows、macOS 或 Linux。模型跑在我們位於歐盟的伺服器上。

安裝: plugin 管理員安裝,用 email 登入。不用裝套件,不用抓權重。

強在哪: Plain word 測出來很好。90 天的真實執行裡,tree 在 10.5% 的圖磚上空手而回,對上 orchard 在 716 個圖磚上的 47.3%,所以 plugin 會在你花錢之前把第二個字 nudges 回第一個。

弱在哪: 鬱閉林分沒有冠緣可以找,所以 tree 跑下去只會回傳一整片,而不是一棵一棵的 stem。那裡就用 tree canopy,接受覆蓋。兩種雲端模式都會把影像送到我們的伺服器,只有在你自己電腦上的 Semi-Auto 不會。

六種方法並排比

你需要什麼方法
用自己的多光譜影像做覆蓋方法 1
樹冠高度,或把樹和草分開方法 2
樹冠是好幾個類別之一方法 3
範圍很大,要快,不花錢方法 4
要樹冠,什麼都不能外流方法 5
RGB 影像上要樹冠,沒有 GPU方法 6

要記住的事

先決定你要覆蓋還是樹冠再選方法,因為那是交付成果的問題,不是影像的問題。

拿得到高度就用高度,不要用顏色,所以有 LiDAR 的地方,LiDAR 樹冠高度模型會贏。

NDVI 把草地、農作物和橡樹看成同一種東西,所以只靠閾值永遠得不到樹。

鬱閉林分沒有冠緣可以找,所以本頁每個方法在那裡都只回傳覆蓋,沒有一個回傳 stem 數。

整個歐洲的覆蓋百分比,Copernicus layer 免費而且已經做完了,在那個範圍上再跑模型是為同一個答案付兩次錢。

Try it free in QGIS, no card needed

大家常問的問題

不用 plugin,QGIS 能畫樹冠嗎?

可以,用方法 1、2、4,都是 QGIS 核心加一個下載。得到的是多邊形覆蓋,永遠不是單棵樹冠。

一棵樹一個多邊形,還是一整片一個多邊形?

NDVI 或高度模型切閾值,得到的是覆蓋。只有分割模型能把一片林子切成可數的樹冠,而在方法 6 裡,你輸入的字決定你拿到哪一種。

樹冠覆蓋百分比怎麼算?

每個多邊形自帶面積,所以把面積欄加總,除以你量好的區域面積。就是一次欄位計算,幾何都打得開、對得到。

NDVI 和 LiDAR 高度模型哪個準?

高度模型,而且差很多。NDVI 把草地和橡樹看成同一種東西,而樹冠高度模型用幾公尺的差距把它們分開。

這些要錢嗎?

方法 1 到 5,除了你自己的資料什麼都不花,方法 5 再加一張顯卡。方法 6 每月 3 km² 免費,之後每月 39 歐元不含稅。

raster 轉向量指南 把每個方法最後都會用到的向量化和清理步驟走了一遍,QGIS 裡的 SAM 貼文 比較了跑分割模型的 plugin。QGIS AI hub 在兩者上面。