QGISで建物外形を検出する3つの方法
公開日 更新日
QGISで建物外形を検出するには3つのルートがある:オープンデータセットのダウンロード、自分の画像に対するAI検出 plugin の実行、手動デジタイズだ。一番速いのは2つ目だ。plugin マネージャーから plugin をインストールし、画像を読み込み、ゾーンを描き、buildingsと入力してDetectを押すと、プロジェクトCRSにポリゴン layerが載る。
フィルタリングが仕事の後半だ。戻ってくるものの多くは建物ではないので、生の出力を信頼度と面積で絞る。パリ中心部で1回実行して635ポリゴンを得たが、残す82を決める方が検出自体より時間がかかった。
| 入力 | 方法 | 時間 |
|---|---|---|
| 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
その一見で、ここで止めるか先を読むかが決まる。

**使う場合:**地域が既によく整備され、データセットの時期とライセンスで問題ない場合。
**使わない場合:**カバーに穴がある、時期が古い、特定の1枚のオルソ画像に合わせる必要がある場合。
Method 2: 自動検出
建物フットプリントとは、建物が地面に接する輪郭を平面ポリゴンにしたものだ。屋根でも敷地でも住所点でもない。ここで重要なのは、垂直画像がくれるのは屋根だという点だ:ほぼ真下の5階建てオスマン街区ならずれは小さいが、タワーではそうではない。フットプリント layer を約束する前に知っておくべきで、長い解説は建物フットプリントとはにある。
自動検出モデルは画像を読み、建物輪郭を信頼度スコア付きポリゴンで返す。当社はその一つを作っている、AI Segmentation。この節は当社自身のツールについてだ。
他のものと同じく plugin マネージャーから入れる:手動ダウンロード不要、Python環境不要、専用グラフィックカード不要だ。モデルは当社サーバーで動くからだ。Windows、macOS、Linux対応だ。


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

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ポリゴンだ。
戻ってきたものの半分は駐車枠より小さい:通気口、天窓、階段室、中庭小屋だ。画像上の実在物であって正しく囲われているが、誰も建物フットプリントとは呼ばない。
だから絞る。パネルの2つのスライダーを動かすか、属性テーブルからSelect by Expressionで同じ作業をする:
"area_m2" >= 50 AND "score" >= 0.5
残るのは635中82ポリゴンで、全体263,658 m²中222,338 m²をカバーする。閾値はうのみにせず、自分で動かしてほしい。緑がフィルタを生き残り、白は消える。

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西の戸建て住宅に同じツールを使うと:

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
同じツール、同じ都市で、捨てるものはない。変わったのは建物の作りであって、モデルではない。
苦手な例:密集した連続街区

各ポリゴンは街区全体の建築外形をなぞり、街路線に寄り添い、中庭を正しくくり抜く。建築面積や不浸透面には良く、住所ごとのポリゴンには向かない。付着した2棟の間の界壁は、上から見るものがないので、垂直画像を読むモデルには見つけられない。
ジオメトリの整形
3つの標準QGISツールでフットプリント layer を整える。simplifyが直角化した頂点を動かすので順序が重要だ。
- Simplify、空中画像で許容0.5 m。境界を目で分かるほど動かさずに頂点数を大きく減らす。
- Orthogonalize。直角に近い角を直角に吸着する。まだ角が整っていないオープンデータや手描き作業にかける。
- 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

直角でない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は必要?
実行コストは?
自動はゾーンがカバーした地面で数え、Cloud AIは保存ごとに1対象を数える。自分のマシンでのSemi-Autoは無料だ。毎月無料枠が付く。
住所ごとに1ポリゴンは取れる?
建物が接する中心市街地では垂直画像からは取れない。モデルは街区全体の建築外形を返し、中庭をくり抜く。建築面積には正しく、住所には向かない。代わりに地籍データに結合してほしい。
どのオープンデータセットから始めるべき?
活動中のマッパーがいる地域ならOpenStreetMapだ。いない所との差は歴然だ:あのルアンダの1 km²ではOSMは建物ゼロ、Microsoftが3,140、Google Open Buildingsが4,468だ。
屋根と地面の差の全文は建物フットプリントとはを読む。分類済み raster の場合、どのモデルよりポリゴン化が勝つが、QGISで raster からベクタへを読む。当社が作る残りはQGIS AI ハブにある。
で建物外形を検出するには3つのルートがある:オープンデータセットのダウンロード、自分の画像に対するAI検出 plugin の実行、手動デジタイズだ。一番速いのは2つ目だ。plugin マネージャーから plugin をインストールし、画像を読み込み、ゾーンを描き、


