Skip navigation

Zajterhelés és zajszűrés képtérben

Képek zajterhelése és szűrése

Zajterhelés alatt azt értjük, hogy a képmátrix intenzitás vagy szín értékei nem tökéletesen reprezentálják a külvilágból érkező fény információt. Az eltérés adódhat hibás szenzor elemekből (pl. egyes képpont érzékelők sérülés miatt nem végeznek tényleges mérést), vagy a mérési pontatlanság miatt a mért digitális érték ingadozhat.

Képfeldolgozó műveletek esetén fontos kérdés, hogy az algoritmusok hogyan tolerálják a zajterheléstValós alkalmazásokban zaj a kép készítése során kerül a képre. Ha az algoritmusainkat szeretnénk különböző típusú és mértékű zajosodás esetére is tesztelni, célszerű ezt mesterségesen a képre helyezni, mivel a gyakorlatban nagyon nehéz lehet többféle valós zajjal terhelt képet készíteni, beszerezni. Egyenletes, normál eloszlású és só-bors zajjal fogunk foglalkozni szürkeárnyalatos és színes képek esetére.

Zajszűrés alatt olyan eljárást értjük, amely a zaj típusának ismeretében próbálja annak hatását csökkenteni. A legtöbb eljárás a képtérben a képpontok egy lokális környezetét vizsgálja, az alapján határozza meg az új intenzitás vagy színértéket, ezért lokális képpont műveleteknek is hívhatjuk őket. (Figyeljük meg az eltérést a pont-operációkhoz képest: azoknál csak a vizsgált képpont értéke számít, itt egy lokális környezetben a szomszédság értékei is.)

A lokális képpont műveletek nem csak zajszűrésre használhatók, ez a megközelítés számos további művelet működési alapját jelenti (gradiens operátor élkereséshez, kép élesítés, morfológiai műveletek, ...). Az olyan lokális műveletet, amely a képpont környezet értékeinek súlyozott összeadásával dolgozik, konvolúciónak nevezzük.

Ebben a fejezetben az egycsatornás szürkeárnyalatos képekkel foglalkozunk. A színes RGB képek esetén első közelítésként a mesterséges zajterhelelést és a szűréseket végrehajthatjuk csatornánként külön, vagy áttérhetünk más színreprezentációba (YUV, HSV, Lab, stb.) és csak kiválaszott csatornákon dolgozhatunk (pl. Y).

A valós helyzet jobb közelítése az lehetne, ha ismernénk, hogy a képalkotó szenzor hogyan működik (például milyen felépítésű Bayer-rácsot alkalmaz), illetve milyen algoritmussal történik abból az RGB kép előállítása. Bizonyos kamerák képesek a nyers (RAW) mérési eredményt is biztosítani. Ezen végezhetnénk el a zajterhelés modellezését, majd a megfelelő interpolációs technikával állna elő az RGB kép. Ez az irányvonal azonban túlmutat a jegyzet keretein.

Logikailag ehhez a témakörhöz tartozik a kép élesítése. Az elmosódott, homályos képeken az élek felerősítésével érhetünk el ilyen hatást. Megvizsgálunk egy globális és egy adaptív megközelítést a probléma megoldására.

Mesterséges zajterhelés képekhez adása

Egyenletes és normál eloszlású additív zaj

  • Az eredeti képpel megegyező méretű új képet készítünk, ahol az egyes képpont elemek megadott paraméterű véletlenszámot tartalmaznak.
  • Az eredeti és a zaj képet összeadjuk, figyelve a képek típusára.

Só-bors zaj

  • Az eredeti képen a képpontok megadott százalékát véletlenszerűen fehér (só), vagy teljesen fekete (bors) színre állítjuk, ezzel modellezve a hibás szenzor elemeket. A többi intenzitásérték változatlan marad.

Mesterséges zajterhelés példák

Eredeti szürkeárnyalatos kép Képhez adott mesterséges additív zaj Képhez adott mesterséges só-bors zaj

Zaj szűrése

Átlagoló szűrés (simítás)

A kép minden képpontjában megvizsgáljuk a lokális környezetet, és az ott található intenzitásértékek (súlyozott) átlagára cseréljük a vizsgált képpont értékét. Erre a célra a konvolúció műveletet (részletek az előadás anyagában) alkalmazzuk, megfelelő maszkmérettel. Additív zaj esetén célszerű használni. Az átlagszámítás a homogén területeken található, a zajhatás miatt kisebb-nagyobb mértékben eltérő értékeket közelebb viszi egymáshoz, hátrányként viszont az eltérő intenzitású területek határán az eltérést csökkenti, vagyis az éleket elmossa. 

Élmegőrző simítás

Az átlagoló szűrők homályosítják a képet, ezzel együtt az éleket is. Az élmegőrző simítás egy komplex művelet, amely az élek mentén csökkenteni próbálja a simító hatást. Az OpenCV a bilaterális szűrőt biztosítja számunkra erre a célra.

Medián szűrés

Itt is minden képpontban vizsgáljuk a lokális környezetet, az ott található értéket a környezet mediánjával helyettesítjük. Medián = középső elem; az intenzitásértékek értékük szerinti sorrendbe állítása után a középső elemet vesszük. Só-bors zaj esetén hatékony.

Min-max szűrők, morfológiai szűrés

A mediánhoz hasonlóan egy képpont környezetében számíthatunk maximális vagy minimális intenzitás értéket is, és ezzel helyettesíthetjük az új képen az aktuálisat. Ilyen hatást OpenCV-ben a morfológiai dilatáció és erózió segítségével végezhetünk. A szomszédságot itt egy úgynevezett strukturáló elemmel végezhetjük, amely felvehet négyzet, ellipszis, vagy kereszt alakot is.

Lokális képpont-műveletek

Az előző pontban felsorolt műveletek mindegyike a képpontok egy lokális környezetét vizsgálja. Ezt a működést az alábbi animáció szemlélteti. Az eredeti kép minden képpontján végigmegyünk, és a legközelebbi 8 szomszédját vesszük figyelembe az új érték számításakor.

Figyeljük meg, hogy a számított értéket egy új képmátrixba kell írni, egyébként a következő képpont vizsgálatakor már a módosított érték kerülne felhasználásra, ami hibás eredményt adna!

A jobb oldali képmátrix jelen esetben csak azt mutatja, hogy az eredmény hova kerül beírásra, nem egy konkrét művelet eredményét látjuk.

A vizsgált környezet mérete

Jellemzően páratlan számú sorból és oszlopból áll, így egyértelműen meghatározható a középső eleme. Ez a középső elem általában a vizsgált képpontra illeszkedik. Gyakran használt környezet méretek: 5x5, 7x7, 9x9. Lehet téglalap alakú is, viszont a négyzetes forma előnye, hogy a függőleges-vízszintes iránytól függetlenül szimmetrikus a művelet hatása.

Figyeljük meg, minél nagyobb a környezet mérete, annál több számításra van szükség a művelet elvégzésére! Csak indokolt esetben alkalmazzunk nagy környezet méretet.

Kép széleinek problémája

Az animáción is látható, hogy a kép szélső képpontjain a vizsgált környezet képen kívüli területekre is hivatkozik. A probléma kezelésére többféle stratégia szerint dönthetünk.

  • Feltételezzük, hogy a képmátrixon kívül eső elemek egy meghatározott konstans értékkel rendelkeznek (például 0).
  • Csak olyan képpontokra hajtjuk végre a műveletet, amelyek vizsgált szomszédsága teljesen a képen belül található. Ekkor viszont az eredmény kép szélső sorai és oszlopai maradnak meghatározatlanok, amit egy megadott értékkel kell feltöltenünk (például 0), vagy meghagyhatjuk az eredeti értéküket.
  • Az előző megközelítés egy olyan módosítása, hogy az értéket nem kapó sorokat és oszlopokat elhagyjuk, vagyis a művelet egy kisebb méretű képet ad eredményül. Ez nem javasolt, később problémákat okozhat, ha a képek koordináta-értékeit használjuk.