QGIS 泳池偵測:5 種方法

要在
中偵測泳池,先查 OpenStreetMap:Vector > QuickOSM > QuickOSM…,key leisure,value swimming_pool。圖資稀疏的地方,就在 raster calculator 對藍色設門檻,或跑分割模型。用哪一種,由地面解析度決定。
網路上常見的錯誤說法
三種答案在論壇和教學裡一直被轉傳,每一種都會讓你浪費一天。
**「用 Sentinel-2 跑 NDWI 就能數泳池。」**綠光和近紅外是 10 m,短波紅外是 20 m,而新建的地下泳池只有 29 到 30 m²,也就是三分之一個像元。在郊區跑 MNDWI,只會找到城邊的水庫,花園裡的泳池一個都找不到。
**「對藍色設門檻就有泳池了。」**色彩規則只認顏色,其他什麼都不認。藍色金屬屋頂和蓋木柴堆的藍色帆布會通過,深色池底的泳池和發綠的泳池會被漏掉,加蓋的泳池根本不在影像裡。
**「偵測結果就是名單。」**法國稅務單位用 IGN 航拍跑過一次,最後還是逐一發函給屋主。偵測結果只是候選,把它接到地籍和人名,就變成個人資料。
簡短答案
| 你的輸入 | 方法 | 花費 |
|---|---|---|
| OSM 圖客活躍的任何地區 | 方法 1,用 QuickOSM 查 leisure=swimming_pool | 免費,一次查詢 |
| 5 到 30 cm 的 RGB 正射影像 | 方法 2,在 raster calculator 做色彩門檻 | 免費,QGIS 核心內建 |
| 有近紅外或短波紅外波段的影像 | 方法 3,算水體指數再設門檻 | 免費,衛星影像看不到庭院泳池 |
| 多光譜影像和一個下午 | 方法 4,SCP 或 dzetsaka | plugin 免費,花的是你畫訓練區的時間 |
| RGB 正射影像和數百個泳池 | 方法 5,分割模型 | 免費 plugin 要自備模型或 GPU。雲端 plugin 有免費額度,之後要訂閱 |
我怎麼比較的
五個標準:輸入、影像是否離開你的電腦、多少輸出要人工檢查、費用、安裝難度。每個版本、價格和選單路徑,都是在 2026 年 9 月 3 日對著 QGIS 3.44 手冊和各工具文件讀過的。免費方法我用同一街區的法國郊區正射影像和 Sentinel-2 影像實際跑過。
五種裡我們自己做了一種,就是方法 5。要掃圖並由別人為公開精度數字背書,就用 Mapflow。它有專用的 Swimming pools 模型,隨選提供,旁邊標著 F1 高於 0.95。泳池的數字,我們自己不公布。
開始之前
先用投影坐標系工作,因為下面有三步要用 layer 單位按面積篩選。再檢查解析度。法國泳池協會說新建地下泳池是 29 到 30 m²,在 10 cm 正射影像上是 3,000 個像元,在 10 m Sentinel-2 波段上是三分之一個像元。
法國稅務單位用 IGN 航拍跑這個。它的 Foncier innovant 試點對 2022 年九個省的 20,356 個泳池課稅,金額 980 萬歐元,2023 年全國跑一次,又找到 150,000 個該課稅卻漏列的泳池。每一個最後都還是發函給屋主。
方法 1:拿別人已經畫好的泳池
OpenStreetMap 有 3,036,801 個標 leisure=swimming_pool 的物件,其中 2,731,704 個是帶真實幾何的 ways,這是 2026 年 9 月 3 日 taginfo 的數字。
Open QuickOSM and query
Vector > QuickOSM > QuickOSM…, which queries the Overpass API. Key leisure, value swimming_pool, on the canvas extent or a named administrative area.
Keep polygons, filter to gardens
A pool mapped as a node has no area, so take the polygon layer. 1,808,809 of these pools also carry access=private, the filter for backyard pools.
leisure=swimming_area 是另一種物件:湖裡或海邊指定的游泳區。

**適合時機:**你要的是公共和商業泳池。
**不適合時機:**工作是要找出沒人申報的。
方法 2:在 raster calculator 對藍色設門檻
這是 QGIS 核心最接近的做法。打開 Raster > Raster Calculator…,波段寫法是 layer_name@band_number。在 RGB 正射影像上,下面這組會留下又亮又藍的像元:
("ortho@3" > 90) AND ("ortho@3" - "ortho@1" > 25) AND ("ortho@3" - "ortho@2" > 10)
這組數字是我在 20 cm 正射影像上調的。取二十個泳池像元和二十個屋頂像元,自己再移動。
用 Raster > Conversion > Polygonize (Raster to Vector) 轉成向量,再用 native:extractbyexpression 篩選:面積用 $area > 6 AND $area < 400,形狀用我自己的比值 4 * pi() * $area / ($perimeter ^ 2) > 0.5,因為 QGIS 沒有內建的緊湊度函數。

RGB 值會跟著太陽角度和曝光跑,在一條航線調好的門檻,換一條就破功。色相和飽和度撐得比較久,用 Processing Toolbox 的 i.rgb.his,它「transforms raster maps from RGB (Red-Green-Blue) color space to HIS (Hue-Intensity-Saturation) color space」。
兩種規則都不知道那個藍色東西是什麼。
- **陰影。**背陰的屋頂斜面看起來深藍。提高下限,樹下的泳池就沒了。
- **藍色屋頂和帆布。**又亮又藍,形狀還常常剛好。
- **深色池底和發綠的池水。**黑色池底看起來像柏油,長藻看起來像草地。我的規則兩個都漏掉。
- **加蓋的泳池。**根本不在影像裡。

**適合時機:**同一張正射影像,你會人工檢查。
**不適合時機:**多條航線拼起來的鑲嵌影像。
方法 3:有波段就用水體指數
水幾乎完全吸收近紅外,所以在 NIR 波段裡水是黑的,藍色屋頂還是亮的。
- NDWI,McFeeters 1996:
(Green - NIR) / (Green + NIR)。在 Sentinel-2 上是(B3 - B8) / (B3 + B8)。 - MNDWI,Xu 2006:
(Green - SWIR) / (Green + SWIR)。在 Sentinel-2 上是(B3 - B11) / (B3 + B11)。把 NIR 換成 SWIR 可以壓住建築地,在郊區這點很關鍵。
大於零取出來,轉向量,照方法 2 篩選。Rodríguez-Cuenca 和 Alonso 在 2014 年為這個工作調過一個正規化泳池差異指數。
Sentinel-2 的 B3 和 B8 是 10 m,B11 是 20 m,所以 30 m² 的泳池永遠分不出花園。對住宅街區跑 MNDWI,只會回傳城邊的水庫,其他什麼都沒有。

**適合時機:**正射影像在 50 cm 或更細且有 NIR 波段。它直接打敗色彩門檻。
**不適合時機:**只有三波段 RGB,或用 Sentinel-2 找庭院泳池。
方法 4:在自己的影像上訓練分類器
分類器從你畫的範例學泳池像元,所以固定門檻會破功的鑲嵌影像,它撐得住。
Luca Congedo 的 Semi-Automatic Classification Plugin 是常用選擇。在 SCP dock 裡建訓練輸入(.scpx),畫 ROI,再到主視窗跑 SCP > Band processing > Classification。六種演算法,從 Minimum Distance 到 Random Forest。9.0.4 版在 2026 年 7 月 11 日發布,但它宣告 QGIS 最低版本是 3.99,所以 QGIS 3.x 還是裝 8.5.0。
Nicolas Karasiak 的 dzetsaka 5.0.11 比較輕:十一種分類器,它的 Gaussian Mixture Model 不用 scikit-learn 也能跑。
藍色屋頂類和陰影類也要畫。分類器只會排除你給它看過的東西。

**適合時機:**多航線或多季節,工作流程會重複用。
**不適合時機:**一張正射影像、跑一次。兩個都是分像元,不是分物件,所以還是要轉向量再篩選。
方法 5:分割模型
分割模型讀形狀和上下文,所以同樣顏色的泳池和帆布分得開。我們自己做的就是這一種,AI Segmentation。這一節講的是我們自己的工具。
Install and sign in
Plugin manager, QGIS 3.22 or later. No GPU, no model weights. An account, a free allowance, then 39 euros a month excluding VAT.
Draw a zone, type the word, filter
Type swimming pool and run. Polygons come back in the project CRS with area, perimeter and a confidence score. Sort, then delete what is wrong.
我們調參表裡的兩個數字,執行時讀到。泳池一次約要 0.13 m 像元、圖磚邊長最多 300 m,粗過這個,泳池會糊進露台裡。swimming pool 的檢查從 0.20 信心開,對 building 是 0.30,因為泳池遮罩的分數本來就比屋頂低。

一個限制:加蓋的泳池到不了模型,所以一定漏。兩種雲端模式都會把影像送到我們在歐盟的伺服器。

同樣做這件事的還有四家,都是 2026 年 9 月 3 日讀的。
| 工具 | 安裝什麼 | GPU | 帳號 | 影像是否離開你的電腦 | 泳池支援 | 費用 |
|---|---|---|---|---|---|---|
| Deepness | plugin 管理器、它的 Python 套件、一個 ONNX 模型 | 可選,CPU 能跑 | 不用 | 不用 | 看你給什麼模型 | 免費 |
| Geo-SAM | plugin 管理器、相依套件、模型權重 | 可選 | 不用 | 不用 | 一次點選或框選一個物件 | 免費 |
| samgeo | 一個 Python 套件,沒有 QGIS 面板 | 建議有 | 不用 | 不用 | 可寫腳本,沒有泳池類別 | 免費 |
| Mapflow | plugin 管理器 | 不用 | 要 | 要 | 專用 Swimming pools 模型,隨選提供 | 點數,付費 |
| AI Segmentation(我們的) | plugin 管理器 | 不用 | 要 | 兩種雲端模式要,地端模型不用 | 輸入 swimming pool | 免費額度,之後每月 39 歐元未稅 |
**適合時機:**泳池多到你不想手工描。
**不適合時機:**影像不能離開你的電腦。用 Deepness 或 Geo-SAM。
五種方法並排
| 你有什麼 | 方法 |
|---|---|
| 圖資完整的城鎮,公共泳池就夠 | 方法 1,QuickOSM |
| 一張優於 30 cm 的 RGB 正射影像 | 方法 2,色彩門檻再篩選 |
| 帶 NIR 波段的正射影像 | 方法 3,NDWI |
| Sentinel-2 或任何 10 m 影像 | 庭院泳池都不行。去找更細的影像 |
| 多航線、會重複用的流程 | 方法 4,SCP 或 dzetsaka |
| 幾百個泳池,不想清假陽性 | 方法 5,分割模型 |
結論
先看解析度,再看波段,最後看你能吞多少人工檢查。
30 m² 的泳池在 10 m 分辨率下永遠分不出花園,所以不管跑什麼指數,Sentinel-2 都不是找庭院泳池的感測器。
色彩門檻會把街區上所有藍色的東西都撿回來,所以看結果之前,先按面積和緊湊度篩選。
加蓋的泳池不在影像裡,所以這頁的方法都找不到,什麼價格都改變不了。
偵測結果是候選。無論跑哪一種,動 layer 之前,先打開信心最低的十個多邊形看過。
Try it free in QGIS, no card needed
常見問題
QGIS 自己能偵測泳池嗎?
沒有這個功能。QGIS 核心給的是 raster calculator、轉向量和向量篩選,也就是方法 2。要把泳池認成物件,需要 plugin。
Sentinel-2 影像找得到庭院泳池嗎?
找不到。綠光和近紅外是 10 m 波段,短波紅外是 20 m,30 m² 的泳池只有三分之一個像元。用 30 cm 或更細的航拍。
藍色屋頂為什麼一直被當成泳池?
漆過的金屬屋頂比池水更亮更藍,而色彩規則只認顏色。按面積和緊湊度篩選,改用 NDWI,或用模型。
從航拍偵測泳池合法嗎?
把偵測結果接到地籍和屋主姓名,就變成個人資料,在歐盟要有 GDPR 的合法依據。稅務機關有寫進法律的依據,一般公司通常沒有,串接之前先問資料保護長,模型的輸出也絕不能是開帳單前的最後一步。
精度可以期待多少?
單一數字一定是假的,跟你的影像和季節走。20 cm 的露天泳池回來得不錯,加蓋的這裡全部漏掉,藍色屋頂就是你要手工刪的。
篩選的完整步驟,看 QGIS 建築輪廓偵測。遮罩後面的清理,看 QGIS 柵格轉向量。其餘的在 QGIS AI hub。


