Ga naar inhoud
Terug naar blog
AI Segmentation
QGIS
Handleiding

Zwembaden detecteren in QGIS: 5 methoden

Drie panelen van hetzelfde suburbane blok van boven: kaal beeldmateriaal, een kleurdrempel die de zwembaden en een blauw dak beide oplicht, en een segmentatieresultaat met alleen de zwembaden omlijnd.

Om zwembaden te detecteren in , controleer eerst OpenStreetMap: Vector > QuickOSM > QuickOSM…, key leisure, value swimming_pool. Waar de kaart dun is, drempel het blauw in de raster calculator of gebruik een segmentatiemodel. De grondresolutie beslist welke.

Waar het web het mis heeft

Drie antwoorden worden steeds herhaald op forums en in tutorials, en elk kost je een dag.

"Run NDWI on Sentinel-2 and count the pools." Green en NIR komen op 10 m en SWIR op 20 m, terwijl een nieuw ingegraven zwembad 29 tot 30 m² is. Dat is een derde van een pixel. MNDWI boven een buitenwijk geeft het reservoir aan de rand van de stad terug en niets in de tuinen.

"Threshold the blue and you have your pools." Een kleurregel leest kleur en niets anders. Een blauw metalen dak en een dekzeil over een houtstapel glippen erdoor, een zwembad met donkere liner en een algengroen zwembad vallen eruit, en een afgedekt zwembad staat helemaal niet in het beeld.

"The detection is the list." De Franse belastingdienst draaide dit op IGN-fotografie en stuurde alsnog elke eigenaar een brief. Een detectie is een kandidaat, en zodra je die koppelt aan een perceel en een naam wordt het persoonsgegevens.

Het korte antwoord

Jouw inputMethodeWat het kost
Elk gebied met actieve OSM-mappersMethode 1, QuickOSM op leisure=swimming_poolGratis, één zoekopdracht
RGB-orthofoto van 5 tot 30 cmMethode 2, kleurdrempel in de raster calculatorGratis, in core QGIS
Beeldmateriaal met een nabij-infrarood- of SWIR-bandMethode 3, een waterindex, dan een drempelGratis, blind voor tuinzwembaden op satelliet
Multispectraal beeldmateriaal en een middagMethode 4, SCP of dzetsakaGratis plugins, jouw tijd voor het intekenen van trainingsgebieden
RGB-orthofoto en honderden zwembadenMethode 5, een segmentatiemodelGratis plugins willen je eigen model of een GPU. Cloud-plugins hebben gratis tiers, dan een abonnement

Hoe ik ze heb vergeleken

Vijf criteria: input, of beeldmateriaal je machine verlaat, hoeveel output je handmatig controleert, kosten, installatie-inspanning. Elke versie, prijs en menupad is op 3 september 2026 gecontroleerd aan de hand van de QGIS 3.44-handleiding en de docs van elke tool. Ik heb de gratis methoden gedraaid op een Franse suburbane orthofoto en een Sentinel-2-scène van hetzelfde blok.

Wij bouwen een van de vijf, en dat is Methode 5. Voor een sweep waarbij iemand een gepubliceerd nauwkeurigheidscijfer aftekent, gebruik je beter Mapflow. Het levert een speciaal Swimming pools-model, on request, met een F1 boven 0.95 ernaast. Wij publiceren geen cijfer voor zwembaden.

Voor je begint

Werk in een geprojecteerde CRS, omdat drie stappen hieronder filteren op oppervlakte in layer-eenheden. Controleer daarna de resolutie. De Franse zwembadfederatie zet een nieuw ingegraven zwembad op 29 tot 30 m², 3.000 pixels op een orthofoto van 10 cm en een derde van één pixel op een Sentinel-2-band van 10 m.

De Franse belastingdienst draait dit op luchtfotografie van IGN. Zijn Foncier innovant-pilot belastte 20.356 zwembaden in negen departementen voor 2022, goed voor 9,8 miljoen euro, en de landelijke run van 2023 vond 150.000 belastbare zwembaden die op de rol ontbraken. Elk zwembad ging alsnog via een brief naar de eigenaar.

Methode 1: Haal de zwembaden op die iemand al heeft gemapt

OpenStreetMap bevat 3.036.801 objecten getagd met leisure=swimming_pool, waarvan 2.731.704 ways met echte geometrie, op taginfo op 3 september 2026.

Open QuickOSM and query

Vector > QuickOSM > QuickOSM…, die de Overpass API bevraagt. Key leisure, value swimming_pool, op de canvas-extent of een administratief gebied op naam.

Keep polygons, filter to gardens

Een zwembad gemapt als node heeft geen oppervlakte, dus neem de polygoon layer. 1.808.809 van deze zwembaden dragen ook access=private, de filter voor achtertuinzwembaden.

leisure=swimming_area is een ander object: een aangewezen plek om te zwemmen in een meer of de zee.

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.

Gebruik dit wanneer: je openbare en commerciële zwembaden nodig hebt.

Sla over wanneer: de klus is vinden wat niemand heeft aangegeven.

Methode 2: Drempel het blauw in de raster calculator

Het dichtstbijzijnde in core QGIS. Open Raster > Raster Calculator…, waar bands layer_name@band_number zijn. Op een RGB-orthofoto houdt dit helder, verzadigd blauw over:

("ortho@3" > 90) AND ("ortho@3" - "ortho@1" > 25) AND ("ortho@3" - "ortho@2" > 10)

Die getallen zijn van mij, van een orthofoto van 20 cm. Sample twintig zwembadpixels en twintig dakpixels en schuif ze daarna bij.

Polygonize met Raster > Conversion > Polygonize (Raster to Vector), filter daarna met native:extractbyexpression: $area > 6 AND $area < 400 voor grootte, en mijn eigen ratio 4 * pi() * $area / ($perimeter ^ 2) > 0.5 voor vorm, omdat QGIS geen compactheidsfunctie meelevert.

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-waarden schuiven met zonshoek en belichting, dus een drempel afgesteld op één vlieglijn breekt op de volgende. Hue en saturatie houden het beter vol, via de Processing Toolbox-module i.rgb.his, die "transforms raster maps from RGB (Red-Green-Blue) color space to HIS (Hue-Intensity-Saturation) color space".

Geen van beide regels weet wat het blauwe ding is.

  • Schaduw. Beschaduwde dakhellingen lezen als donkerblauw. Verhoog de ondergrens en je verliest zwembaden onder bomen.
  • Blauwe daken en dekzeilen. Helder, blauw, vaak de juiste vorm.
  • Zwembaden met donkere bodem en groene zwembaden. Een zwarte liner leest als asfalt, algen als gazon. Mijn regel miste beide.
  • Afgedekte zwembaden. Helemaal niet in het beeld.
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.

Gebruik dit wanneer: één consistente orthofoto die je met de hand controleert.

Sla over wanneer: een mozaïek van meerdere vluchten.

Methode 3: Een waterindex, op beeldmateriaal met de banden

Water absorbeert nabij-infrarood bijna volledig, dus het wordt zwart in NIR terwijl een blauw dak helder blijft.

  • NDWI, McFeeters 1996: (Green - NIR) / (Green + NIR). Op Sentinel-2, (B3 - B8) / (B3 + B8).
  • MNDWI, Xu 2006: (Green - SWIR) / (Green + SWIR). Op Sentinel-2, (B3 - B11) / (B3 + B11). Wissel NIR in voor SWIR om bebouwd gebied te onderdrukken, het punt boven een buitenwijk.

Drempel boven nul, polygonize, filter zoals in Methode 2. Rodríguez-Cuenca en Alonso hebben hiervoor in 2014 een Normalized Difference Swimming Pools Index afgesteld.

Sentinel-2 levert B3 en B8 op 10 m en B11 op 20 m, dus een zwembad van 30 m² komt nooit los van de tuin. MNDWI boven een woonblok geeft het reservoir aan de rand van de stad terug en verder niets.

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.

Gebruik dit wanneer: je orthofoto een NIR-band heeft van 50 cm of fijner. Het verslaat kleur ronduit.

Sla over wanneer: driebandige RGB, of Sentinel-2 en je tuinzwembaden wilt.

Methode 4: Train een classifier op je eigen beeldmateriaal

Een classifier leert je zwembadpixels van voorbeelden die je intekent, dus hij overleeft een mozaïek dat een vaste drempel breekt.

Semi-Automatic Classification Plugin van Luca Congedo is de gebruikelijke keuze. Maak een training input (.scpx) in het SCP-dock, teken ROI's, en draai daarna SCP > Band processing > Classification in het hoofdvenster. Zes algoritmen, van Minimum Distance tot Random Forest. Versie 9.0.4 verscheen 11 juli 2026 maar declareert een QGIS-minimum van 3.99, dus QGIS 3.x installeert nog 8.5.0.

dzetsaka 5.0.11, van Nicolas Karasiak, is lichter: elf classifiers, en zijn Gaussian Mixture Model draait zonder scikit-learn.

Teken ook een blauw-dakklasse en een schaduwklasse in. Een classifier wijst alleen af wat je hem hebt laten zien.

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.

Gebruik dit wanneer: meerdere vluchten of seizoenen, en je de workflow gaat hergebruiken.

Sla over wanneer: één orthofoto, één run. Beide classificeren pixels, geen objecten, dus je polygonizet en filtert alsnog.

Methode 5: Een segmentatiemodel

Een segmentatiemodel leest vorm en context, en zo onderscheidt het een zwembad van een dekzeil in dezelfde kleur. Wij bouwen er een van, AI Segmentation. Dit deel gaat over onze eigen tool.

Install and sign in

Plugin manager, QGIS 3.22 or later. Geen GPU, geen modelgewichten. Een account, een gratis tegoed, daarna 39 euro per maand exclusief btw.

Draw a zone, type the word, filter

Typ swimming pool en draai. Polygonen komen terug in de project-CRS met oppervlakte, perimeter en een confidence-score. Sorteer en verwijder wat fout is.

Twee getallen uit onze tuning-tabel, gelezen at runtime. Een zwembadrun vraagt ruwweg 0,13 m per pixel in tiles van hooguit 300 m, omdat een zwembad bij grover vervaagt in zijn terras. De review opent op 0,20 confidence voor swimming pool tegen 0,30 voor building, omdat zwembadmaskers lager scoren dan daken.

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.

Eén grens: een afgedekt zwembad bereikt het model nooit, dus het komt als gemist terug. Beide cloudmodi sturen beeldmateriaal naar onze servers in de Europese Unie.

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.

Vier andere doen dit werk, gelezen op 3 september 2026.

ToolWat je installeertGPUAccountVerlaat beeldmateriaal je machineZwembadondersteuningKosten
DeepnessPlugin manager, zijn Python-packages, een ONNX-modelOptioneel, CPU werktNeeNeeWelk model je ook aanlevertGratis
Geo-SAMPlugin manager, dependencies, modelgewichtenOptioneelNeeNeeEén object per klik of boxGratis
samgeoEen Python-package, geen QGIS-paneelAanbevolenNeeNeeScriptbaar, geen zwembadklasseGratis
MapflowPlugin managerNeeJaJaEen Swimming pools-model, on requestCredits, betaald
AI Segmentation (van ons)Plugin managerNeeJaJa in beide cloudmodi, nee voor het lokale modelTyp swimming poolGratis tegoed, daarna 39 euro per maand exclusief btw

Gebruik dit wanneer: meer zwembaden dan je met de hand zou omtrekken.

Sla over wanneer: het beeldmateriaal je machine niet mag verlaten. Gebruik Deepness of Geo-SAM.

De vijf methoden naast elkaar

Wat je hebtMethode
Een goed gemapte stad, openbare zwembaden volstaanMethode 1, QuickOSM
Eén RGB-orthofoto fijner dan 30 cmMethode 2, kleurdrempel, daarna filteren
Een orthofoto met een NIR-bandMethode 3, NDWI
Sentinel-2 of iets anders op 10 mGeen ervan voor tuinzwembaden. Haal fijner beeldmateriaal
Meerdere vluchten, een workflow die je herhaaltMethode 4, SCP of dzetsaka
Honderden zwembaden en geen geduld voor false positivesMethode 5, een segmentatiemodel

Wat te onthouden

Resolutie beslist eerst, dan de banden, dan hoeveel handmatige controle je aankunt.

Een zwembad van 30 m² komt op 10 m nooit los van zijn tuin, dus Sentinel-2 is de verkeerde sensor voor achtertuinzwembaden, welke index je ook draait.

Een kleurdrempel geeft elk blauw ding in het blok terug, dus filter op oppervlakte en compactheid voor je naar het resultaat kijkt.

Een afgedekt zwembad ontbreekt in het beeldmateriaal, dus geen enkele methode op deze pagina vindt het en geen enkele prijs verandert daaraan.

Een detectie is een kandidaat. Wat je ook draait, open de tien polygonen met de laagste confidence voor iemand handelt op basis van de layer.

Try it free in QGIS, no card needed

Vragen die mensen stellen

Kan QGIS zelf zwembaden detecteren?

Niet als functie. Core QGIS geeft je de raster calculator, polygonize en de vectorfilters, oftewel Methode 2. Een zwembad als object herkennen vraagt een plugin.

Kan ik achtertuinzwembaden vinden in Sentinel-2-beeldmateriaal?

Nee. Green en NIR zijn banden van 10 m en SWIR is 20 m, dus een zwembad van 30 m² is een derde van een pixel. Gebruik luchtfoto's van 30 cm of beter.

Waarom komen blauwe daken steeds terug als zwembaden?

Een geschilderd metalen dak is helderder en blauwer dan zwembadwater, en een kleurregel leest alleen kleur. Filter op oppervlakte en compactheid, stap over op NDWI, of gebruik een model.

Is zwembaden detecteren uit luchtfoto's legaal?

Koppel een detectie aan een perceel en een eigenaarsnaam en het wordt persoonsgegevens, waarvoor je in de EU een rechtsgrond onder de GDPR nodig hebt. Een belastingdienst heeft er een in de wet staan. Een privébedrijf meestal niet, dus vraag je data protection officer om advies vóór de join, en laat de output van een model nooit de laatste stap vóór een aanslag zijn.

Welke nauwkeurigheid kan ik verwachten?

Eén getal zou onjuist zijn, omdat het meebeweegt met je beeldmateriaal en het seizoen. Open zwembaden op 20 cm komen goed terug, afgedekte zwembaden worden hier door alles gemist, en blauwe daken zijn wat je met de hand verwijdert.

Voor de volledige filterstap, lees gebouwvoetafdrukken detecteren in QGIS. Voor het opschonen achter elk masker, raster naar vector in QGIS. De QGIS AI hub heeft de rest.