跳转到内容
AI Segmentation
QGIS
教程

QGIS游泳池检测:5种方法对比

Three panels of the same suburban block from the air: bare imagery, a colour threshold lighting up the pools and a blue roof alike, and a segmentation result with only the pools outlined.

要在 里检测游泳池,先查 OpenStreetMap:Vector > QuickOSM > QuickOSM…,key 为 leisure,value 为 swimming_pool。地图稀疏的地方,在 raster 计算器里对蓝色做阈值,或跑分割模型。地面分辨率决定用哪一种。

网上说法错在哪里

论坛和教程里反复出现三个答案,每个都会浪费你一天。

“在 Sentinel-2 上跑 NDWI 数泳池。” Green 和 NIR 是 10 m,SWIR 是 20 m,而新建地下泳池只有 29 到 30 m²,也就是三分之一个像素。在居民区跑 MNDWI,只能找到城边的蓄水池,花园里的泳池一个也找不到。

“蓝色做阈值就是泳池。” 颜色规则只认颜色。蓝色金属屋顶、盖木柴堆的篷布会通过,深色池底泳池、发绿的泳池会被漏掉,加盖的泳池在影像里根本不存在。

“检测结果就是名单。” 法国税务局在 IGN 航片上跑过,仍然要给每个业主寄信。检测只是候选,把它与地块和姓名关联,就是个人数据。

简短答案

你的输入方法花费
OSM 活跃测绘区Method 1,用 QuickOSM 查 leisure=swimming_pool免费,一次查询
5 到 30 cm 的 RGB 正射影像Method 2,在 raster 计算器里做颜色阈值免费,QGIS 核心功能
带近红外或 SWIR 波段的影像Method 3,算水体指数再做阈值免费,卫星上看不到花园泳池
多光谱影像和一个下午Method 4,SCP 或 dzetsakaplugin 免费,花你的时间画训练区
RGB 正射影像和几百个泳池Method 5,分割模型免费 plugin 要你自备模型或 GPU。云端 plugin 有免费额度,之后订阅

我如何对比

五个标准:输入、影像是否离开本机、多少输出要手检、花费、安装成本。所有版本、价格和菜单路径都在 2026 年 9 月 3 日对照 QGIS 3.44 手册和各工具文档核对过。免费方法我在法国郊区正射影像和同一街区的 Sentinel-2 场景上跑过。

五种中我们做了一种,就是 Method 5。要大范围扫、还要有人为公开精度背书,用 Mapflow。它有专用的 Swimming pools 模型,按需提供,旁边标着 F1 高于 0.95。我们不对泳池公布数字。

开始之前

用投影 CRS 工作,下面三步要按 layer 单位做面积过滤。然后查分辨率。法国泳池联合会数据新建地下泳池 29 到 30 m²,在 10 cm 正射影像上是 3000 个像素,在 10 m Sentinel-2 波段上是三分之一个像素。

法国税务局在 IGN 航片上跑这个。Foncier innovant 试点对 9 个省 2022 年的 20,356 个泳池征税,价值 980 万欧元,2023 年全国一遍又找出 150,000 个应税未申报泳池。每一个最后都走了给业主寄信的流程。

Method 1:拿别人已经画好的泳池

OpenStreetMap 有 3,036,801 个 leisure=swimming_pool 对象,其中 2,731,704 个是有真实几何的 ways,taginfo 2026 年 9 月 3 日数据。

Open QuickOSM and query

Vector > QuickOSM > QuickOSM…,查询的是 Overpass API。Key 为 leisure,value 为 swimming_pool,范围用画布范围或指定行政区。

Keep polygons, filter to gardens

以 node 画的泳池没有面积,所以拿 polygon layer。1,808,809 个泳池还带 access=private,这就是后院泳池的过滤条件。

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.

适用: 需要公共和商业泳池。

不用: 要找没人申报的。

Method 2:在 raster 计算器里对蓝色做阈值

这是核心 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 正射影像上调的。采样 20 个泳池像素和 20 个屋顶像素,再移动阈值。

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.

适用: 一张一致的正射影像,愿意手检。

不用: 多架次拼接的镶嵌图。

Method 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)。用 SWIR 代替 NIR 能压住建成区,在郊区这点很关键。

大于零做阈值,转面,按 Method 2 过滤。Rodríguez-Cuenca 和 Alonso 在 2014 年为这个任务调过 Normalized Difference Swimming Pools Index

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 上找花园泳池。

Method 4:在自己的影像上训练分类器

分类器从你画的样本里学泳池像素,所以能扛住搞坏固定阈值的镶嵌图。

Semi-Automatic Classification Plugin by Luca Congedo 是常用选择。在 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。

dzetsaka 5.0.11,by Nicolas Karasiak,更轻:十一种分类器,它的 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.

适用: 多架次多季节,流程要重复用。

不用: 一张正射影像跑一遍。两个都是分像素不分对象,转面和过滤省不掉。

Method 5:分割模型

分割模型读形状和上下文,同样的蓝色能分出泳池和篷布。我们做的就是这类,AI Segmentation。这一节讲我们自己的工具。

Install and sign in

plugin 管理器,QGIS 3.22 或更高。不用 GPU,不用模型权重。要一个账号,有免费额度,之后 39 欧元/月,不含税。

Draw a zone, type the word, filter

输入 swimming pool 并运行。多边形回到项目 CRS,自带面积、周长和置信度。排序,删掉错的。

两个数字来自我们的调参表,运行时读取。泳池任务要求约 0.13 m 每像素,分块最大 300 m,粗了泳池就糊进露台。swimming pool 的复核从 0.20 置信度打开,building 是 0.30,因为泳池 mask 分数本来就比屋顶低。

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。

五种方法对照

你有什么方法
测绘完善的城镇,公共泳池够用Method 1,QuickOSM
一张好于 30 cm 的 RGB 正射影像Method 2,颜色阈值再过滤
带 NIR 波段的正射影像Method 3,NDWI
Sentinel-2 或任何 10 m 影像花园泳池哪个都不行。去找更细的影像
多架次、可重复的流程Method 4,SCP 或 dzetsaka
几百个泳池,不想忍误检Method 5,分割模型

记住什么

先看分辨率,再看波段,再看你能承受多少手检。

30 m² 泳池在 10 m 上永远无法从花园里分离,所以不管跑什么指数,Sentinel-2 都不是找后院泳池的传感器。

颜色阈值会返回街区里所有蓝色东西,所以先按面积和紧凑度过滤,再看结果。

加盖泳池在影像里缺失,所以这页没有方法能找到,多少钱都不行。

检测是候选。不管跑什么,在有人对该 layer 采取行动之前,先打开置信度最低的十个多边形。

Try it free in QGIS, no card needed

常见问题

QGIS 能自己检测游泳池吗?

不能,作为功能没有。核心 QGIS 给你 raster 计算器、面矢量化和矢量过滤,也就是 Method 2。把泳池识别为对象需要一个 plugin。

能在 Sentinel-2 影像里找后院泳池吗?

不能。Green 和 NIR 是 10 m 波段,SWIR 是 20 m,30 m² 泳池只占三分之一个像素。用 30 cm 或更细的航片。

蓝色屋顶为什么总被认成泳池?

彩钢屋顶比池水更亮更蓝,而颜色规则只认颜色。按面积和紧凑度过滤,转用 NDWI,或用模型。

用航片检测游泳池合法吗?

把检测与地块和业主姓名关联就是个人数据,在 EU 需要 GDPR 下的合法依据。税务局有写进法律的依据。私营公司通常没有,所以关联前问你的数据保护官,模型的输出永远不能是账单前的最后一步。

精度能期待多高?

一个数字就是假的,随影像和季节变。20 cm 上的开放泳池回来得很好,加盖泳池这里全漏,蓝色屋顶就是你要手删的东西。

过滤步骤全文,看在 QGIS 中检测建筑轮廓。mask 背后的清理,看在 QGIS 中 raster 转矢量。其余在 QGIS AI hub