Ga naar inhoud
Terug naar blog
AI Segmentation
QGIS
Handleiding

Hoe je automatisch gebouwcontouren detecteert in QGIS

0:00 / 0:00
Eén gebied, één woord, 848 gebouwen. Een echte verwerking, 3x versneld, niets weggeknipt.

Ik draaide automatische detectie over een zone in het centrum van Parijs en kreeg in één keer 635 polygonen terug. Bepalen welke 82 ik moest houden duurde langer dan de detectie zelf, en juist dat tweede deel laat bijna elke handleiding weg.

Dense Parisian city blocks before and after automatic building detection (after)
Dense Parisian city blocks before and after automatic building detection (before)
ImageryDetected
Sleep om te vergelijken
One automatic pass over central Paris, on Google Satellite imagery. Every polygon gets its own colour so neighbours stay separate. Drag the handle to compare.

De korte versie. Om automatisch gebouwcontouren te detecteren in : installeer een AI-detectieplugin via de pluginmanager, laad je beeldmateriaal, teken een zone, geef het object een naam en start de detectie. Je krijgt een polygon layer in de CRS van je project. Filter die ruwe output vervolgens op betrouwbaarheid en oppervlakte, want een groot deel van wat terugkomt is geen gebouw.

Wat een gebouwcontour is

De omtrek van een gebouw waar het de grond raakt, als een vlakke polygon. Niet het dak, niet het perceel, niet het adrespunt.

Dat is hier belangrijk, omdat verticale beelden je het dak geven. Bij een Haussmann-blok van vijf verdiepingen, bijna recht van boven gefotografeerd, is de verschuiving klein. Bij een toren is dat niet zo. Goed om te weten voordat je iemand een footprint layer belooft.

Controleer eerst de open datasets

Voor veel opdrachten hoef je helemaal niets te detecteren.

Three panels of the same dense Luanda neighbourhood on Google Satellite imagery, with building footprints in green. OpenStreetMap shows none, Microsoft covers most, Google Open Buildings covers nearly all.
The same 1 km² of Luanda, on Google Satellite imagery. OpenStreetMap maps no buildings here, Microsoft finds 3,140, Google Open Buildings 4,468. Over a dense African neighbourhood the dataset you reach for decides whether you get everything or nothing.

Laad er één naast je beeldmateriaal. Ga pas verder wanneer de dekking gaten vertoont, de opnamedatum niet klopt of de footprints moeten overeenkomen met de specifieke orthofoto die een klant je heeft aangeleverd.

Onder de vijftig gebouwen, teken ze

Digitaliseer ze met de hand. Gratis, exact, en op die schaal zou ik het nog steeds zelf doen. Zet snapping eerst aan (Project -> Snapping Options, vertex and segment, topological editing on), anders ben je de middag kwijt aan het verwijderen van slivers.

Rond het 60e gebouw begin je hoeken af te snijden die je bij het 6e nooit zou hebben afgesneden, en je merkt het niet. Het zit dan al in de layer.

De automatische manier

De plugin hier is AI Segmentation, die mijn medeoprichter en ik bij TerraLab bouwen, dus lees dit gedeelte met in gedachten wiens tool het is. Hij installeert vanuit de pluginmanager zoals elke andere: geen handmatige download, geen Python-omgeving, geen speciale grafische kaart, omdat het model op onze servers draait. Windows, macOS en Linux.

Teken een zone, typ buildings en klik op Detect. Dat is de volledige prompt, in je eigen taal als je dat liever hebt. Resultaten komen tegel voor tegel terug als één polygon layer in de CRS van het project.

The AI Segmentation panel in QGIS with the Semi-Auto and Automatic switch
Automatic mode: pick the imagery layer, draw a zone, name the object.

De ene instelling die je moet leren kennen is precision, oftewel de tegelgrootte. Kleine tegels geven het model een nauwkeurige blik, wat kleine objecten nodig hebben. Grote tegels geven context, wat een landbouwperceel nodig heeft. Tegels zijn ook wat je betaalt: één credit per stuk. Elk account krijgt elke maand een gratis tegoed, zonder dat er om een kaart wordt gevraagd, en Pro verhoogt dat. Detectie draait op Europese servers, we trainen niet op je beeldmateriaal en er is een klein lokaal model als er niets van je machine af mag.

Daarna leidt het paneel je door drie stappen voordat er iets een layer wordt: filter wat je wilt Keep, Correct wat het model heeft gemist en kies de uitvoer-Shapes. De complete handleiding behandelt ze alle drie. De eerste stap bepaalt of de opdracht slaagt, dus die krijgt de volgende sectie.

Filteren is de hele klus

Ruwe detectie-output is een verzameling kandidaatpolygonen met betrouwbaarheidsscores. Op dicht beeldmateriaal zijn de meeste klein en onzeker. Ik exporteerde deze Parijse run met beide filters volledig open, zodat elke kandidaat in de layer terechtkwam: 635 polygonen over 1.18 km².

1 m²101001 00010 000 m²50 m²
Every one of the 635 detections, binned by area on a log scale. Two humps: noise under 5 m², real buildings above 160 m². The 50 m² line falls in the valley between them, which is why it is not an arbitrary number. Median 3.2 m², largest 13,528 m², median confidence 0.26.

De helft van wat terugkwam is kleiner dan een parkeerplaats: ventilatieopeningen, dakramen, trappenhuiskappen, schuurtjes op binnenplaatsen. Echte dingen op het beeldmateriaal, correct omlijnd, maar niet wat iemand met een gebouwcontour bedoelt.

Dus filteren. Verschuif de twee sliders in het paneel, of doe hetzelfde vanuit de attributentabel met Select by Expression:

"area_m2" >= 50 AND "score" >= 0.5

Dat laat 82 polygonen van de 635 over, goed voor 222,338 m² van de totale 263,658 m². Neem de drempelwaarden dus niet zomaar van me aan, maar verschuif ze zelf. Groen blijft over na je filter, wit niet.

Aerial imagery of dense Parisian blocks with detected building polygons drawn over it

82 / 635polygons kept (13%)

84%of the built area (222,338 m²)

The same 635 detections the attribute table holds. Drop the confidence to zero and the courtyard sheds and skylights come back.

Let op het tweede getal terwijl je het eerste verschuift. Door 87% van de polygonen weg te gooien, verlies je 16% van de oppervlakte. De rest is ruis die je anders toch met de hand had verwijderd, één voor één, terwijl je je afvroeg of de tool wel goed was.

Stem beide af op de opdracht. Bij een inventarisatie van industriële loodsen kun je de ondergrens voor de oppervlakte naar 200 m² verhogen. Bij het in kaart brengen van informele nederzettingen gooit 50 m² echte huizen weg, dus verlaag je die naar 15 en leun je meer op de betrouwbaarheidsscore.

Hoe een schoon resultaat eruitziet

Parijs is een lastig geval. Dezelfde tool op vrijstaande woningen, ongeveer 10 km naar het westen:

Detached and semi-detached houses in a Paris suburb, each house filled with its own colour
Detached housing, review filter on. One polygon per house, almost nothing to throw away.

85

median polygon area

Paris run: 3.2 m²

0.79

median confidence

Paris run: 0.26

251polygons

kept, out of 251 returned

Paris run: 82 out of 635

Dezelfde tool, dezelfde stad, niets om weg te gooien. De bebouwingsstructuur is veranderd, niet het model.

Waar dit misgaat: dichte aaneengesloten blokken

Close view of Haussmann blocks, each block one coloured polygon following the street edge with courtyards cut out
The outline follows the street edge precisely and cuts out the courtyards. What it does not do is split the block into individual addressed buildings.

Elke polygon volgt de bebouwde omtrek van een heel blok, strak langs de straatlijn en met de binnenplaatsen er correct uit gesneden. Goed voor bebouwde oppervlakte of verhard oppervlak, maar verkeerd als je één polygon per adres nodig hebt. Geen enkel model dat een verticale afbeelding leest kan de scheidingsmuur tussen twee aaneengesloten gebouwen vinden, omdat er van bovenaf niets te zien is.

Ik zou automatische detectie dus niet gebruiken voor een layer met één polygon per adres in een historisch stadscentrum. Kadastrale data plus handmatige correctie wint daar.

De geometrie opschonen

Drie ingebouwde QGIS-tools maken een footprint layer netjes, en de volgorde is belangrijk omdat simplify de hoekpunten verplaatst die je net haaks hebt gemaakt.

  1. Simplify, tolerantie van 0.5 m bij luchtbeelden. Vermindert het aantal hoekpunten sterk zonder de grens merkbaar te verplaatsen.
  2. Orthogonalize. Maakt hoeken die bijna recht zijn haaks. Gebruik dit bij open data of handmatig overgetrokken werk, waar nog niets haaks is gemaakt.
  3. Delete holes, alleen als je volle footprints wilt. Niet bij het Parijse resultaat: die gaten zijn binnenplaatsen en ze kloppen.

Bij een gedetecteerde layer is stap 2 bijna overbodig. Ik heb dat gemeten in plaats van het aan te nemen, door Orthogonalize uit te voeren op 190 gedetecteerde gebouwen en alle 1,845 hoeken voor en na te vergelijken.

87.9%

corners already within 1° of square

before running anything

87.9%

after Orthogonalize

the same 1,845 corners

1.7cm

median vertex shift

9.1 cm at the worst

Close view of detected building outlines on aerial imagery, corners meeting at right angles
The same detections, close in. The corners arrive square, so the cleanup step has nothing left to snap.

De 12% die niet haaks zijn, zijn de aaneengesloten terrassen. Kijk naar de getrapte rand die door het midden van het blok loopt. Geen enkele hoekentool lost dat op, omdat die stappen een echte daklijn volgen en geen modelleringsfout zijn.

Welke methode je gebruikt

Open datasetsHandmatig digitaliserenAutomatische detectie
KostenGratisGratisGratis niveau, daarna betaald
InstellenMinutenGeenMinuten
Geschikt voorGebieden die al goed gedekt zijnMinder dan ~50 gebouwenHonderden tot duizenden
Komt overeen met je beeldmateriaalNeeJaJa
Consistent binnen een teamJaNeeJa
Dichte aaneengesloten blokkenVerschiltJaAlleen blokomtrekken
Herkomst die je kunt vermeldenDataset en opnamedatumJijJouw beeldmateriaal, met een betrouwbaarheidsscore

Vragen die ik krijg

Werkt het op dronebeelden? Beter dan op satellietbeelden. Grondresolutie is belangrijker dan de bron: een orthofoto van 5 cm geeft duidelijkere grenzen en een hogere betrouwbaarheid dan een satellietbeeld van 30 cm.

Heb ik een GPU nodig? Nee. Beide modi draaien standaard op onze servers en het kleine lokale model draait op je eigen CPU, trager en minder nauwkeurig. Als alles op je machine moet blijven, zijn Geo-SAM en samgeo gratis en goed, maar ze hebben wel een NVIDIA-kaart nodig.

Wat kost een run? Eén credit per tegel in de automatische modus, één credit per opgeslagen object in de semi-automatische modus. Elk account krijgt elke maand een gratis tegoed en het lokale model kost helemaal niets.

Try it free in QGIS, no card needed