Bináris képek feldolgozása Digitális képelemzés alapvető algoritmusai Csetverikov Dmitrij 1 Alapok Még egy kis digitális geometria Futam-hossz kód és komponens-analízis Eötvös Lóránd Egyetem, Budapest csetverikov@sztaki.hu http://vision.sztaki.hu Informatikai Kar 2 Középvonal 3 Távolság-transzformáció Távolság-transzformáció és középvonal 4 Vékonyítás és váz Bináris képek Bináris képfeldolgozás témái Két osztályba soroltuk a pixeleket: objektum (figure) háttér (ground, or background) A továbbiakban az algoritmusokban objektum értéke 1 háttér értéke 0 Az illusztrációkban objektum fekete háttér fehér Bináris (kétszintű) képeket kétféleképpen kaptunk küszöböléssel összefüggősséget nem vizsgáltunk régió alapú szegmentálással összefüggő régiók Adatstruktúrák futam-hossz kód (run-length code) lánc-kód (chain code) Összefüggősség-elemzés összefüggő objektum-régiók keresése tipikusan, küszöbölés után Régiók leírása váz morfológia alak
Összefüggősség objektumra és háttérre Lyukok és határok p S q S 4 connected set 8 connected set are p and q connected?? S hole S S set 4 border 8 border interior pixel Ellentmondást kapunk, ha ugyanazt az összefüggősséget alkalmazzuk S objektumra és S háttérre is. S és S pixelpárjai "kereszbe" összekötve Megoldás: más összefüggősség a két halmazra ha 8-as S-re, akkor 4-es S-re ha 4-es S-re, akkor 8-as S-re Lyuk az S halmazban az S által körülvett S-komponens Az S határpixele olyan S-pixel, amelynek S-beli szomszédja van az S-re alkalmazott összefüggősség értelmében Az S belső pixele minden nem határpixel Összefüggő komponensek Futam-hossz kód Az "összekötve" reláció ( ) reflexív: p p szimmetrikus: ha p q, akkor q p tranzitív: ha p q és q r, akkor p r x,y label S L 1 label L 2 Az "összekötve" reláció ekvivalencia-reláció Bináris képet összefüggő komponensekre bont. maximális összefüggő halmazokra Összefüggő komponens-analízis: összefüggő komponensek keresése Bináris képet vízszintes futamokkal reprezentálunk. futam: objektum-pixelek maximális összefűggő sorozata angolul: run-length code, RLC Egy R futamot az alábbiakkal kódolunk: x, y az első pixel koordinátái S a futam hossza, pixelben L a futam címkéje: R az L-ik komponenshez tartózik
Futam-hossz kódolás Az egyszerű rekurzív algoritmus vázlata Címke nélküli futam-hossz kód a bináris kép letapogatásával nyerhető Címkézett futam-hossz kód komponens-analízis külön művelet címke nélküli RLC alapján Egy kép simán visszaállítható RLC-jéből RLC vesztesség-mentes kódolás Két komponens-analízis algoritmust mutatunk be: 1 képen működő, egyszerű rekurzív algoritmust nem mindig hatékony 2 futam-hossz kóddal operáló, bonyolultabb algoritmust hatékony Képmátrixban megkeressük a következő be nem járt pontot. Rekurzív függvényhívással bejárjuk a szomszédokat. ezzel bejárjuk a kiinduló pont összefüggő komponensét A bejárt pixelekhez hozzárendeljuk az aktuális cimkét. Növeljük a cimkét és megismételjük az eljárást. Az egyszerű algoritmus tulajdonságai RLC alapú összefüggő komponens-analízis A programkód nagyon egyszerű. néhány sor ciklussal és rekurzív függvényhívással Nagy komponensek esetén nem hatékony. mély rekurzió lassú el is szállhat, ha túlcsordul a stack Nem lehet kontrollálni a komponens-bejárás sorrendjét. Csak akkor használjuk, amikor a komponensek kicsik. Bemenet: címke nélküli RLC Kimenet: komponens sorszámával cimkézett RLC Tipikus algoritmus címke-ekvivalencia táblát használ két menetben működik Az első menet három alapvető műveletet tartalmaz: új címke megnyítása létező címke továbbterjesztése ekvivalens címkék egyesítése, ekvivalencia-tábla kitöltése A második menetben az ekvivalencia-tábla alapján módosítjuk a címkéket. folytonos nővekvő címkesort kapunk
Az első menete áttekintése Az első menet inicializálása open L 1 L 2 propagate L 3 open open 8 connected runs Választunk objektum-összefüggősséget. gyakran a 8-összefüggősséget választjuk objektumra ezzel objektumot "preferálunk" háttérrel szemben Inicializáljuk a címke-ekvivalencia táblát: alapvető műveletek merge 4 connected runs futamok összefüggése E ii = 1 E ij = 0, i j A három alapvető művelet: új címke megnyítása (open) létező címke továbbterjesztése (propagate) ekvivalens címkék egyesítése (merge) Inicializáljuk a címke-számlálót: L = 0 Új, címke nélküli futam kezelése 1/2 Új, címke nélküli futam kezelése 2/2 Amikor egy új, címke nélküli R futamot találunk, az előző sorban vele összefüggő futamokat keresünk. Ha nincs összefüggő futam, új címkét nyítunk. hozzárendeljük L-t az R-hez növeljük L-t Ha egy összefüggő futam van, továbbterjesztjuk címkéjét. az összefüggő futam címkéje L L hozzárendeljük L -t az R-hez Ha több, R-rel összefüggő futam van, egyesítjuk az ekvivalens címkéket. az összefüggő futamok címkéi L k L kiválasztjuk a legkisebbet: L m < L k, k m hozzárendeljük L m-t az R-hez kitöltjük az ekvivalencia-táblát: minden k-ra E km = 1
Középvonal definíciója folytonos esetben Egyszerű alakzatok középvonala Egy alakzat középvonala az alábbi feltételeket teljesítő p(x, y) pontok halmaza: p(x, y) az alakzat egyik belső pontja p(x, y) egyenlő távolságon van két vagy több legközelebbi kontúrponttól A középvonal tükrözi az alakzat struktúráját. A középvonalat előállító műveletet középvonal-transzformációnak hívják. Angolul: medial axis, MA medial axis transform, MAT Egy lemez középvonala a lemez középpontja. Minden szögfelező a középvonal ága. Középvonal tulajdonságai Alakzat visszaállítása középvonalából Egy folytonos alakzat középvonala mindig összefüggő. egy diszkrét alakzat középvonala nem mindig összefüggő Egy alakzat visszaállítható középvonalából ha tudjuk az MA minden pontja és a legközelebbi kontúrpont közti távolságot egyébként, nem A középvonal egy alakzat kompakt és hatékony reprezentációja ha az alakzat hosszúkás részekből áll pl. betű, kromoszóma A középvonal torzítás- és zaj-érzékeny. kis alakzat-torzításra nagy középvonal-változás MA a beírt körök középpontjainak halmaza. Az alakzat visszaállítható, ha ismerjuk a körök sugarát. az összes beírt kör konvex burka vagy egyszerűen a lemezek uniója
Középvonal torzítás-érzékenysége DT-definíció folytonos esetre Távolság-transzformáció angolul: distance transform, DT Bemenet: egy vagy több alakzat Minden sarokból indul egy középvonal ág. csatlakozik a többi ághoz, mert folytonos MA összefüggő MA struktúrája függ a torzítás irányától Középvonal-transzformációt regularizálni kell. a legegyszerűbb megoldás a kontúrsimítás hatékonysága azonban nem biztos Kimenet: távolság minden belső pont és a legközelebbi kontúrpont között külső pontokra és kontúrpontokra nulla Euklideszi távolságot használunk. DT-definíció diszkréts esetre DT érzékeny kis torzításra Bemenet: egy vagy több alakzatot tartalmazó bináris kép Kimenet: távolság minden objektumpixel és a legközelebbi háttérpixel között háttérpixelekre 0, határpixelekre 1 vagy 2 Eredményképekben a távolságot intenzitással kódoljuk. nagyobb távolság vilagosabb pixel Euklideszi távolság diszkrét közelítését használjuk. pontosabb közelítés pontosabb, de lassúbb eredmény téglalap hibás téglalap távolság-transzformáció távolság-transzformáció Távolság-transzformáció továbbterjeszti a torzítást a két DT lényegesen különbözik
DT függ a távolság approximációjától A DT és a MAT közötti kapcsolat lemez DT finom approx. DT durva approx. téglalap, DT téglalap, MAT Az Euklideszi távolság finomabb approximációja nagyobb maszkot használ pontosabb eredményt nyújt lassúbb A DT gerincei a MAT ágai DT-gerinc a lokálisan legbelsőbb pontok sorozata keressünk DT-gerinceket, ezekből állítsünk össze MA-t MA meghatározása távolság-transzformációval A DT-MAT algoritmus összefoglalója Olyan egyszerűsített algoritmust adunk, amely 4-összefüggést használ objektum-pixelekre kap egy u(x, y) bináris képet kiszámítja az u DT (x, y) távolság-transzformációt u DT (x, y)-ből meghatározza az u MA (x, y) középvonalat Megjegyzések u DT (x, y) az (x, y) objektumpixel és a legközelebbi háttérpixel közti távolság u MA (x, y) egy bináris kép (x, y; i, j) a city-block távolság (x, y) és (i, j) között a gyakorlatban finomabb közelítést alkalmaznak, de az elv ugyanaz Algoritmus: Egyszerű diszkrét DT és MAT 1 DT inicializálása: u 0 (x, y) = u(x, y) 2 DT meghatározása minden k = 1, 2,...-ra rekurzívan kiszámítjuk a DT-t: u k (x, y) = u 0 (x, y) + min {u k 1 (i, j);(i, j) : (x, y; i, j) 1)} i,j megállunk, ha nincs több változás: u k (x, y) = u k 1 (x, y) minden (x, y)-ra az eredmény: u DT (x, y) = u k (x, y) 3 u MA (x, y) középvonal meghatározása DT-ből: {(x, y) : u DT (x, y) u DT (i, j); (x, y; i, j) 1}
Numerikus példa DT-MAT-ra Hámozás és kiterjesztés 1 2 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 2 2 1 1 2 3 3 3 2 1 1 2 2 2 2 2 1 u 0 (x, y) u 1 (x, y) u 2 (x, y) 1 1 1 2 2 2 2 2 1 2 2 1 2 3 3 3 2 1 3 3 3 1 2 2 2 2 2 1 2 2 1 1 u DT = u 3 = u 2 u DT maximumai u MA középvonal DT megáll, amikor k eléri az alakzat max. mérétének felét. "Megfordítással" az alakzat visszaállítható u DT maximumaiból. S ( 1) az S halmaz hámozása az S határának törlése S ( n) az S halmaz n-szeri hámozása a hámozás n-szeri megismétlése S (1) az S halmaz kiterjesztése felcseréljük S és S összefüggősségét hámozzuk az S halmazt S (n) az S halmaz n-szeri kiterjesztése a kiterjesztés n-szeri megismétlése Angolul: (n-step) shrinking (n-step) expanding Numerikus példák hámozásra és kiterjesztésre A vékonyítás és a váz definíciója shrink 8 connected set shrink 4 connected set Hámozás nem őrzi meg az összefüggősséget. eltűntethet objektumokat expand expand Vékonyítás: topológiát megőrző iteratív hámozás angolul: thinning Váz: a vékonyítás eredménye angolul: skeleton Definíció: Az S halmazt iteratív hámozással vázzá vékonyítjuk úgy, hogy megőrizzük az S összefüggősségét nem törlünk végpontokat 4 connected set 8 connected set
Vékonyítás példája A váz tulajdonságai bináris kép váz Definíció szerint a váz összefüggő halmaz. A középvonalhoz hasonlóan több ágból áll. követi hosszsúkás részekből álló objektum alakját más esetekben objektum és váza közti kapcsolat nem ennyire egyszerű Általában hasonlít a középvonalra. emiatt gyakran nem tesznek külonbséget MA és váz között a középvonalat is "váznak" nevezik vázszerű reprezentációról beszélnek, amely MAT-tal és vékonyítással is nyerhető De lehet egészen más is, mint a középvonal. pl. egy téglalap váza és középvonala Vékonyító algoritmus 8-összefüggő vázra Az algoritmus összefoglalója Tekintsünk egy p 1 pontot és 3 3-as környezetét. Legyen a háttér értéke 0, objektumé 1. Legyen TR(p 1 ) a 0 1 átmenetek száma a {p 2, p 3, p 4, p 5, p 6, p 7, p 8, p 9, p 2 } sorozatban. körbejárjuk a p 1 pontot megszámoljuk az átmeneteket Legyen NZ(p 1 ) a p 1 pont 1-es szomszédainak száma. p 3 p 2 p 9 p 4 p 1 p 8 p 5 p 6 p 7 p 1 pont és környezete Algoritmus: Vékonyítás 1 Az u 1 (x, y) és u 2 (x, y) segédképeket inicializáljuk az u 0 (x, y) bemeneti képpel. 2 Letapogatjuk u 1 -t, pontokat törlünk u 2 -ben. Akkor törlunk egy p 1 = 1 pontot, ha egyszerre teljesül 2 NZ(p 1 ) 6 (1) TR(p 1 ) = 1 (2) p 2 p 4 p 8 = 0 vagy TR(p 2 ) 1 (3) p 2 p 4 p 6 = 0 vagy TR(p 4 ) 1 (4) 3 Ha végig mentünk u 1 -n és nem volt törlés, megállunk. egyébként, másolunk u 1 = u 2 és a 2.lépésre ugrunk
Három példa, amikor p 1 = 1 nem törölhető Megjegyzések a vékonyító algoritmushoz 1 1 0 1 p 1 1 0 0 0 0 0 0 1 p 1 0 0 0 0 1 0 1 0 p 1 0 1 1 1 (a) (b) (c) (a) p 1 törlése kettészakíthat egy régiót. (b) p 1 törlése lerövidíthet egy vonalvéget. (c) 2 NZ(p 1 ) 6, (3, 4) is teljesül, de p 1 mégsem törölhető mert TR(p 1 ) = 3 1 Pixel körbejárása és az átmenetek számolása egyébként is hasznos művelet. Vékonyított képek elemzésére is alkalmazzák. vonal-végpontok keresésére vonal-kereszteződések keresésére, stb. Az algoritmus igazából nem 3 3-as, hanem 4 4-es ablakot használ. Mert körbejárja p 2, p 4 -t, amikor TR(p 2 ), TR(p 4 )-t számolja. p 3 p 2 p 9 p 4 p 1 p 8 p 5 p 6 p 7 A vékonyító algoritmushoz aszimmetriája Kiszámítja TR(p 2 )-t és TR(p 4 )-t. De TR(p 6 )-t és TR(p 8 )-t nem számítja ki. lásd (3, 4) p 3 p 2 p 9 p 4 p 1 p 8 p 5 p 6 p 7 Az aszimmetria révén egypixelnyi vastagságú vázat kapunk páras vastagságú vonalak esetén is. félpixelnyi eltolás lehet az "igazi" vázhoz képest Mellékhatás: bizonyos vonalak teljesen eltűnhetnek később erre példát adunk a gyakorlatban ez nagyon ritkán fordul elő