コンテンツへスキップ
AI Segmentation
QGIS
チュートリアル

QGISで建物外形を検出する3つの方法

公開日 更新日

QGISで建物外形を検出するには3つのルートがある:オープンデータセットのダウンロード、自分の画像に対するAI検出 plugin の実行、手動デジタイズだ。一番速いのは2つ目だ。plugin マネージャーから plugin をインストールし、画像を読み込み、ゾーンを描き、buildingsと入力してDetectを押すと、プロジェクトCRSにポリゴン layerが載る。

フィルタリングが仕事の後半だ。戻ってくるものの多くは建物ではないので、生の出力を信頼度と面積で絞る。パリ中心部で1回実行して635ポリゴンを得たが、残す82を決める方が検出自体より時間がかかった。

0:00 / 0:00
One zone, one word, 848 buildings. Real run, sped up 3x, nothing cut.
入力方法時間
OpenStreetMap、MicrosoftやGoogleが既にカバーする地域Method 1: オープンなフットプリントをダウンロード数分
数百から数千棟、渡された正確な画像の上でMethod 2: 自動検出(当社製、クラウド)57秒で848棟、その後フィルタリング
50棟未満、または住所ごとに1ポリゴンが必要な歴史的中心部Method 3: 手動でデジタイズ作業時間次第

常にまずオープンデータだ。カバーに穴がある、時期が古い、クライアントから渡された特定のオルソ画像に合わせる必要がある場合にのみ次へ進む。

Method 1: オープンなフットプリントをダウンロード

必要なのはQGIS 3.22以降、信頼できる画像 layer 1つ、method 2用のインターネット接続だ。3つとも専用グラフィックカードは不要だ。

多くの仕事では検出自体が不要だ。3つのオープンデータセットで地球上の大半をカバーでき、1つの街区でも数千棟の差が出る。

Pick the dataset for your area

OpenStreetMapはマッパーが活発な地域で優れ、建物に属性が付く。Microsoft Global ML Building Footprintsは10億超の機械抽出建物を収め、北米で最も強い。Google Open BuildingsはOSMが最も薄いグローバルサウスをカバーする。

Load one against your imagery

QuickOSMでOSMを読み込む。

Zoom in and look at the edges

その一見で、ここで止めるか先を読むかが決まる。

Three panels of the same dense Luanda neighbourhood on Google Satellite imagery, with building footprints in green. OpenStreetMap shows none, Microsoft covers most, Google Open Buildings covers nearly all.
The same 1 km² of Luanda, on Google Satellite imagery. OpenStreetMap maps no buildings here, Microsoft finds 3,140, Google Open Buildings 4,468. Over a dense African neighbourhood the dataset you reach for decides whether you get everything or nothing.

**使う場合:**地域が既によく整備され、データセットの時期とライセンスで問題ない場合。

**使わない場合:**カバーに穴がある、時期が古い、特定の1枚のオルソ画像に合わせる必要がある場合。

Method 2: 自動検出

建物フットプリントとは、建物が地面に接する輪郭を平面ポリゴンにしたものだ。屋根でも敷地でも住所点でもない。ここで重要なのは、垂直画像がくれるのは屋根だという点だ:ほぼ真下の5階建てオスマン街区ならずれは小さいが、タワーではそうではない。フットプリント layer を約束する前に知っておくべきで、長い解説は建物フットプリントとはにある。

自動検出モデルは画像を読み、建物輪郭を信頼度スコア付きポリゴンで返す。当社はその一つを作っている、AI Segmentation。この節は当社自身のツールについてだ。

他のものと同じく plugin マネージャーから入れる:手動ダウンロード不要、Python環境不要、専用グラフィックカード不要だ。モデルは当社サーバーで動くからだ。Windows、macOS、Linux対応だ。

Dense Parisian city blocks before and after automatic building detection (after)
Dense Parisian city blocks before and after automatic building detection (before)
ImageryDetected
ドラッグして比較
One automatic pass over central Paris, on Google Satellite imagery. Every polygon gets its own colour so neighbours stay separate. Drag the handle to compare.

Install it and pick your imagery layer

plugin マネージャーでインストールし、パネルを開き、読み込ませたい raster を選ぶ。

The AI Segmentation panel in QGIS with the Semi-Auto and Automatic switch
Automatic mode: pick the imagery layer, draw a zone, name the object.

Draw a zone and name the object

ゾーンを描き、buildingsと入力し、Detectを押す。それが全体の prompt で、好みの言語でいい。結果はタイルごとに戻り、プロジェクトCRSの1つのポリゴン layer になる。

Set the precision when the objects are small

覚える価値がある設定はprecisionひとつで、タイルサイズのことだ。小さいタイルはモデルに近接視を与え、小さい対象に必要だ。大きいタイルは文脈を与え、農地画地に必要だ。

Filter what came back

layer になる前にパネルが3段階を案内する:残すものを絞るKeep、モデルの見逃しを直すCorrect、出力Shapesの選択だ。勝負は最初に決まり、後節で詳述する。

Clean the geometry

Simplify、orthogonalize、穴消しの順で、それぞれ意味がある所だけにかける。3つのツールと順序の理由は後述だ。

実行はカバーした地面で数える。毎月無料枠が付き、カード不要で、Proで増える。検出は欧州サーバーで動き、画像で学習はしない。機外に出せない場合は小型ローカルモデルもある。Keep、Correct、Shapesの詳細は完全ガイドにある。

フィルタリングが仕事の本体

生の検出出力は信頼度スコア付きの候補ポリゴン群だ。密集画像では大半が小さく不確かだ。このパリ実行は両フィルタを全開で書き出し、全候補を layer に入れた:1.18 km²に635ポリゴンだ。

1 m²101001 00010 000 m²50 m²
Every one of the 635 detections, binned by area on a log scale. Two humps: noise under 5 m², real buildings above 160 m². The 50 m² line falls in the valley between them, which is why it is not an arbitrary number. Median 3.2 m², largest 13,528 m², median confidence 0.26.

戻ってきたものの半分は駐車枠より小さい:通気口、天窓、階段室、中庭小屋だ。画像上の実在物であって正しく囲われているが、誰も建物フットプリントとは呼ばない。

だから絞る。パネルの2つのスライダーを動かすか、属性テーブルからSelect by Expressionで同じ作業をする:

"area_m2" >= 50 AND "score" >= 0.5

残るのは635中82ポリゴンで、全体263,658 m²中222,338 m²をカバーする。閾値はうのみにせず、自分で動かしてほしい。緑がフィルタを生き残り、白は消える。

Aerial imagery of dense Parisian blocks with detected building polygons drawn over it

82 / 635polygons kept (13%)

84%of the built area (222,338 m²)

The same 635 detections the attribute table holds. Drop the confidence to zero and the courtyard sheds and skylights come back.

1つ目を引く間、2つ目の数字を見てほしい。ポリゴンの87%を捨てても面積の損失は16%で、残りはどのみち手で1つずつ消したノイズだ。ツールの良し悪しを疑いながら消すことになる。

両方を仕事に合わせる。工業倉庫の調査なら面積下限を200 m²まで上げられる。非正規居住地の地図化では50 m²で実家屋を捨てるので、15まで下げて信頼度スコアに頼る。

きれいな結果の例

パリは難しい例だ。約10 km西の戸建て住宅に同じツールを使うと:

Detached and semi-detached houses in a Paris suburb, each house filled with its own colour
Detached housing, review filter on. One polygon per house, almost nothing to throw away.

85m²

median polygon area

Paris run: 3.2 m²

0.79

median confidence

Paris run: 0.26

251polygons

kept, out of 251 returned

Paris run: 82 out of 635

同じツール、同じ都市で、捨てるものはない。変わったのは建物の作りであって、モデルではない。

苦手な例:密集した連続街区

Close view of Haussmann blocks, each block one coloured polygon following the street edge with courtyards cut out
The outline follows the street edge precisely and cuts out the courtyards. What it does not do is split the block into individual addressed buildings.

各ポリゴンは街区全体の建築外形をなぞり、街路線に寄り添い、中庭を正しくくり抜く。建築面積や不浸透面には良く、住所ごとのポリゴンには向かない。付着した2棟の間の界壁は、上から見るものがないので、垂直画像を読むモデルには見つけられない。

ジオメトリの整形

3つの標準QGISツールでフットプリント layer を整える。simplifyが直角化した頂点を動かすので順序が重要だ。

  1. Simplify、空中画像で許容0.5 m。境界を目で分かるほど動かさずに頂点数を大きく減らす。
  2. Orthogonalize。直角に近い角を直角に吸着する。まだ角が整っていないオープンデータや手描き作業にかける。
  3. Delete holes、中実フットプリントが欲しい場合のみ。パリ結果にはかけない:あの穴は中庭であって正しい。

検出 layer では手順2はほぼ何もしない。想定ではなく測定した。190棟の検出建物にOrthogonalizeをかけ、1,845隅の前後を比べた。

87.9%

corners already within 1° of square

before running anything

87.9%

after Orthogonalize

the same 1,845 corners

1.7cm

median vertex shift

9.1 cm at the worst

Close view of detected building outlines on aerial imagery, corners meeting at right angles
The same detections, close in. The corners arrive square, so the cleanup step has nothing left to snap.

直角でない12%は連棟テラスだ。街区中央を走る段差縁を見てほしい。あの段は実在の屋根線であってモデル誤差ではないので、隅ツールでは直らない。

**使う場合:**数百から数千棟、合わせるべき画像がある場合、または複数人が同じ layer を同じ方法で作る必要がある場合。

**使わない場合:**歴史的中心部で住所ごとに1ポリゴンが必要な場合。その用途に自動検出は使わないし、地籍データ+手修正が勝つ。

Try it free in QGIS, no card needed

Method 3: 手動でデジタイズ

50棟未満なら描こう。無料で正確だし、その規模なら私も今でも自分で描く。

Turn on snapping

Project -> Snapping Optionsで頂点とセグメント、トポロジー編集をオンにする。これを飛ばすと午後はずっと微小ポリゴン消しになる。

Trace, and watch yourself drift

60棟目あたりで、6棟目では絶対に手を抜かなかった角を落とし始め、自分では気づかない。もう layer に入っている。

**使う場合:**約50棟未満、または密集した歴史的中心部で住所ごとに1ポリゴンが必要な場合。

**使わない場合:**数が数百にのぼる場合、または複数人が同じ layer を同じ方法で作る必要がある場合。

まとめ

オープンデータセット自動検出手動デジタイズ
費用無料無料枠、その後有料無料
準備数分数分不要
向く用途カバー済みの地域数百から数千棟約50棟未満
自分の画像との一致いいえはいはい
チームでの一貫性はいはいいいえ
密集連続街区場合による街区外形のみはい
由来の説明データセットと時期自分の画像+信頼度スコア自分

まずオープンデータセットを確認する。1つの街区で数千棟も食い違うので、画像に対する縁の一見で先へ進むかが決まる。

クライアントのオルソ画像に合わせるべきフットプリントは、カバー率に関わらずオープンデータセットを除外する。

検出のフィルタリングが作業の大半だ:パリ中心部で635中82ポリゴンが残り、建築面積の84%を持つ。

建物が接する所では、垂直画像からはいくら払っても住所ごとに1ポリゴンは得られない。代わりに地籍データに結合する。

約50棟を超えると、手動デジタイズは気づかぬうちにぶれる。

よくある質問

ドローン画像でも動く?

衛星より良い。画像源より地上解像度が重要だ:30 cm衛星より5 cmオルソ画像の方が境界がきれいで信頼度も上がる。

GPUは必要?

不要だ。両モードとも既定では当社サーバーで動き、小型ローカルモデルは自分のCPUで動くが遅く精度も低い。すべて機内に留めたいならGeo-SAMやsamgeoが無料で良く、こちらはNVIDIAカードが必要だ。

実行コストは?

自動はゾーンがカバーした地面で数え、Cloud AIは保存ごとに1対象を数える。自分のマシンでのSemi-Autoは無料だ。毎月無料枠が付く。

住所ごとに1ポリゴンは取れる?

建物が接する中心市街地では垂直画像からは取れない。モデルは街区全体の建築外形を返し、中庭をくり抜く。建築面積には正しく、住所には向かない。代わりに地籍データに結合してほしい。

どのオープンデータセットから始めるべき?

活動中のマッパーがいる地域ならOpenStreetMapだ。いない所との差は歴然だ:あのルアンダの1 km²ではOSMは建物ゼロ、Microsoftが3,140、Google Open Buildingsが4,468だ。

屋根と地面の差の全文は建物フットプリントとはを読む。分類済み raster の場合、どのモデルよりポリゴン化が勝つが、QGISで raster からベクタへを読む。当社が作る残りはQGIS AI ハブにある。

Try it free in QGIS, no card needed