5.8. Árasztásos kitöltés és észlelési piktogramok

A szakasz elején lévő geometriai primitívek olyan pozíciókra helyeznek jeleket, amelyeket az alkalmazás már ismer. A képösszetétel egy képet helyez egy másikra. A rajzoló metódusok egy kis záró csoportja valami mást tesz: olyan jeleket helyez el, amelyek formája attól függ, ami már a képben van, vagy amit valamilyen korábbi algoritmus talált benne.

5.8.1. Árasztásos kitöltés

A flood_fill() egyetlen képpontból indul – a magból –, és kifelé növekszik, minden olyan képpontot befestve, amely elég hasonló a maghoz, és más hasonló képpontok láncolatán keresztül kapcsolódik hozzá. Az eredmény egy kitöltött terület, amelynek határát maga a kép dönti el, nem pedig bármi, amit a híváshoz átadtunk.

A legegyszerűbb alak a magkoordinátát és egy kitöltőszínt vesz át:

img.flood_fill(x=160, y=120, color=(0, 255, 0))

Két küszöbérték-paraméter szabályozza, milyen agresszíven növekszik a kitöltés. A seed_threshold (egy normalizált tört 0.0-tól 1.0-ig) beállítja, mennyire térhet el egy képpont az eredeti mag értékétől, miközben még belekerül. A floating_threshold beállítja, mennyire térhet el minden már belekerült szomszédjától. A két küszöbérték együtt dolgozik: egy bőkezű floating_threshold lehetővé teszi, hogy a kitöltés egy gradienst kövessen a képen át, míg egy szoros seed_threshold megakadályozza, hogy túl messzire kalandozzon a mag értékétől még a gradiens mentén is.

Néhány jelző tovább finomítja az eredményt:

  • Az invert=True minden olyan képpontot befest, amely nem egyezik – az egyező terület komplementerét –, nem pedig magukat az egyező képpontokat.

  • A clear_background=True nullázza a kitöltési területen kívüli minden képpontot. Hasznos, ha csak a kitöltött területet szeretnénk maszkként kinyerni.

  • A mask kulcsszónak a szokásos jelentése van: a maszkban kikapcsolt képpontok érintetlenül maradnak, függetlenül attól, hogy a kitöltés egyébként elérte volna-e őket.

Az árasztásos kitöltés két mintázathoz a leghasznosabb. Az első annak megjelenítése, amit valamilyen területdetektor talált, a kitöltött terület eltérő színnel való befestésével, hogy kiemelkedjen a képkocka többi részéből. A második magának a területnek a kinyerése, a clear_background=True kombinálásával egy a területen belüli ismert maggal, és az eredményül kapott kép maszkként való olvasásával a későbbi műveletekhez.

5.8.2. Észlelési eredmények rajzolása

A képfeldolgozó algoritmusok gyakran eredményobjektumokat adnak vissza, amelyek egy pozíciót és némi további szerkezetet egyaránt hordoznak: egy kulcspontot tájolással, egy arcészlelést a határoló dobozától elkülönülő súlyponttal, egy AprilTag-et négy sarokponttal. Ezek jó megrajzolása – olyan piktogrammal, amely megragadja a szerkezetet, nem csak egy határoló dobozt – elég gyakran visszatérő mintázat ahhoz, hogy a modul két segédfüggvényt tegyen elérhetővé hozzá.

A draw_keypoints() vagy egy jellemzőkinyerő által visszaadott kulcspont-leírót, vagy egy egyszerű (x, y, rotation) hármasokból álló listát vesz át, és egy kis piktogramot rajzol minden pontnál. A piktogram a pozíciót és a tájolást egyaránt hordozza: egy kör a pont körül, plusz egy középpontból kiinduló vonal, amely az elforgatást jelzi. Ez az egyhívásos megjelenítés a legegyszerűbb módja annak, hogy meggyőződjünk arról, hogy egy kulcspont-kinyerő az alkalmazás által várt tájolásokat adja vissza.

A draw_detection() egy hatelemű (rx, ry, rw, rh, cx, cy) rendezett n-est vesz át – a határoló téglalapot plusz egy külön jelentett súlypontot –, és mindkettőt egyszerre rajzolja meg: egy téglalapot a határoló doboz köré, egy keresztet a súlypontnál, és opcionálisan egy szövegcímkét a téglalap sarkánál. A forma megfelel annak, amit egy neurális hálózati észlelés vagy egy sablonkövető tipikusan jelent, ahol a súlypont pontosabb pozíció, mint amit a határoló doboz középpontja adna.

Mindkét piktogram-metódus kényelmi réteg a szakasz elején lévő geometriai primitívek felett. Egy alkalmazás mindig reprodukálhatja ugyanazt a megjelenítést a draw_rectangle(), draw_circle(), draw_cross() és draw_string() közvetlen hívásával; a piktogram-metódusok csak megspórolják a könyvelést azoknál a mintázatoknál, amelyek újra és újra előjönnek.

Az ismert geometriához való geometriai primitívekkel, a rávetítésekhez való képösszetétellel, a képből származtatott területekhez való árasztásos kitöltéssel és a szabványos megjelenítési mintázatokhoz való észlelési piktogramokkal a rajzoló eszközkészlet teljes. Bármit, amire egy alkalmazásnak szüksége van az algoritmus kimenetének láthatóvá tételéhez, van egy metódusa a felületen, amely odateszi.