QGISで樹冠をマッピングする6つの方法

からマルチスペクトル画像の樹冠をマッピングするには、Raster > Raster Calculator… でNDVIを作成し、Reclassify by table でしきい値を設定してから、Raster > Conversion > Polygonize (raster to vector) を実行します。これで得られるのは被覆であり、個々の樹木ではありません。残り5つの方法では、LiDAR、オープンデータ、そして樹冠ごとに1つのポリゴンが必要なケースを扱います。
Webでよくある間違い
チュートリアルやフォーラムで3つの説明が繰り返されていますが、どれも午後を丸ごと無駄にします。
「NDVIにしきい値を設定すれば、樹木が得られる。」 NDVIが分けるのは、緑色と緑色でないものです。芝生、小麦畑、オークはすべて緑なので、同じクラスに入ります。NDVIが示すのは植生被覆であり、それを樹冠と呼ぶなら、その判断を説明できなければなりません。
「LASファイルからそのままcanopy height modelを作ればよい。」 地表面はgroundに分類された点から作られますが、QGIS 3.44にはそれらを分類するアルゴリズムがありません。未分類のcloudではフィルターが何も返さず、地形は平らになります。
「Semi-Automatic Classification Pluginの最新版をインストールすればよい。」 Release 9.0.4にはQGIS 4系であるQGIS 3.99が必要です。QGIS 3.44では、managerが2024年11月版の8.5.0を提供するため、サンプルのせいにする前に、実際にどの版を入手したか確認してください。
結論
| 手元にあるもの | 方法 | 費用 |
|---|---|---|
| 近赤外バンドを含むマルチスペクトル画像 | 方法1、NDVIからポリゴン化 | 無料、QGISのコア機能 |
| LiDAR、またはDSMとDTM | 方法2、canopy height model | 無料、QGISのコア機能 |
| 分離したいクラスが複数ある画像 | 方法3、教師あり分類 | 無料、1つのplugin |
| 広い範囲、昨年の撮影日でも問題ない | 方法4、オープンな樹冠データセット | 無料ダウンロード |
| RGB画像とNVIDIAカード | 方法5、ローカルのセグメンテーションモデル | 無料、探すべきモデルあり |
| RGB画像、カードなし、樹冠が必要 | 方法6、クラウドのセグメンテーションモデル | 無料枠、その後サブスクリプション |
始める前に
投影CRSで作業してください。ここで扱うすべての方法は最後に面積を出すため、度単位の面積は役に立ちません。
被覆が必要なのか、樹冠が必要なのかを決めてください。被覆は1つの表面で、そこから割合を算出できます。樹冠は数えられるオブジェクトなので、街路調査や公園 inventory に必要なのはこちらです。
方法1: NDVIのしきい値処理
NDVIは、緑色の植生と屋根、道路、水面を分離します。Raster > Raster Calculator… を開き、("nir@1" - "red@1") / ("nir@1" + "red@1") を入力します。

続いて Reclassify by table(native:reclassifybytable、Processing Toolbox、Raster analysis)を実行します。しきい値より上と下に1行ずつ設定し、出力データ型をByteにします。その結果をポリゴン化します。
使う場面: 画像に近赤外バンドがあり、被覆が必要なとき。
避ける場面: 樹木を芝生や作物から分ける必要があるとき。3つとも緑なので、NDVIでは分けられません。
方法2: LiDARからcanopy height modelを作る
樹木と芝生を分けられる唯一の信号が高さです。QGISでは、LASまたはLAZファイルから Export to raster(pdal:exportraster、Point Cloud Conversion)を使って、両方の表面を直接作れます。Attribute を Z に設定します。地形にはフィルター式 Classification == 2 を追加します。これはQGISが使うASPRS classesでGroundを表します。表面には ReturnNumber == 1 でフィルターをかけます。

Raster > Raster Calculator… で "dsm@1" - "dtm@1" として一方から他方を引くか、大きなタイルなら grass:r.mapcalc.simple を使います。仕様で樹冠とする高さで再分類してから、ポリゴン化します。出力にはピクセルごとの高さが含まれます。これはこのページの他の方法では得られません。
使う場面: LiDAR、または国のDSMとDTMのペアがあるとき。
避ける場面: 点が分類されていないとき。QGIS 3.44にはground classification algorithmがないため、未分類の点はまずQGISの外でPDALに通します。
方法3: 教師あり分類
樹木、草、屋根、道路のtraining polygonを描き、classifierにすべてのピクセルをラベル付けさせてから、樹木クラスをポリゴン化します。今インストールするなら dzetsaka です。GPLで、version 5.0.11、QGIS 3.0から4.99で動作し、Random ForestやSVMを含む11個のclassifierを搭載しています。
Semi-Automatic Classification Plugin のほうが有名で、band setや前処理も扱えますが、まずversionを確認してください。Release 9.0.4にはQGIS 4系であるQGIS 3.99が必要です。QGIS 3.44では2024年11月版の8.5.0になります。
使う場面: 同じsceneから複数のクラスを取り出す必要があり、樹冠がそのうちの1クラスであるとき。
避ける場面: 欲しいのが樹木だけのとき。training sampleにかかる時間は方法1より長くなります。
方法4: オープンな樹冠データセット
すでに誰かが対象地域をマッピングしているかもしれません。

知っておく価値があるのは4つです。Meta and WRI canopy height map は全球をカバーし、2026年3月以降はversion 2です。ピクセルサイズは1.2 mで、航空LiDARに対する平均絶対誤差は3.0 mです。ETH Zurich's map は2020年の10 mデータで、Sentinel-2とGEDIから作られ、CC BY 4.0です。
残り2つは地域限定または過去のデータです。Copernicus Tree Cover Density layerはヨーロッパを10 mでカバーし、2018年から2024年まで毎年更新されています。ダウンロードにはEU Loginが必要です。Hansen Global Forest Change は30 mで、2000年から始まるため、時間経過による変化を見るためのデータです。
都市が独自データを公開していることもあります。Parisは219,432本の樹木をpointとして、Melbourneは2021年の樹冠polygonを57,980個、どちらもQGISに貼り付けられるGeoJSON URLで提供しています。
4つの全球rasterはすべてrange requestに対応しているので、ダウンロードする代わりに /vsicurl/ でタイルをstreamしてください。Copernicusは https://land.copernicus.eu/cdse/tcd_europe_10m_yearly でWMTSを提供しており、yearを手動で設定します。1984年までのすべての日付を表示しますが、データが入っているものはほとんどありません。
使う場面: 範囲が広く、取得日が自分の画像でなくてもよいとき。
避ける場面: 先月撮影した場所を使うとき、または樹冠が必要なとき。これらの多くは割合を示すrasterであり、数えられるobjectではありません。
方法5: ローカルのセグメンテーションmodel
Deepness、Geo-SAM、samgeo は、自分のマシン上でセグメンテーションmodelを実行します。画像は外部に出ず、料金もかかりません。
使う場面: 画像をマシンの外に出せないとき。
避ける場面: NVIDIAカードがないとき、またはmodelを探し、weightsを取得し、Python environmentを構築する気力がないとき。
方法6: クラウドのセグメンテーションmodel
セグメンテーションmodelは樹冠の形を学習しているため、しきい値では1枚の被覆になってしまう林分を、数えられるobjectに分割できます。私たちが構築するのが AI Segmentation です。このセクションでは、私たちのtoolについて説明します。
QGISですでに開いている画像上にzoneを描き、単語を入力します。polygonはareaとconfidence scoreを伴って、project CRSに入ります。樹冠ごとに1つのpolygonを得るには tree、表面としての被覆を得るには tree canopy と入力します。

最適な用途: GPUのないマシンで、RGB画像から樹冠ごとに1つのpolygonを作る。
料金: 月3 km²の地表と、cloud Semi-Auto object 50個まで無料。カード不要です。ProはVATを除き月39ユーロで、200 km²と500 objectが含まれます。
動作環境: QGIS 3.22以降、Windows、macOS、Linux。modelは欧州連合内のサーバーで実行されます。
インストール: plugin managerでインストールし、emailでsign inします。packageもweightも不要です。
優れている点: 単純な単語がよく機能します。実際のrunを90日間調べると、tree は716 tiles中10.5パーセントで空の結果になりました。一方 orchard は47.3パーセントでした。そのためpluginは、料金が発生する前に2つ目の単語を1つ目へ自動で寄せます。
弱い点: 閉じた林分には見つけられる樹冠の境界がないため、tree runは幹ごとのpolygonではなく、1枚の被覆を返します。そこで tree canopy を使い、被覆として受け入れてください。2つのcloud modeでは画像が私たちのserverに送られます。自分のマシンだけで完結するのはSemi-Autoのみです。
6つの方法を横並びで比較
| 必要なもの | 方法 |
|---|---|
| 自分のマルチスペクトル画像から被覆 | 方法1 |
| 樹冠の高さ、または樹木と草の分離 | 方法2 |
| 複数クラスのうち1つとしての樹冠 | 方法3 |
| 広い範囲をすばやく無料で処理 | 方法4 |
| マシンの外に何も出さずに樹冠を抽出 | 方法5 |
| GPUなしでRGB画像から樹冠を抽出 | 方法6 |
覚えておくこと
方法を選ぶ前に、被覆と樹冠のどちらが必要かを決めてください。これは画像の問題ではなく、納品物の問題です。
高さを取得できるなら、色より高さが優先です。LiDARがある場所では、canopy height modelが最も有力です。
NDVIは芝生、作物、オークを同じものとして読むため、しきい値だけでは決して樹木になりません。
閉じた林分には見つけられる樹冠の境界がないため、このページのどの方法でもそこで返るのは被覆であり、幹の本数ではありません。
ヨーロッパ全域の被覆率なら、Copernicus layerは無料ですでに完成しています。その範囲にmodelを実行すると、同じ答えに二重に支払うことになります。
Try it free in QGIS, no card needed
よくある質問
pluginなしでQGISに樹冠をマッピングできますか?
はい。方法1、2、4なら、QGISのコア機能とダウンロードだけで可能です。ただし得られるのはpolygonとしての被覆であり、個々の樹冠ではありません。
樹木ごとに1つのpolygon、それとも樹冠全体に1つですか?
NDVIやheight modelのしきい値処理で得られるのは被覆です。林分を数えられる樹冠に分割できるのはセグメンテーションmodelだけで、方法6では入力する単語によってどちらになるかが決まります。
樹冠被覆率はどうやって計算しますか?
すべてのpolygonには面積があるので、area columnを合計し、測定した面積で割ります。これは、開いて確認できるgeometry上で行う、1つのfield calculationです。
NDVIとLiDAR height modelでは、どちらが正確ですか?
height modelです。比較になりません。NDVIは芝生とオークを同じものとして読みますが、canopy height modelなら数メートルの差で分離できます。
これらは無料ですか?
方法1から5までは、自分のデータと方法5のgraphics card以外に費用はかかりません。方法6は月3 km²まで無料で、その後はVATを除き月39ユーロです。
raster to vector guide では、ここで紹介したすべての方法の最後に必要になるポリゴン化とcleanupの手順を説明しています。SAM in QGIS post では、セグメンテーションmodelを実行するpluginを比較しています。QGIS AI hub はその2つの上位に位置します。


