5.15. Morfológiai műveletek

A morfológiai műveletek bináris képeken dolgoznak – azokon a maszkokon, amelyek a küszöbölésből és az éldetektálásból jönnek ki. Minden művelet ugyanolyan csúszó környezetet jár be, mint amilyet a simítószűrők használnak, de a kérdés, amelyet minden pozíción feltesz, igen/nem: minden képpont be van kapcsolva a környezetben, bármely képpont be van kapcsolva a környezetben, hogyan néz ki a be-/kikapcsolt minta? A válaszok olyan módon növelik a területeket, zsugorítják őket, és vágják újra a határaikat, ahogy egy átlagoló szűrő nem tudja.

A morfológia az, ami egy kezdeti bináris maszk – a küszöbölés, az éldetektálás vagy valamilyen más osztályozó kimenete – és a tiszta bináris maszk közé esik, amelyet a folyamat többi része használni tud. Egy nyers küszöbölési kimeneten általában izolált zajképpontok szóródnak szét a valódi előtér-területeken, kis lyukak vannak ütve egyébként tömör területekbe, és recés határok vannak ott, ahol a küszöbölés egy objektum éléhez közel vágott. A morfológia eltávolítja ezeket a hibákat.

5.15.1. A négy klasszikus művelet

Két primitív művelet, és ezek két kompozíciója alkotja a morfológiai eszköztárat:

dilate() növel minden előtér-területet. A szabály: bármely képpont, amelynek legalább egy előtér-szomszédja van a (2 * size + 1) ablakában, előtérré válik. A látható hatás az, hogy az előtér-területek minden irányban size képponttal nagyobbak lesznek, és a bennük lévő lyukak ugyanennyivel zsugorodnak (vagy eltűnnek).

erode() az ellenkezőjét teszi. Bármely képpont, amelynek nem minden szomszédja van az ablakában az előtérben, háttérré válik. Az előtér-területek minden irányban size képponttal kisebbek lesznek, az izolált előtér-képpontok (amelyeknek nincs előtér-szomszédja) teljesen eltűnnek, és a nagyobb területek közötti kis kapcsolatok elvágódnak.

Egy bináris bemeneti terület a bal szélső panelen: egy tömör négyzet egy egy képpontos lyukkal a közepén és három izolált zajképponttal körülötte. A jobbra lévő négy panel a dilate, erode, open és close alkalmazásának eredményét mutatja erre a bemenetre. A dilate növeli a területet, kitölti a lyukat, és minden zajképpontot blokká növel; az erode zsugorítja a területet, növeli a lyukat, és eltávolítja a zajt; az open eltávolítja a zajt, miközben pontosan reprodukálja a területet és a lyukát; a close kitölti a lyukat, miközben pontosan reprodukálja a terület körvonalát és a zajképpontokat.

A négy klasszikus morfológiai művelet egy zajos bináris területre alkalmazva. Az erode zsugorít; a dilate növel; az open az erode majd dilate (eltávolítja a zajt); a close a dilate majd erode (kitölti a lyukakat).

open() az erode majd dilate. Az erodált képről minden izolált zajképpontot eltávolítottak, de minden irányban size képponttal zsugorodott is. Ha az erode-ot egy ugyanakkora méretű dilate követi, az visszaállítja a valódi előtér-területeket nagyjából az eredeti határaikra, miközben a zaj eltűnve marad. Ez a kompozíció teszi az open-t a klasszikus morfológia szabványos „zajeltávolító” műveletévé: az izolált előtér-képpontok eltűnnek, a valódi területek sértetlenül térnek vissza.

close() ennek a tükörképe – dilate majd erode. A dilate kitölti az előtér-területeken belüli kis lyukakat, és összeköti a kis hézagokkal elválasztott területeket; az erode visszazsugorítja az eredményt az eredeti külső határára, miközben a kitöltött belsőt tömören hagyja. A close a szabványos „kis hézagok kitöltése” művelet.

binary_mask.open(1)       # remove single-pixel noise
binary_mask.close(2)      # fill small holes and gaps

A size paraméter ugyanazt jelenti, mint a fényerőszűrőknél: a size=1 3-szor-3-as környezetet jelent, a size=2 5-ször-5-öst, és így tovább. A nagyobb méretek agresszívabb tisztítást – és hosszabb képpontonkénti költséget – jelentenek.

5.15.2. Cilinderkalap és fekete kalap

Két további kompozíció érdemes a megismerésre, mert pontosan azokat a jellemzőket nyeri ki, amelyeket az open és a close eltávolít:

top_hat() az eredeti kép és annak megnyitott változata közötti különbséget adja vissza – azokat az előtér-képpontokat, amelyeket az open eltávolított volna. Ez szó szerint a zajképpontok, az izolált kis előtér-területek, a vékony előtér-struktúrák maszkja, amelyeket az open művelet nem tudott megőrizni. Akkor hasznos, amikor kis előtér-jellemzők kinyerése a cél, amikor azok a jellemzők azok, amelyek az alkalmazást érdeklik, ahelyett, hogy eltávolítaná őket.

black_hat() a kép lezárt változata és az eredeti közötti különbséget adja vissza – azokat a háttér-képpontokat, amelyeket a close kitöltött volna. Ez az előtér-területeken belüli kis lyukak, a területek közötti keskeny hézagok maszkja, amelyeket a close művelet áthidalt volna.

Mindkettőhöz ritkábban nyúlnak, mint a négy alapművelethez, de a minta érdemes a megjegyzésre – amikor egy alkalmazásnak kis vagy vékony jellemzőket kell kinyernie, amelyeket a szabványos tisztító menet eltávolít, a cilinderkalap és a fekete kalap a természetes módja annak, hogy visszakapja őket.

5.15.3. Küszöbölési mód

A négy alap morfológiai művelet mind elfogad egy egész threshold kulcsszót, amely minden pozíción enyhíti a be-/kikapcsolt tesztet. Nélküle a műveletek úgy viselkednek, ahogy a fenti leírások mondták: a erode() megköveteli, hogy minden szomszéd be legyen kapcsolva, a dilate() megköveteli, hogy legalább egy. A threshold beállításával minden művelet annyi szomszédot tolerál, amennyi a másik irányba szavaz. Az erode esetén a threshold azoknak a háttér-szomszédoknak a száma, amelyek egy képpontnak lehetnek, és mégis túléli: a threshold=4 megtart bármely képpontot, amelynek a nyolc szomszédjából legalább négy be van kapcsolva (egy 3-szor-3-as ablakban a középső képpontnak nyolc szomszédja van), így nem erodál olyan agresszívan. A dilate esetén a threshold azoknak az előtér-szomszédoknak a száma, amelyekből egy háttér-képpontnak többre van szüksége, mielőtt bekapcsol: a threshold=2 egy helyett legalább három előtér-szomszédot követel meg, így kevésbé agresszívan növel.

A küszöbölési forma hasznos egy morfológiai menet agresszivitásának hangolásához anélkül, hogy megváltoztatná az ablakának méretét, ami megváltoztatná azoknak a jellemzőknek a léptékét is, amelyekre hat. A legtöbb alkalmazás az alapértelmezett viselkedésnél marad; a küszöbölési forma azokra az esetekre van ott, amikor az alapértelmezett éppen csak egy kicsit túl sok vagy túl kevés.