QGIS 游泳池识别:5 种方法对比
发布于 更新于


要在 QGIS 里识别游泳池,先查 OpenStreetMap:Vector > QuickOSM > QuickOSM…,key 为 leisure,value 为 swimming_pool。地图稀疏的地方,跑分割模型,或在 栅格计算器里对蓝色做阈值。地面分辨率决定用哪一种。
| 您的输入 | 方法 | 花费 |
|---|---|---|
| OSM 活跃测绘区 | 方法 1,用 QuickOSM 查 leisure=swimming_pool | 免费,一次查询 |
| RGB 正射影像和几百个泳池 | 方法 2,分割模型 | 免费插件需要您自备模型或 GPU。云端插件有免费额度,之后订阅 |
| 5 到 30 cm 的 RGB 正射影像 | 方法 3,在栅格计算器里做颜色阈值 | 免费,QGIS 核心功能 |
| 带近红外或 SWIR 波段的影像 | 方法 4,算水体指数再做阈值 | 免费,卫星上看不到花园泳池 |
| 多光谱影像和一个下午 | 方法 5,SCP 或 dzetsaka | 插件免费,花您的时间画训练区 |
所有版本、价格和菜单路径都在 2026 年 9 月 3 日对照 QGIS 3.44 手册和各工具文档核对过。
方法 1:拿别人已经画好的泳池
OpenStreetMap 有 3,036,801 个 leisure=swimming_pool 对象,其中 2,731,704 个是有真实几何的 ways,taginfo 2026 年 9 月 3 日数据。
打开 QuickOSM 并查询
Vector > QuickOSM > QuickOSM…,查询的是 Overpass API。Key 为 leisure,value 为 swimming_pool,范围用画布范围或指定行政区。
保留多边形,筛选出后院泳池
以节点画的泳池没有面积,所以选多边形图层。1,808,809 个泳池还带 access=private,这就是后院泳池的过滤条件。
leisure=swimming_area 是另一种对象:在湖泊或海里指定的游泳区。

适用: 需要公共和商业泳池。
不用: 要找没人申报的。
方法 2:分割模型
分割模型读形状和上下文,同样的蓝色能分出泳池和篷布。我们做的就是这类,AI Segmentation。这一节讲我们自己的工具。
安装并登录
插件管理器,QGIS 3.22 或更高。不用 GPU,不用模型权重。要一个账号,有免费额度,之后 €39/月,不含税。
画出区域,输入关键词,筛选结果
输入 swimming pool 并运行。多边形回到工程 CRS,自带面积、周长和置信度。排序,删掉错的。
两个数字来自我们的调参表,运行时读取。泳池任务要求约 0.13 m 每像素,分块最大 300 m,粗了泳池就糊进露台。swimming pool 的复核从 0.20 置信度打开,building 是 0.30,因为泳池的掩膜分数本来就比屋顶低。

一个限制:加盖泳池到不了模型,所以会漏检。两种云模式都会把影像发到我们在欧盟的服务器。

另外四个能干这活的,2026 年 9 月 3 日读取。
| 工具 | 安装什么 | GPU | 账号 | 影像离开本机 | 泳池支持 | 花费 |
|---|---|---|---|---|---|---|
| Deepness | 插件管理器、Python 依赖、ONNX 模型 | 可选,CPU 可跑 | 否 | 否 | 取决于您提供的模型 | 免费 |
| Geo-SAM | 插件管理器、依赖、模型权重 | 可选 | 否 | 否 | 每次点击或拉框出一个对象 | 免费 |
| samgeo | 一个 Python 包,没有 QGIS 面板 | 推荐 | 否 | 否 | 可写脚本,没有泳池类 | 免费 |
| Mapflow | 插件管理器 | 不用 | 是 | 云服务上是,企业版提供本地部署 | 专用的 Swimming pools 模型,按需提供 | 积分,付费 |
| AI Segmentation(我们的) | 插件管理器 | 不用 | 是 | 两种云模式是,本地模型否 | 输入 swimming pool | 免费额度,之后 €39/月,不含税 |
适用: 泳池多到不想手画。
不用: 影像不能离开本机。用 Deepness 或 Geo-SAM。
要大范围扫、还要有人为公开精度背书,用 Mapflow。它有专用的 Swimming pools 模型,按需提供,旁边标着 F1 高于 0.95。我们不对泳池公布数字。
方法 3:在 栅格计算器里对蓝色做阈值
用投影 CRS 工作,下面三步要按图层单位做面积过滤。
这是核心 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 没有内置紧凑度函数。

RGB 值随太阳角度和曝光漂移,在一条航带上调好的阈值,到下一条就坏了。色调和饱和度更稳,走 Processing Toolbox 的 i.rgb.his,它“transforms raster maps from RGB (Red-Green-Blue) color space to HIS (Hue-Intensity-Saturation) color space”。
两种规则都不知道蓝色东西是什么。
- 阴影。 背阴屋顶坡面呈深蓝色。提高下限,树下泳池就丢了。
- 蓝色屋顶和篷布。 又亮又蓝,形状还经常刚好。
- 深色池底和发绿泳池。 黑色池衬像沥青,藻绿像草坪。我的规则两个都漏了。
- 加盖泳池。 影像里根本不存在。

适用: 一张一致的正射影像,愿意手检。
不用: 多架次拼接的镶嵌图。
方法 4:在有波段的影像上算水体指数
然后查分辨率。法国泳池联合会数据新建地下泳池 29 到 30 m²,在 10 cm 正射影像上是 3000 个像素,在 10 m Sentinel-2 波段上是三分之一个像素。
水几乎完全吸收近红外,所以在 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 能压住建成区,在郊区这点很关键。
大于零做阈值,转面,按方法 3 过滤。Rodríguez-Cuenca 和 Alonso 在 2014 年为这个任务调过 Normalized Difference Swimming Pools Index。
Sentinel-2 的 B3 和 B8 是 10 m,B11 是 20 m,所以 30 m² 泳池永远无法从花园里分离出来。在居民区跑 MNDWI,只能得到城边的蓄水池,别的什么也没有。

适用: 正射影像有 50 cm 或更细的 NIR 波段。完胜颜色。
不用: 只有三波段 RGB,或想在 Sentinel-2 上找花园泳池。
方法 5:在自己的影像上训练分类器
分类器从您画的样本里学泳池像素,所以能扛住搞坏固定阈值的镶嵌图。
由 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。
dzetsaka 5.0.11(作者 Nicolas Karasiak)更轻:十一种分类器,它的 Gaussian Mixture Model 不用 scikit-learn 也能跑。
蓝色屋顶类和阴影类也要画。分类器只会拒绝您给它看过的东西。

适用: 多架次多季节,流程要重复用。
不用: 一张正射影像跑一遍。两个都是分像素不分对象,转面和过滤省不掉。
五种方法对照
| 您有什么 | 方法 |
|---|---|
| 测绘完善的城镇,公共泳池够用 | 方法 1,QuickOSM |
| 几百个泳池,不想忍误检 | 方法 2,分割模型 |
| 一张好于 30 cm 的 RGB 正射影像 | 方法 3,颜色阈值再过滤 |
| 带 NIR 波段的正射影像 | 方法 4,NDWI |
| Sentinel-2 或任何 10 m 影像 | 花园泳池哪个都不行。去找更细的影像 |
| 多架次、可重复的流程 | 方法 5,SCP 或 dzetsaka |
记住什么
先看分辨率,再看波段,再看您能承受多少手检。
30 m² 泳池在 10 m 上永远无法从花园里分离,所以不管跑什么指数,Sentinel-2 都不是找后院泳池的传感器。
颜色阈值会返回街区里所有蓝色东西,所以先按面积和紧凑度过滤,再看结果。
加盖泳池在影像里缺失,所以这页没有方法能找到,多少钱都不行。
检测是候选。不管跑什么,在有人对该图层采取行动之前,先打开置信度最低的十个多边形。
常见问题
QGIS 能自己检测游泳池吗?
不能,作为功能没有。核心 QGIS 提供栅格计算器、栅格矢量化和矢量过滤,也就是方法 3。把泳池识别为对象需要一个插件。
能在 Sentinel-2 影像里找后院泳池吗?
不能。Green 和 NIR 是 10 m 波段,SWIR 是 20 m,30 m² 泳池只占三分之一个像素。用 30 cm 或更细的航片。
蓝色屋顶为什么总被认成泳池?
彩钢屋顶比池水更亮更蓝,而颜色规则只认颜色。按面积和紧凑度过滤,转用 NDWI,或用模型。
用航片检测游泳池合法吗?
把检测与地块和业主姓名关联就是个人数据,在欧盟需要 GDPR 下的合法依据。税务局有写进法律的依据。私营公司通常没有,所以关联前问您的数据保护官,模型的输出永远不能是账单前的最后一步。
精度能期待多高?
一个数字就是假的,随影像和季节变。20 cm 上的开放泳池回来得很好,加盖泳池这里全漏,蓝色屋顶就是您要手删的东西。
检测结果已经是一份可以直接处理的泳池清单了吗?
法国税务局在 IGN 航片上跑过,仍然要给每个业主寄信。Foncier innovant 试点对 9 个省 2022 年的 20,356 个泳池征税,价值 980 万欧元,2023 年全国一遍又找出 150,000 个应税未申报泳池。检测只是候选,把它与地块和姓名关联,就是个人数据。
过滤步骤全文,看在 QGIS 中检测建筑轮廓。掩膜背后的清理,看QGIS 栅格转矢量指南。要对整个市镇的影像批量跑同样的检测加过滤流程,AI Agent 可以在 QGIS 内根据一条指令执行这些步骤。其余在 QGIS AI hub。
里识别游泳池,先查 OpenStreetMap:

