跳至內容
AI Segmentation
QGIS
教學

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 或 dzetsakaplugin 免費,花的是你畫訓練區的時間
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 是另一種物件:湖裡或海邊指定的游泳區。

A suburban block on satellite imagery with OSM swimming pool polygons in blue over three pools, and seven other visible pools with no polygon at all.
Three pools mapped, seven not. Mappers draw public and hotel pools. Private garden pools are the ones nobody bothers with, and the ones a tax office is looking for.

**適合時機:**你要的是公共和商業泳池。

**不適合時機:**工作是要找出沒人申報的。

方法 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 沒有內建的緊湊度函數。

A suburban orthophoto with a red mask from the raster calculator covering every swimming pool, a blue metal roof, and a blue tarpaulin over a woodpile.
The rule above, over 20 cm imagery. It finds every open pool. It also finds a blue metal roof and a tarpaulin.

RGB 值會跟著太陽角度和曝光跑,在一條航線調好的門檻,換一條就破功。色相和飽和度撐得比較久,用 Processing Toolbox 的 i.rgb.his,它「transforms raster maps from RGB (Red-Green-Blue) color space to HIS (Hue-Intensity-Saturation) color space」。

兩種規則都不知道那個藍色東西是什麼。

  • **陰影。**背陰的屋頂斜面看起來深藍。提高下限,樹下的泳池就沒了。
  • **藍色屋頂和帆布。**又亮又藍,形狀還常常剛好。
  • **深色池底和發綠的池水。**黑色池底看起來像柏油,長藻看起來像草地。我的規則兩個都漏掉。
  • **加蓋的泳池。**根本不在影像裡。
Four tight crops side by side: a blue tarpaulin, a shaded roof slope, a dark-bottom pool and a pool under a grey winter cover, with the threshold mask overlaid on the first two only.
The tarp and the shadow pass the rule and should not. The dark-bottom pool and the covered pool fail it and should not.

**適合時機:**同一張正射影像,你會人工檢查。

**不適合時機:**多條航線拼起來的鑲嵌影像。

方法 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,只會回傳城邊的水庫,其他什麼都沒有。

Two panels of the same suburb: a 20 cm orthophoto with eleven visible pools, and the Sentinel-2 MNDWI of the same extent showing a uniform grey with no pool visible.
Eleven pools on the left, none on the right. Same extent, same week. A 30 m² pool never reaches a 10 m sensor as an object.

**適合時機:**正射影像在 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 也能跑。

藍色屋頂類和陰影類也要畫。分類器只會排除你給它看過的東西。

The SCP dock in QGIS with a training input listing pool, roof, shadow and vegetation classes, and the classified raster behind it with pool pixels in cyan.
Three classes and a Random Forest over the same 20 cm orthophoto. The blue-roof class does more work than the pool class.

**適合時機:**多航線或多季節,工作流程會重複用。

**不適合時機:**一張正射影像、跑一次。兩個都是分像元,不是分物件,所以還是要轉向量再篩選。

方法 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,因為泳池遮罩的分數本來就比屋頂低。

A residential block on aerial imagery in QGIS, every backyard swimming pool filled with its own colour, roofs and gardens untouched.
One zone, one word, over 20 cm imagery. Each pool is its own polygon with an area, editable like any vector feature.

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

Two neighbouring gardens: the open pool on the left outlined in the detection layer, the pool under a grey winter cover on the right with no polygon.
Left, detected. Right, a pool under a cover. Nothing in the image says it is there, and no method on this page finds it.

同樣做這件事的還有四家,都是 2026 年 9 月 3 日讀的。

工具安裝什麼GPU帳號影像是否離開你的電腦泳池支援費用
Deepnessplugin 管理器、它的 Python 套件、一個 ONNX 模型可選,CPU 能跑不用不用看你給什麼模型免費
Geo-SAMplugin 管理器、相依套件、模型權重可選不用不用一次點選或框選一個物件免費
samgeo一個 Python 套件,沒有 QGIS 面板建議有不用不用可寫腳本,沒有泳池類別免費
Mapflowplugin 管理器不用專用 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