5.8. Flood fill en detectie-glyphs¶
De geometrische primitieven aan het begin van deze sectie plaatsen markeringen op posities die de toepassing al kent. Beeldcompositie legt de ene afbeelding op de andere. Een kleine laatste groep tekenmethoden doet iets anders: ze plaatsen markeringen waarvan de vorm afhangt van wat er al in de afbeelding zit, of wat een eerder algoritme erin vond.
5.8.1. Flood fill¶
flood_fill() begint vanaf een enkele pixel – het zaad – en groeit naar buiten, waarbij het elke pixel kleurt die voldoende lijkt op het zaad en ermee verbonden is via een keten van andere vergelijkbare pixels. Het resultaat is een gevuld gebied waarvan de grens wordt bepaald door de afbeelding zelf, niet door iets dat aan de aanroep wordt meegegeven.
De eenvoudigste vorm neemt de zaadcoördinaat en een kleur om mee te vullen:
img.flood_fill(x=160, y=120, color=(0, 255, 0))
Twee drempelwaardeparameters bepalen hoe agressief de vulling groeit. seed_threshold (een genormaliseerde fractie van 0.0 tot 1.0) bepaalt hoeveel een pixel mag verschillen van de waarde van het oorspronkelijke zaad om toch te worden opgenomen. floating_threshold bepaalt hoeveel hij mag verschillen van elke reeds opgenomen buur. De twee drempelwaarden werken samen: een ruime floating_threshold laat de vulling een gradiënt over de afbeelding volgen, terwijl een strakke seed_threshold voorkomt dat hij te ver van de zaadwaarde afdwaalt, zelfs langs die gradiënt.
Een paar vlaggen verfijnen het resultaat verder:
invert=Truekleurt elke pixel die niet overeenkomt – het complement van het overeenkomende gebied – in plaats van de overeenkomende pixels zelf.clear_background=Truezet elke pixel buiten het vulgebied op nul. Nuttig om alleen het gevulde gebied als masker te extraheren.Het sleutelwoord
maskheeft zijn gebruikelijke betekenis: pixels die uit staan in het masker worden met rust gelaten, ongeacht of de vulling ze anders zou hebben bereikt.
Flood fill is het nuttigst voor twee patronen. Het eerste is het visualiseren van wat een gebiedsdetector vond, door het gedetecteerde gebied met een onderscheidende kleur te vullen zodat het opvalt tegen de rest van het frame. Het tweede is het extraheren van het gebied zelf, door clear_background=True te combineren met een bekend zaad binnen het gebied en de resulterende afbeelding te lezen als een masker voor vervolgbewerkingen.
5.8.2. Detectieresultaten tekenen¶
Beeldverwerkingsalgoritmen geven vaak resultaatobjecten terug die zowel een positie als enige aanvullende structuur dragen: een sleutelpunt met een oriëntatie, een gezichtsdetectie met een zwaartepunt dat verschilt van zijn begrenzingsvak, een AprilTag met vier hoekpunten. Die goed tekenen – met een glyph die de structuur vastlegt, niet alleen een begrenzingsvak – is een vaak genoeg terugkerend patroon dat de module er twee hulpmiddelen voor blootstelt.
draw_keypoints() neemt ofwel een sleutelpunt-descriptor die door een kenmerkextractor wordt teruggegeven, ofwel een gewone lijst van (x, y, rotation)-tripletten, en tekent een kleine glyph bij elk punt. De glyph draagt zowel de positie als de oriëntatie: een cirkel rond het punt plus een lijn vanuit het midden die de rotatie aangeeft. Die visualisatie in één aanroep is de eenvoudigste manier om te controleren of een sleutelpunt-extractor de oriëntaties teruggeeft die de toepassing verwacht.
draw_detection() neemt een zes-tupel (rx, ry, rw, rh, cx, cy) – de begrenzingsrechthoek plus een afzonderlijk gerapporteerd zwaartepunt – en tekent beide tegelijk: een rechthoek rond het begrenzingsvak, een kruis op het zwaartepunt, en optioneel een tekstlabel bij de hoek van de rechthoek. De vorm komt overeen met wat een neuraal-netwerkdetectie of een sjabloontracker doorgaans rapporteert, waarbij het zwaartepunt een nauwkeurigere positie is dan het midden van het begrenzingsvak zou geven.
Beide glyph-methoden zijn gemakslagen bovenop de geometrische primitieven aan het begin van deze sectie. Een toepassing kan altijd dezelfde visualisatie reproduceren door draw_rectangle(), draw_circle(), draw_cross() en draw_string() rechtstreeks aan te roepen; de glyph-methoden besparen alleen de administratie voor de patronen die keer op keer terugkomen.
Met de geometrische primitieven voor bekende geometrie, beeldcompositie voor overlays, flood fill voor uit de afbeelding afgeleide gebieden, en de detectie-glyphs voor de standaard visualisatiepatronen, is de tekentoolkit compleet. Alles wat een toepassing nodig heeft om algoritme-uitvoer zichtbaar te maken heeft een methode op het oppervlak die het daar plaatst.