Ga naar inhoud
AI Segmentation
QGIS
Handleiding

Zwembaden detecteren in QGIS: 5 methoden

Gepubliceerd op Bijgewerkt op

Huizen met achtertuinen van boven, voor en na automatische detectie van zwembaden (after)
Huizen met achtertuinen van boven, voor en na automatische detectie van zwembaden (before)
BeeldenGedetecteerd
Sleep om te vergelijken
Eén automatische doorgang over een woonblok op Long Island, op Google Satellite-beelden. Veertig zwembaden omlijnd in magenta, ook de kleine onder bomen. Sleep de handgreep om te vergelijken.

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

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

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.

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 en voer de query uit

Vector > QuickOSM > QuickOSM…, die de Overpass API bevraagt. Key leisure, value swimming_pool, op het bereik van het kaartvenster of een administratief gebied op naam.

Houd de polygonen, filter op tuinen

Een zwembad gemapt als node heeft geen oppervlakte, dus neem de polygoonlaag. 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.

Een woonblok op satellietbeeld met OSM-polygonen van zwembaden in blauw over drie zwembaden, en zeven andere zichtbare zwembaden zonder enige polygoon.
Drie zwembaden gemapt, zeven niet. Mappers tekenen openbare zwembaden en zwembaden van hotels. Privézwembaden in tuinen zijn de zwembaden waar niemand moeite voor doet, en precies die zoekt een belastingdienst.

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

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

Methode 2: 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.

Installeer en log in

Plugin manager, QGIS 3.22 of hoger. Geen GPU, geen modelgewichten. Een account, een gratis tegoed, daarna € 39 per maand exclusief btw.

Teken een zone, typ het woord, 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 afstemmingstabel, die de plugin tijdens het draaien uitleest. Een zwembadrun vraagt ruwweg 0,13 m per pixel in tegels 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.

Een woonblok op luchtfoto's in QGIS, elk achtertuinzwembad gevuld met een eigen kleur, daken en tuinen onaangeroerd.
Eén zone, één woord, op beelden van 20 cm. Elk zwembad is een eigen polygoon met een oppervlakte, bewerkbaar zoals elk vectorobject.

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.

Twee panelen van dezelfde drie tuinen. Op het winterbeeld hebben twee zwembaden een cyaankleurige detectieomlijning, terwijl een omcirkeld zwembad onder een beige afdekking er geen heeft. Op het zomerbeeld is die omcirkelde plek open blauw water.
Dezelfde tuinen, twee beelden. Het omcirkelde zwembad ligt in de winter onder een afdekking en de run loopt er voorbij. Over de hele tegel leverde dezelfde prompt 58 zwembaden op het zomerbeeld en 2 op het winterbeeld op, al komen de twee beelden ook van verschillende providers en uit verschillende seizoenen.

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, afhankelijkheden, modelgewichtenOptioneelNeeNeeEén object per klik of boxGratis
samgeoEen Python-package, geen QGIS-paneelAanbevolenNeeNeeScriptbaar, geen zwembadklasseGratis
MapflowPlugin managerNeeJaJa in de cloudservice, enterprise on-premise aangebodenEen model Swimming pools, op aanvraagCredits, betaald
AI Segmentation (van ons)Plugin managerNeeJaJa in beide cloudmodi, nee voor het lokale modelTyp swimming poolGratis tegoed, daarna € 39 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.

Voor een sweep waarbij iemand een gepubliceerd nauwkeurigheidscijfer aftekent, gebruik je beter Mapflow. Het levert een speciaal model Swimming pools, op aanvraag, met een F1 boven 0,95 ernaast. Wij publiceren geen cijfer voor zwembaden.

Methode 3: Selecteer het blauw met een drempel in de raster calculator

Werk in een geprojecteerd CRS, omdat drie stappen hieronder filteren op oppervlakte in de eenheden van de laag.

Het dichtstbijzijnde in QGIS zelf. Open Raster > Raster Calculator…, waar banden 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. Neem twintig zwembadpixels en twintig dakpixels als steekproef en schuif de getallen daarna bij.

Polygoniseer 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.

Een orthofoto van een buitenwijk met een rood masker uit de raster calculator over elk zwembad, een blauw metalen dak en een blauw dekzeil over een houtstapel.
De regel hierboven, op beelden van 20 cm. Hij vindt elk open zwembad. Hij vindt ook een blauw metalen dak en een dekzeil.

RGB-waarden schuiven met zonshoek en belichting, dus een drempel afgesteld op één vlieglijn breekt op de volgende. Tint en verzadiging houden het beter vol, via de module i.rgb.his in de Toolbox Processing, volgens de GRASS-handleiding een module 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.
Drie krappe uitsneden naast elkaar: een blauw dekzeil over een tuin, een beschaduwd dakvlak, en een zwembad met donkere bodem in een tuin.
Het zeil en de schaduw doorstaan de kleurregel, ten onrechte. Het zwembad met donkere bodem zakt ervoor, ten onrechte. Uitsneden uit 20 cm-beelden over Cape Coral, Florida.

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

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

Methode 4: Een waterindex, op beeldmateriaal met de banden

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.

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 3. 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.

Twee panelen van dezelfde buitenwijk: een orthofoto van 20 cm met elf zichtbare zwembaden, en de Sentinel-2 MNDWI van hetzelfde bereik met een egaal grijs vlak waarin geen zwembad te zien is.
Links elf zwembaden, rechts geen. Hetzelfde bereik, dezelfde week. Een zwembad van 30 m² haalt een sensor van 10 m nooit als 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 5: 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.

Twee panelen van dezelfde buitenwijk: een orthofoto van 20 cm, en een minimum-distance-classificatie ervan met de zwembadklasse in cyaan, waarbij één blauwgrijs dak groter uitvalt dan elk van de twee echte zwembaden ernaast.
Een minimum-distance-classificatie van dezelfde orthofoto van 20 cm, waarvan de zwembadklasse is getraind op de 58 zwembaden in deze tegel. Over de hele tegel is 46% van de pixels die het als zwembad labelt geen zwembad, en het grootste deel daarvan is blauwgrijs dak, zoals dat in het midden hier.

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 polygoniseert en filtert alsnog.

De vijf methoden naast elkaar

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

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, voordat iemand handelt op basis van de laag.

Probeer het gratis in QGIS, zonder creditcard

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 3. Een zwembad als object herkennen vraagt een plugin.

Kan ik achtertuinzwembaden vinden in Sentinel-2-beeldmateriaal?

Nee. Groen 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 AVG nodig hebt. Een belastingdienst heeft er een in de wet staan. Een privébedrijf meestal niet, dus vraag je functionaris voor gegevensbescherming om advies vóór de join, en laat de uitkomst 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.

Is een detectie al een lijst met zwembaden waar ik iets mee kan doen?

De Franse belastingdienst draaide dit op IGN-fotografie en stuurde alsnog elke eigenaar een brief. 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. Een detectie is een kandidaat, en zodra je die koppelt aan een perceel en een naam wordt het persoonsgegevens.

Voor de volledige filterstap, lees gebouwcontouren detecteren in QGIS. Voor het opschonen achter elk masker, raster naar vector in QGIS. Om dezelfde detectie- en filterstap over de beelden van een hele gemeente te draaien, voert AI Agent de stappen vanuit één opdracht in QGIS uit. De QGIS AI hub heeft de rest.