跳至內容
AI Segmentation
QGIS
教學

如何在 QGIS 中自動偵測建築物足跡

0:00 / 0:00
一個區域,一個單字,848 棟建築。實際執行,加速 3x,全程無剪輯。

我在巴黎市中心的一個區域執行了自動偵測,一次就得到 635 個多邊形。決定保留哪 82 個花的時間比偵測本身更久,而這正是幾乎每篇教學都略過的第二部分。

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.

簡短版。 要在 中自動偵測建築物足跡:從 plugin manager 安裝 AI 偵測 plugin,載入你的影像,畫出區域,為物件命名,然後執行。你會在專案 CRS 中得到一個多邊形 layer。接著依信心度和面積篩選原始輸出,因為回傳結果中有很大一部分並不是建築物。

什麼是建築物足跡

建築物與地面接觸處的輪廓,以平面多邊形表示。不是屋頂,不是地籍地塊,也不是地址點。

這裡之所以重要,是因為垂直影像給你的是屋頂。在接近天底角拍攝的五層樓 Haussmann 街廓中,偏移很小。但在高塔上就不是了。在向任何人承諾一個建築物足跡 layer 之前,值得先知道這一點。

先檢查開放資料集

很多工作其實不需要偵測任何東西。

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.

將其中一個資料集疊加到你的影像上。只有在涵蓋範圍有缺口、資料年份不對,或建築物足跡必須符合客戶交給你的特定正射影像時,你才需要繼續往下做。

五十棟以下,直接畫出來

手動數位化。免費、精確,而且在這個數量下我仍然會自己做。先開啟 snapping (Project -> Snapping Options, vertex and segment, topological editing on),否則你會花一下午刪除狹長碎片。

在第 60 棟左右,你會開始在第 6 棟絕不會偷懶的地方偷工減料,而自己沒有察覺。它已經在 layer 裡了。

自動偵測的方法

這裡的 plugin 是 AI Segmentation,它是我和共同創辦人在 TerraLab 打造的,所以請在知道工具來自誰的前提下閱讀這一節。它和其他 plugin 一樣從 plugin manager 安裝:不用手動下載,不需要 Python 環境,也不用專用顯示卡,因為模型在我們的伺服器上執行。支援 Windows、macOS 和 Linux。

畫出區域,輸入 buildings,按下 Detect。整個 prompt 就是這樣,如果你偏好,也可以使用自己的語言。結果會隨著圖塊逐一傳回,成為專案 CRS 中的一個多邊形 layer。

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.

唯一值得學會的設定是 precision,也就是圖塊大小。小圖塊讓模型看得更近,這是小物件所需要的。大圖塊則提供情境,農地地塊需要的就是這個。圖塊也是計費單位:每個一個 credit。每個帳戶每月都有免費額度,不需要信用卡,而 Pro 會提高額度。偵測在歐洲伺服器上執行,我們不會用你的影像進行訓練;如果任何資料都不能離開你的電腦,還有小型本機模型可用。

接著,面板會在任何內容成為 layer 之前,引導你完成三個步驟:篩選要 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.

回傳結果有一半比停車位還小:通風口、天窗、樓梯間房舍、庭院棚屋。它們都是影像中的真實物件,輪廓也正確,但沒有人會把它們稱為建築物足跡。

所以要進行篩選。移動面板中的兩個滑桿,或在屬性表中使用 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.

拖曳第一個滑桿時,注意第二個數字。丟掉 87% 的多邊形,只會損失 16% 的面積。剩下的都是你本來也得手動逐個刪除的雜訊,同時還會懷疑這個工具到底好不好用。

依工作調整兩者。工業棚屋測量可以把面積下限提高到 200 m²。繪製非正式聚落時,50 m² 會丟掉真實房屋,所以降到 15,改為更多依賴信心分數。

乾淨的結果長什麼樣子

巴黎是個困難案例。同一個工具用在西邊約 10 公里處的獨立住宅上:

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.

85

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.

每個多邊形都描繪出整個街廓的建成外框,貼合街道線並正確切出內院。適合建成區面積或不透水表面;如果你需要每個地址一個多邊形,就不對了。任何模型都無法從垂直影像中找出兩棟相連建築之間的共用牆,因為從上方看,什麼也沒有。

所以在歷史城市中心,如果要建立每個地址一個多邊形的 layer,我不會使用自動偵測。地籍資料加上手動修正,在這種情況下更勝一籌。

清理幾何

三個原生 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% 不方正的角點,是相連露台。看看沿著街廓中央向下延伸的階梯狀邊緣。沒有任何角點工具能修正它,因為那些階梯是沿著真實屋頂線,而不是模型錯誤。

該使用哪種方法

開放資料集手動數位化自動偵測
成本免費免費免費方案,之後付費
設定幾分鐘幾分鐘
適合已有良好涵蓋的區域少於約 50 棟建築數百至數千棟
符合你的影像
團隊間一致
密集連續街廓視情況而定僅街廓外框
可明確說明的來源資料集與年份你的影像,附帶信心分數

我常被問的問題

無人機影像也能用嗎? 比衛星影像更好。地面解析度比來源更重要:5 cm 正射影像比 30 cm 衛星場景提供更乾淨的邊界和更高的信心度。

需要 GPU 嗎? 不用。兩種模式預設都在我們的伺服器上執行,小型本機模型則在你自己的 CPU 上運作,速度較慢且準確度較低。如果你希望所有內容都留在自己的電腦上,Geo-SAMsamgeo 免費且表現不錯,但它們需要 NVIDIA 顯示卡。

執行一次要多少費用? 自動模式每個圖塊一個 credit,半自動模式每儲存一個物件一個 credit。每個帳戶每月都有免費額度,而本機模型完全不花錢。

Try it free in QGIS, no card needed