Képszűrés II Digitális képelemzés alapvető algoritmusai Csetverikov Dmitrij Eötvös Lóránd Egyetem, Budapest csetverikov@sztaki.hu http://vision.sztaki.hu Informatikai Kar 1 Laplace-szűrő 2 Gauss- és Laplace-képpiramis 3 Gyors szűrők Szeparábilis szűrők Futószűrők 4 Adaptív zajszűrés Laplace-operátor és approximációja A folytonos Laplace-operátor definíciója: f(x, y). = 2 f x 2 + 2 f y 2 = ( 2 x 2 + 2 y 2 ) f Egyszerű 3 3-as maszk Laplace-operátorra a deriváltakat különbségekkel approximáljuk f x [ 1 1 0 ] 2 f x 2 [ 1 1 0 ] [ 0 1 1 ] = [ 1 2 1 ] 0 0 0 0 1 0 0 1 0 f 1 2 1 + 0 2 0 = 1 4 1 0 0 0 0 1 0 0 1 0 Laplace-szűrő és átlagolás Normalizálás után az alábbi approximált w L Laplace-szűrőt kapjuk: f(x, y) f(x, y) Av(x, y) = f(x, y) w L, ahol Av a szomszédos képelemek átlaga: Av(x, y). = 1 4 1 4 [ ] f(x 1, y) + f(x, y 1) + f(x + 1, y) + f(x, y + 1) 0 1 0 1 1 1 1 4 1 1 8 1 8 1 0 1 0 1 1 1 4 szomszéd 8 szomszéd Egyszerű maszkok Laplace-szűrésre
Laplace-szűrő tulajdonságai 1/2 Laplace-szűrő tulajdonságai 2/2 Az eredmény közel áll az eredeti és a simított kép különbségéhez. a lassú képváltozásokat levonjuk, a gyorsak megmaradnak ha nincs változás, nulla az eredmény (válasz, response) Az output kép értéktartománya elvileg [ 255, 255]. egy pixel és a szomszédai különbsége gyakran kicsi a gyakorlatban az értéktartomány lényegesen szűkebb jobb nem kerekíteni A Laplace-szűrő kiemel intenzitás-változásokat és finom részleteket. kontúrokat, foltokat, vékony vonalakat Zaj-érzékeny, mert magasrendű deriváltakat tartalmaz. Egy simítószűrőt alkalmazhatunk elötte, hogy a képfüggvény deriválható legyen. Laplacian-of-Gaussian (LoG): a Laplace és a Gauss szűrő konbinációja w LoG = w G w L w G alkalmazása után a képfüggvény simább, deriválhatóbb lesz w LoG kevésbé zajérzékeny, mint w L a LoG nulla-átmenetei élpontok nulla-átmenetek: előjel-váltások, zero-crossings Laplace-szűrés példái 1/3 Laplace-szűrés példái 2/3 bemenet Laplace abszolút Laplace eltolt Az eredményt kétféleképpen mutatjuk be: abszolútérték leképezés: 127 127, 127 127 eltoltérték leképezés: 127 0, 127 254 A leképezéstől fűggően más és más részletek látszanak. bemenet Laplace abszolút Laplace eltolt A kontúrok ki vannak emelve. A fokozatos képváltozások el vannak nyomva.
Laplace-szűrés példái 3/3 Képpiramis 1/2 Csökkenő felbontású képmásolatok sorozata a piramis alja (bottom): maximális (eredeti) felbontás a piramis csúcsa (top): minimális felbontás bemenet Laplace abszolút Laplace eltolt A Laplace-szűrő zaj-érzékeny. A só-és-borsó zajt tartalmazó képen kevés a kontraszt rész. a Laplace-szűrés eredménye zaj jellegű A felbontás-csökkentés tipikus menete: 1 képszűrés, pl. kisméretű Gauss- vagy Laplace-szűrővel 2 decimálás (decimation): minden második sor és oszlop törlése 3 iteráció: a két művelet megismétlése A Gauss-piramis legalsó szintje (alja) az eredeti kép. A Laplace-piramis alja a Laplace-szűrt eredeti kép. Képpiramis 2/2 Gauss-képpiramis példája A szűrőtípus választása milyen képi tulajdonságokat, sajátságokat akarunk megőrizni a csökkenő felbontású képen? ha az élekre koncentrálunk, akkor Laplace ha minimális információ-vesztességet akarunk, akkor Gauss Másféle, bonyolultabb képpiramisok is léteznek. A képpiramis szorosan kapcsolódik a scale-space-hez. képpiramis: rögzitett arányú felbontás-csökkenés (tipikusan, a felére) scale-space: szabályozható arányú részletesség-csökkenés (elméletileg, folytonos) A képet elsimítjuk, a felbontás a felére csökken. A finom részletek fokozatosan eltűnnek. lehetőség változó részletességű képelemzésre
Laplace-képpiramis példája Sejtdetektálás Laplace-piramis segítségével 1/3 eredeti sejtkép (vizelet) A finom részletek megmaradnak. A lassú képváltozások eltűnnek. lehetőség lassan változő háttér eltűntetésére Különböző méretű, alakú és textúrajú sejtek láthatók. egyes sejtek kontrasztja igen alacsony A cél a sejtrégiók kiemelése. Sejtdetektálás Laplace-piramis segítségével 2/3 Sejtdetektálás Laplace-piramis segítségével 3/3 Laplace-piramis 2.szintje, kinagyítva A piramis kiemeli a sűrű képváltozású régiókat. Az objektumok láthatók az alacsony kontraszt és a változó háttér ellenére. a detektált objektumok Minden sejtet detektáltunk és nincs hamis detektálás (false positive) Az alacsony kontraszt ellenére a határok elég pontosak.
Szeparábilis szűrők 1/3 Szeparábilis szűrők 2/3 Egy 2D-s szeparábilis szűrő két 1D-s szűrőre bontható: w(y, x) = v(y) u T (x) a szűrőmátrix (maszk) minden eleme a két 1D-s szűrő megfelelő elemeinek a szorzata u T (x) a transzponált (horizontális) vektor 1 2 1 1 2 4 2 = 2 [1 2 1 ] 1 2 1 1 1 2 1 1 1 2 1 2 2 4 2 1 1 2 1 Egy D W D W -s ablakra a műveletigény minden pontban eredeti szűrő: O(D 2 W ) szeparábilis szűrő: 2 O(D W ) Hogyan bontsunk egy 2D-s szűrőmátrixot több 1D-s szűrő lineáris konbinációára? használjuk a Szinguláris Érték Dekompozíciót, az SVD-t nem biztos, hogy gyorsabb lesz függ az 1D-s szűrők számától Szeparábilis szűrő példája Szeparábilis szűrők 3/3 Futószűrés fogalma 1/2 A Gauss-szűrő szeparábilis w G (x, y) = w G (x) w G (y) w G (x) = C e x2 2σ 2 A dobozszűrő is szeparábilis egy dobozszűrő mátrix két 1D-s egységvektor szorzata a dobozszűrő futószűrő-implementációja még gyorsabb Amikor az ablak a következű pozícióba lép, nem számítjuk ki az új értéket az eredeti definíció szerint hanem felhasználjuk az előző pozícióban kapott értéket és módosítjuk azt (felfrissítjük, update) hiszen az ablak tartalma csak kismértékben változik egy oszlop kilép egy oszlop belép Futószűrő megoldások különböző szűrőkre léteznek. dobozszűrő mediánszűrő Angolul: futószűrés: run filtering futószűrő: running filter
Futószűrés fogalma 2/2 A futó dobozszűrő 1/2 A módszer hatékonysága az eredmény kiszámítási módjától függ. egy addítiv mennyiség, pl. az átlag könnyen módosítható egy nemlineáris mennyiség, pl. a medián nehezebben módosítható A futószűrés kiterjeszthető tetszőleges alakú ablakra. Az ötletet más, bonyolultabb matematikai műveletekre is ki lehet terjeszteni egy fútóablakban (data window) a Gyors Fourier Transzformációra (FFT) a Szinguláris Érték Dekompozícióra (SVD) Adatstruktúra: az S[x] tömb, hossza N képméret: M sor, N oszlop ablakméret: D W D W Az adatstruktúra inicializálása a kezdő sorra kiszámítjuk az S[x] oszlopösszegeket Inicializálás minden sor elején a kezdő pozícióra kiszámítjuk az S W ablakösszeget D W y S[1] S[3] S[x] x A futó dobozszűrő 2/2 A futó dobozszűrő számításigénye Lépés soron belül (Next Position) az aktuális S W frissítése: minusz kilépő S plusz belépő S INIT S[1] S[3] S[x] x Kép- és ablakméret képméret: M sor, N oszlop ablakméret: D W D W Sor végén ugrás a következő sor elejére (Next Row) az összes S[x] frissítése: minusz kilépő pixel plusz belépő pixel INIT: S[x] inicializálása (emlékeztető) D W y NR NP Ha M D W, a műveletigény az S[x] inicializálása erejeig nem függ az ablakmérettől. a gyakorlatban a 25 25-ös futó dobozszűrő ugyanolyan gyors, mint az 5 5-ös Ha N M, transzponáljuk a képmátrixot, a szűrés után pedig állítsuk vissza! így talán gyorsabb lesz
Az adaptívitás szüksége Adaptív környezet-kiválasztás Eddig kizárolag a nemadaptív szűrőkkel foglalkoztunk: rögzített a környezet-kiválasztás, pl. fix méretű ablak rögzített a környezeten definiált operátor, pl. a medián Az adaptívitás a lokális kontextus felhasználása, amitől az eredmény javulását várjuk. elkerüljük az átlagszűrőkre jellemző élelmosódást elkerüljük az mediánszűrőkre jellemző sarok-lekerekítést Mi ezen nemkívánatos hatások oka? nem vesszük észre, hogy az ablak az objektum és a háttér határán van összekeverjük a két különböző intenzitás-osztályhoz tartozó értékeket Megpróbáljuk elválasztani az objektum-képelemeket a háttér-képelemektől a releváns értékeket a zajtól Adaptív környezet-kiválasztás: csak a releváns pixeleket fogjuk felhasználni. eddig a környezet a teljes ablak volt most az ablakban csak bizonyos képelemeket veszünk figyelembe A kiválasztott környezeten definiált operátor viszont fix marad. eddig is fix függvényt, pl. átlagot használtunk most is ez lesz Képelem-kiválasztás egy n n-es ablakban Szimmetrikus legközelebbi szomszédok Standard környezet az összes n 2 pixel k legközelebbi szomszéd (k-nearest neighbours, k-nn) a k pixel, amely intenzitás szerint legközelebb van a c középpixelhez a k egyik lehetséges beállítása: k = n [ n 2] + (n 1) például, ha n = 3, akkor k = 5 az i pixelt akkor választjuk, ha I(i) I(c) < I(i s ) I(c) {i, i s } a közép-szimmetrikus képelemek egyik párja Lokális kontextus: pixelek intenzitása és elrendezése Hasznos az élek esetén az él ugyanazon oldálán levő képelemeket választja elkerüli "az élen keresztüli átlagolást" elkerüli az élelmosódást Szigma-legközelebbi szomszédok az i pixelt akkor választjuk, ha I(i) I(c) < k σ zaj gyakran k = 2 σ zaj a zaj szórása σ zaj becslésére felhasználhatjuk a kép háttér részeit i c is szimmetrikus pixelpár választás kontúron
Standard és adaptív 5 5-ös szűrők össehasonlítása A szigma-szűrő nem tünteti el a só-és-borsó zajt input kép doboz medián k-nn átlag szimm. átlag szimm. medián szigma átlag 5 5 szigma med. 5 5 szigma med. 9 9 Egy zajos pixelre az I zajos ± 2σ zaj intervallum nem tartalmaz zajmentes pixeleket I zajos I zajmentes > 2σ zaj Emiatt a szúrő a I zajos zajos értéket választja a zajt nem távolítja el