5.8. Vyplnění oblasti a detekční glyfy

Geometrické primitivy na začátku této části umisťují značky na pozice, které aplikace již zná. Kompozice obrazu klade jeden obraz na druhý. Malá závěrečná skupina kreslicích metod dělá něco jiného: umisťuje značky, jejichž tvar závisí na tom, co už je v obraze, nebo na tom, co v něm nějaký předchozí algoritmus našel.

5.8.1. Vyplnění oblasti

flood_fill() začíná od jediného pixelu – semínka – a roste směrem ven, přičemž vybarvuje každý pixel, který je semínku dostatečně podobný a je s ním spojen řetězcem dalších podobných pixelů. Výsledkem je vyplněná oblast, jejíž hranici určuje samotný obraz, nikoli cokoli předaného volání.

Nejjednodušší podoba přijímá souřadnici semínka a barvu k vyplnění:

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

Růst vyplnění řídí dva prahové parametry. seed_threshold (normalizovaný zlomek od 0.0 do 1.0) nastavuje, jak moc se pixel může lišit od hodnoty původního semínka a přesto být zahrnut. floating_threshold nastavuje, jak moc se může lišit od každého již zahrnutého souseda. Oba prahy spolupracují: velkorysý floating_threshold umožní vyplnění sledovat gradient napříč obrazem, zatímco těsný seed_threshold jej udrží od přílišného odchýlení od hodnoty semínka i podél tohoto gradientu.

Několik příznaků výsledek dále upřesňuje:

  • invert=True vybarví každý pixel, který neodpovídá – doplněk odpovídající oblasti – místo samotných odpovídajících pixelů.

  • clear_background=True vynuluje každý pixel mimo vyplněnou oblast. Užitečné pro extrahování pouze vyplněné oblasti jako masky.

  • Klíčové slovo mask má svůj obvyklý význam: pixely vypnuté v masce zůstanou nedotčeny bez ohledu na to, zda by je vyplnění jinak zasáhlo.

Vyplnění oblasti je nejužitečnější pro dva vzory. Prvním je vizualizace toho, co nějaký detektor oblastí našel, vyplněním nalezené oblasti odlišnou barvou, aby vynikla oproti zbytku snímku. Druhým je extrahování oblasti samotné kombinací clear_background=True se známým semínkem uvnitř oblasti a čtením výsledného obrazu jako masky pro navazující operace.

5.8.2. Kreslení výsledků detekce

Algoritmy zpracování obrazu často vracejí výsledkové objekty, které nesou jak pozici, tak nějakou další strukturu: klíčový bod s orientací, detekci obličeje s těžištěm odlišným od jeho ohraničujícího rámečku, AprilTag se čtyřmi rohovými body. Dobře je vykreslit – glyfem, který zachycuje strukturu, nejen ohraničující rámeček – je natolik opakující se vzor, že modul pro něj nabízí dva pomocníky.

draw_keypoints() přijímá buď deskriptor klíčového bodu vrácený extraktorem příznaků, nebo prostý seznam trojic (x, y, rotation) a kreslí malý glyf v každém bodě. Glyf nese jak pozici, tak orientaci: kružnici kolem bodu plus čáru vycházející ze středu, která udává rotaci. Tato vizualizace jediným voláním je nejsnazší způsob, jak ověřit, že extraktor klíčových bodů vrací orientace, které aplikace očekává.

draw_detection() přijímá šestici (rx, ry, rw, rh, cx, cy) – ohraničující obdélník plus samostatně hlášené těžiště – a kreslí obojí najednou: obdélník kolem ohraničujícího rámečku, křížek v těžišti a volitelně textový štítek v rohu obdélníku. Tato podoba odpovídá tomu, co obvykle hlásí detekce neuronovou sítí nebo sledovač podle šablony, kde je těžiště přesnější pozicí, než by dal střed ohraničujícího rámečku.

Obě metody glyfů jsou pohodlnou vrstvou nad geometrickými primitivy na začátku této části. Aplikace může vždy reprodukovat stejnou vizualizaci přímým voláním draw_rectangle(), draw_circle(), draw_cross() a draw_string(); metody glyfů jen ušetří účetnictví pro vzory, které se objevují stále dokola.

S geometrickými primitivy pro známou geometrii, kompozicí obrazu pro překryvy, vyplněním oblasti pro oblasti odvozené z obrazu a detekčními glyfy pro standardní vizualizační vzory je kreslicí sada nástrojů kompletní. Cokoli, co aplikace potřebuje k zviditelnění výstupu algoritmu, má na rozhraní metodu, která to tam umístí.