コンテンツへスキップ
ブログに戻る
AI Segmentation
QGIS
チュートリアル

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

同じ公園の3つのパネル。通常の航空画像、植生が赤く表示されたNDVIラスタ、色分けされた個々の樹冠ポリゴン。

からマルチスペクトル画像の樹冠をマッピングするには、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") を入力します。

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)を実行します。しきい値より上と下に1行ずつ設定し、出力データ型をByteにします。その結果をポリゴン化します。

使う場面: 画像に近赤外バンドがあり、被覆が必要なとき。

避ける場面: 樹木を芝生や作物から分ける必要があるとき。3つとも緑なので、NDVIでは分けられません。

方法2: LiDARからcanopy height modelを作る

樹木と芝生を分けられる唯一の信号が高さです。QGISでは、LASまたはLAZファイルから Export to rasterpdal:exportraster、Point Cloud Conversion)を使って、両方の表面を直接作れます。AttributeZ に設定します。地形にはフィルター式 Classification == 2 を追加します。これはQGISが使うASPRS classesで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には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: オープンな樹冠データセット

すでに誰かが対象地域をマッピングしているかもしれません。

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.

知っておく価値があるのは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

DeepnessGeo-SAMsamgeo は、自分のマシン上でセグメンテーション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 と入力します。

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.

最適な用途: 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つの上位に位置します。