Eötvös Loránd Tudományegyetem Természettudományi Kar Abdul Kader Aida Alakfelismerés képeken Bsc szakdolgozat Témavezet : Dr.Szeghy Dávid Péter Geometriai Tanszék Budapest, 2018
Köszönetnyilvánítás Ezúton szeretnék köszönetet mondani témavezet mnek Szeghy Dávidnak, hogy tanácsaival és számos konzultációs lehet séget biztosítva segítette munkámat. Hálásan köszönöm, hogy rávilágított erre a területre, és lelkesedésével megszerettette velem ezt a témát. Szeretném megköszönni szüleimnek és testvéreimnek, hogy kitartóan támogattak az egyetemi éveim alatt. Továbbá köszönöm Szabó Magdolnának, hogy végig támogatott mindenben. És nem utolsó sorban köszönettel tartozom Farkas Dórának, Kepes Tamásnak és Sagmeister Ádámnak meg az összes olyan szaktársamnak, aki segítségemre volt a tanulmányaim során. 2
Tartalomjegyzék 1. Bevezetés 4 2. Fényképmodell 5 3. El feldolgozás-sz r k 9 3.1. Lineáris sz r k................................. 10 3.1.1. Az átlag-sz r.............................. 11 3.1.2. A Gauss-sz r.............................. 12 4. Élpont detektálás 14 4.1. Gradiens alapú operátorok........................... 14 4.2. Laplace operátor................................ 19 4.3. Canny éldetektálás............................... 23 5. Hough-módszer 26 5.1. Egyenes detektálás............................... 26 5.2. Kör detektálás.................................. 27 5.3. "Finomabb" Hough-módszer.......................... 27 5.4. Általános alakzat detektálás.......................... 28 Irodalomjegyzék 32 3
1. fejezet Bevezetés Az ellen r egész id alatt t nézte, el bb egy látócsövön, aztán egy mikroszkópon,végül egy monoklin át. Lewis Carroll, Alice Tükörországban Bizonyára már mindenki készített fényképet élete során, és egyre többen próbálkozunk különböz fényképmódósító programmal/eszközzel "új" képet generálni, hogy a számunkra legfontosabb információt tartalmazza. Ahogyan az r próbálta a változó méret Alizból különböz eszközökkel a lényeget látni, úgy az emeberek is mindig arra törekszenek, hogy a célhoz egyre közelebb jussanak. Ha például egy autórendszám-felismer cég detektálni szeretné a rendszámtáblát, akkor bizonyára haszontalan lenne számára az egész képet gyelembe venni, hisz túl sok adatot tartalmazna, így a munkát megnehezítené. Emiatt elegend lesz a rendszámtábla fényképét gyelembe venni, és azon belül is a karaktereket. Manapság több olyan algoritmust használnak, amivel fel tudják ismerni az autópályákon áthaladó autók rendszámait, ezzel megkönnyítve más munkáját, hisz ezzel ki tudják sz rni, hogy legálisan hajtanak-e be vagy sem. Egyébként az ELTE parkolójában is rendszámfelismeréssel lehet be-és kihajtani. Ma már ezt nemcsak a hétköznapokban használják, hanem komoly tudományos területen is. Ilyen például az orvostudomány (már egyre több orvos arra törekszik, hogy minél kevesebb beavatkozással egyre pontosabb eredményt érjen el), de az élelmiszeriparban is használják, különböz minták elemzéséhez igen hasznosnak bizonyult. De vajon mi állhat ennek a hátterében? Hogyan képes egyáltalán a számítógép egy fényképet tárolni és azon belül egy alakzatot felismerni? Ezzel a területtel a számítógépes látás foglalkozik (Computer Vision), melynek kiterjedt irodalma van. Dolgozatomban ennek egy kis területével foglalkozom: a képfeldolgozással, valamint az alakfelismeréssel. Az emberi szem többnyire folymatosan látja a körülötte lév dolgokat, de a számítógép nem képes egy adott képet folytonos modellként értelmezni. El ször látni fogjuk, hogyan lehet egy fényképet modellezni, majd rátérünk, hogy egy számítógép miként tárolja el, továbbá bemutatok néhány szükséges eszközt az éldetektáláshoz, majd a legvégén kerül sor néhány éldetektálási módszer ismertetésére. 4
2. fejezet Fényképmodell Ebben a fejezetben látni fogjuk, hogy egy fényképet hogyan lehet matematikailag modellezni, a rajtuk lév alakzatok miként írhatók le valamint mi alapján mondjuk, hogy "élet" kontúrvonalat találtunk. A továbbiakban fehér-fekete fényképpel foglalkozuk. Egyrészt, mert az alakzat körvonalainak felismeréséhez nem szükségképpen kell, hogy színes legyen a képünk. Másrészt, mert a színek egy matematikai modellt szükségtelenül bonyolulttá tennének. A fehér-fekete és a köztük lév árnyalatokra gondolhatunk úgy, mint a [0,1] intervallum értékeire, ahol 0 jelöli a fehér, és 1 a fekete színt, és ami pedig e kett között van, azt valamilyen szürke árnyalatnak hívjuk. Emiatt egy fényképre tekinthetünk úgy, hogy egy sík valamely tartományról képez a [0,1] intervallumba. Természetesen más intervallumot is használhatnánk, mi csak az egyszer sítés kedvéért használjuk ezt. Azaz általánosan elmondható, hogy adott egy D R 2 tartományon az f : R 2 R egy sima függvény.(x, y) f(x, y) függvény esetén az egyszer sítés kedvéért az x 1, x 2 koordináta függvényeket használjuk, ha alakot írunk. 2.0.1. Deníció. Egy folytonos függvény szinthalmazán az f c := {(x, y) D f(x, y) = c} halmazt értjük. Ez a szinthalmaz általában nem lesz szép, például a konstans függvényre, az egész síkot, vagy az üres halmazt adja vissza. De mi olyan szinthalmazokat fogunk vizsgálni,melyek éleknek feleltethet ek meg, és emiatt mi csak speciális szinthalmazokkal fogunk foglalkozni. Szükségünk lesz a reguláris görbe deníciójára. Ld.Verhóczki[8] 2.0.2. Deníció. Egy f c szinthalmazt, szintvonalnak nevezünk, ha p esetén, melyref(p) = = c U p D környezete p-nek, hogy U p f c, az egy sima reguláris görbe. Feladatunk az lesz, hogy görbéket detektáljunk a képen. De azzal a matematikai modellel (egyszer sítéssel) élünk, hogy a görbék azok, amik egy "színhez" tartoznak, így olyan, mintha szintvonalakat keresnénk. Emiatt a görbe keresés problémája a szintvonalak keresésére "redukálodik le". 5
Már csak azt kell megvizsgálnunk, hogyan ismerhetjük fel a szintvonalat, egy adott képen. A szintvonal deníciójából kiderült, hogy a szintvonal görbéje mentén a függvény azonosan konstans, emiatt a derivált nulla lesz az adott görbe mentén. Azaz (f(γ(t)) c)-t deriválva a df(γ(t)) 0 dt kifejezést kapjuk. 2.0.3. Deníció. Az f függvény p D-beli v irányú deriváltjához legyen Φ: ( 1,1) D olyan sima görbe, amelyre Φ(0) = p,φ (0) = v, ekkor f(p) = df(φ(t)) v dt t=0 Megjegyzés. Belátható, hogy ez a deníció Φ-t l független, és csak p-t l meg v-t l függ. Speciálisan, ha Φ(p) = (p 1, p 2 ) pontot, és a Φ(t) = (p 1 + t, p 2 ) görbét tekinjük, akkor a df(φ(t)) = f(p) dt x 1 t=0 kifejezést az f függvény x szerinti parciális deriváltjának nevezzük. Ez általánosítható a többi változó szerinti parciális deriváltra is. Most kétváltozós a függvényünk, emiatt nekünk csak az x, illetve az y szerinti parciális deriváltakra lesz szükségünk. Az öszetett függvény deriválási szabálya miatt azaz df(φ(t)) dt df(φ(t)) dt = f (Φ(t)) Φ (t) [ f(φ(t)) =, f(φ(t)) ] [Φ 1 (t), Φ 2 (t)] = x 1 x 2 2.0.4. Deníció. Tekintsük a f = ( 1 f, 2 f... n f). 2 i=1 f(φ(t)) x i dφ i(t). dt kifejezést, ezt az f függvény gradiensének nevezzük, ahol i f := f x i a parciális deriváltakat jelöli egy rövidebb alakban. 2.0.5. Állítás. A gradiens mer leges a szintvonalra, azaz : < grad(f), γ (t) > 0, ahol γ a szintvonal egy darabjának a paraméterezése. Bizonyítás. Mivel (f(γ(t)) c) ezért deriválva mindkét oldalt jobb oldal 0 lesz, a bal oldal pedig: [ f(γ(t)) f(γ(t)) =, f(γ(t)) ] [γ t x y 1(t), γ 2(t)] Ez pedig a skaláris szorzatnak felel meg, tehát:. < grad f(γ(t)), γ (t) > c = 0. 6
Az a kérdes merülhet fel bennünk, hogy vajon minden olyan görbe, ami mer leges a gradiensre, szintvonal lesz-e. Erre válaszol az alábbi tétel. El bb viszont szükségünk lesz az implicit függvény tételre. 2.0.6. Tétel (Implicit függvény tétel). Ha F (x, y) kétváltozós folytonosan dierenciálható függvény az U R 2 nyílt halmazon úgy, hogy p U esetén a grad F (p) 0, akkor a szinthalmazok szintvonalak lesznek, azaz c R esetén az f c szinthalmaz egy reguláris görbe lesz és ez a görbe egyértelm. A bizonyítás megtalálható Laczkovich Miklós jegyzetében ld.[3] 2.0.7. Tétel. Egyértelm en létezik olyan görbe, ami mer leges a gradiensre, ha a gradiens sehol sem t nik el. Bizonyítás. El ször a létezést kell belátnunk. Az implicit függvény tétel miatt p pontra f f(p) szintvonal lesz. Azaz p ponton át van szintvonal. Most az egyértelm séget szeretnénk belátni. Legyen φ 2 (t) egy olyan reguláris görbe, ami mer leges a gradinesre. Ennek vegyük egy tetsz leges p pontját, melyr l esetleges átparaméterezéssel feltehetjük, hogy p = φ 2 (0). Továbbá φ 1 (t) legyen annak a szintvonalnak a paraméterezése, melyre φ 1 (0) = φ 2 (0) teljesül. Ahol (f(φ 1 (t)) f(φ 2 (t))) = f (φ 1 (t)) (φ 1 (t)) f (φ 2 (t)) (φ 2 (t)) f (φ 1 (t)) (φ 1 (t)) = grad f(φ 1 (t)) (φ 1 (t)) (2.1) f (φ 2 (t)) (φ 2 (t)) = grad f(φ 2 (t)) (φ 2 (t)) (2.2) Ha a (2.1) és a (2.2) egyenleteket kivonjuk egymásból, nullát kapunk, hisz φ 1 (t)-r l feltettük, hogy szintvonal emiatt (2.1) 0 lesz a korábbban belátottak miatt. A (2.2) egyenlet szintén 0 lesz, hisz φ 2 (t)-r l feltettük, hogy olyan görbe, ami mer leges a gradiensre. Ezekb l azt kapjuk, hogy f(φ 1 (t)) f(φ 2 (t)) c, ahol c egy konstans. Mivel t = 0-ban (φ 1 (0)) = (φ 2 (0)), ezért következik, hogy t esetén f(φ 1 (t)) = f(φ 2 (t)), azaz φ 2 (t) is ugyanazt a szintvonalat paraméterezi, mint φ 1 (t) mivel a szintvonal egyértelm volt. De a két görbe paraméterezése nem feltétlen azonos. Megjegyzend, hogy ha a grandiens elt nik, akár csak egy helyen is, akkor nem egyértelm a görbe, példa erre a nyeregfelület, ahol a nyeregponthoz tartozó szinthalmaz két egymást metsz reguláris görbe. Ezek a nyeregponton kívül szintvonalakként viselkednek és mindenütt mer legesek a gradiensre, még a nyeregpontban is, ahol 0 a gradiens értéke. 2.0.8. Deníció. Gradiens er ssége(magnitude) mag( f) = f = ( f x ) 2 ( ) 2 + f y 2.0.9. Állítás. A gradiens vektor iránya az f függvény legnagyobb növekedési irányát jelöli ki. 7
Bizonyítás. Azt kell belátni, ha veszünk egy p = (p 1, p 2 ) pontot, akkor milyen irányban lesz az f függvény deriváltja maximális. Legyen γ(t) olyan görbe, melyre a γ(0) = p ponton megy át a v = γ (0) irányban és γ (0) = 1 egységvektor. Ekkor az alábbi kifejezés: df(γ(0)) dt =< grad f(γ(0)), γ (0) >= grad f(γ(0)) (γ(0)) cos(α 0 ) pontosan akkor lesz maximális, ha γ (0) a gradiens irányába mutat. A gradiens vektor hossza f(x) az f függvény legnagyobb növekedésének mértékét adja. Minél nagyobb a gradiens vektor hossza, annál gyorsabb az árnyalatok változása a képen, azaz annál élesebb-markánsabb az átmenet. Annál határozottabb az él, amit látunk a képen. Emiatt a továbbiakban nekünk a nagy gradiensekre lesz szükségünk, mert ezekkel detektálhatjuk az élek pontjait és irányát. (a) Rendszámtábla fehér-feketében (b) Az eredeti diszkretizált függvénye 8 biten 2.1. táblázat. Függvény diszkrét megjelenítése 8
3. fejezet El feldolgozás-sz r k Miel tt egy élt szeretnénk detektálni szükségünk lesz néhány el készületet (Preprocessing) végrehajtani, hogy az adott célnak/feladatnak megfeleljen. Ezek különböz sz r k segítségével történnek. Egy számítógép nem tud egy fényképet folytonos függvényként értelmezni, ezért létrehoz egy adattömböt "táblázatot", melynek elemeit pixelnek hívjuk (Picture Element). Minden egyes pixelhez egy színt rendelünk 0-255 között. A 0 a fehér színnek felel meg, míg a 255 a feketének, és mindent, ami a kett között van, azt szürkeárnyalatnak hívjuk. Mi most 8 bites 2 8 árnyalatokkal számoltunk, de mód van nagyobb színmélység tárolására is több biten, ld.(2.1) Fényképkészítés során több olyan "zavaró" tényez felléphet, ami nagyban befolyásolhatja a kép min ségét, ilyen lehet pl. a napfény, vagy a víztükröz dés egy pataknál, de akár az orvostudomány területén pl.röntgenkép felvételkor, ha éppen nincs megfelel len beállítva a gép. Minden ilyen jelenséget, meg számos mást, amib l nem tudunk vagy nem szeretnénk információt kinyerni, zajnak nevezünk. Sajnos sokszor nincs módunk "eltávolítani" a zavaró tényez ket, így nyomot hagynak a képen, de szerencsére több olyan folyamat létezik, ami segít a kép min ségének a javításában. Az emberi szem jó esetben meg tudja különböztetni a "jó" pixeleket a zajostól, hiszen az agyunk alak-minta felismer algoritmusa azonnal m ködésbe lép, és ezért mi csak az ismert mintákra koncentrálunk, a zaj sokszor fel sem t nik számunkra. De hogyan várhatnánk el ezt egy számítógépt l? A számítógép új képet generál, melyben a zajok, zavaró tényez k kisebbek, vagy jobban kezelhet ek. De az új kép alkotása nem csak zaj eltávolítására lesz jó, hanem számos más célra is használható. Például ilyenekkel fogunk tudni élesíteni egy képet, vagy akár élpontokat kiemelni, meg számos más dologra is használják. Dolgozatomban csak a zaj eltávolításának, valamint az élpontok megtalalásának az eljárását mutatom be. Egy kép alkotása több folyamatból áll. Sz résnek (ltering) nevezzük azt az eljárást, mikor egy "új" képet generálunk, mivel ezzel "kisz rjük" az általunk nem kívánt információkat. Két különböz folyamatot különböztethetünk meg. Az egyiket lineárisnak, a másikat meg nem-lineáris sz r nek hívjuk. Dolgozatomban csak az el bbit ismertetem részletesebben. 9
3.1. Lineáris sz r k Ennél a sz r nél az új kép alkotása egy segéd mátrixxal az úgynevezett kernel segítségével történik. A kernel értékeit a szomszédos pixelek lineáris kombinációjából kaphatjuk meg. Két legismertebb fajtáját mutatom be. Az átlag- valamint a Gauss-sz r t. El bb viszont szükségünk lesz a konvolúció deníciójára. Mivel a gyakorlatban használjuk, azaz nem folytonos esetben, ezért a dolgozat keretein belül csak diszkrét esetre deniáljuk. 3.1.1. Deníció. 1 1 h(x, y) = f(x + i, y + j) g(i, j) i= 1 j= 1 h(x, y) = f(x, y) g(x, y) kifejezést hívjuk konvolúciónak, ahol f jelöli az eredeti képet, g pedig a kernelt, és a m velet a konvolúciót. Itt most az i, j = 1,0,1 esetet használtuk, azaz a kernel egy 3 3- as mátrix volt. Természetesen nagyobb páratlan négyzetes kernelek esetén is hasonlóan deniálhatjuk a konvolúciót. A konvolúciós m velet felfogható egy "mozgó ablakként", melynek középppontjában áll annak a pixelnek az értéke, amire éppen végezzük a sz rést, így ez olyan, mintha jelen esetben 3 3-as kernelt csúsztatnánk végig balról jobbra, valamint fentr l lefelé a képen. Ha feltesszük, hogy a fontos információ a kép belsejében van, akkor a keretr l elfeledkezhetünk (ez egyben egy eljárás a kép széleinek a kezeléséhez). A kép belsejében már értelmes a konvolúció deníciója. Néha viszont lehet, hogy olyan elemekkel kell számolnunk, ahol a konvolúció fenti deníciója nem alkalmazható közvetlenül, amik valójában nem is léteznek, pl. amikor a szélen lev pixeleket szeretnénk kiszámolni. Ezt a problémát tehát mindenképp orvosolni kell. Több eljárás is létezik, amely megoldást ad. A croppingot (levágást) valamint a paddingot (kitöltést) mutatom be: cropping : itt a kép keretér l elfeledkezünk, és csak a belsejével számolunk. Így viszont kisebb képet kapunk mint az eredeti. Emiatt gyakorlati szempontból nem túl hatékony. Ezt a fajta eljárást zajcsökkentésre szokták használni, ahol nem számít, ha kisebb képet kapunk outputként. padding : ennek lényege az, hogy az eredeti képet kiegészítjük egy ugyanakkora méret mátrixszal, mint amekkora a kernel mérete, hogy a kép szélén lév pixelek is kiszámíthatóak legyenek. A kiegészített mátrix elemeit különböz "adatokkal" tölthetjük ki, attól függ en mi a cél. Öt fajtát különböztethetünk meg: tükrözés (reect), csomagolás (wrap), konstanssal való kitöltés (constant), csempézés(tile), és ismétlés (replicate). Ezek közül csak néhányat mutatok be. B vebben a [5] cikkben olvasható. A tükrözés: az oldalaknál az oldalakra tükrözi a képen szerepl értékeket, de a csúcsoknál egy rész ki fog maradni, ott a csúcsokra középpontosan tükrözzük a kép elemeit. A csomagolás: azt csinálja, hogy mikor elérjük a kép szélét, akkor a másik oldalon lév elemt l kezdjük lemásolni az elemet. Például ha a jobb szélét érjük el, akkor a 10
e d d e f f e b a a b c c b b a a b c c b e d d e f f e h g g h i i h h g g h i i h e d d e f f e 3.1. táblázat. Tükrözés bal szélén lév elemeket jobbra haladva másoljuk le, analóg módon fentr l-lefele. Ez kör-panoráma kép készítéskor használható. e f d e f d e h i g h i g h b c a b c a b e f d e f d e h i g h i g h b c a b c a b e f d e f d e 3.2. táblázat. Csomagolás 3.1.1. Az átlag-sz r Az átlag-sz r mint ahogy a neve is utal rá, a szomszédos pixelek átlagát veszi. Így kaphatjuk meg a kernel értékeit. Minél nagyobbra választjuk a kernel méretet annál jobban elt nik a zaj a képb l, cserébe viszont homályosabb lesz a képünk, emiatt ezt nem ajánlatos olyan kepeknél használni, amin "pontszer en" helyezkedenek el a zajok, mint pl. a só-bors zaj (salt and pepper noise). Ami bizonyos pixeleken maximális értékeket vesz fel másokon meg minimálisat (azaz fehéret vagy feketét). Ez olyan, mintha a képet "megszórtuk" volna sóval meg borssal, innen jön az elnevezés. Ilyen fajta zajokra a medián sz r t szokták használni, ami sokkal jobb eredményeket ad (ezt kés bb fogom tárgyalani). Az átlag-sz r t inkább olyan zajmodelleknél használják, amik hasolítanak a Gauss-görbére. Ezeknél elég "szép" eredményeket kapunk outputként. Lényegében tiszta képet, akárcsak az eredeti volt. Az alábbi módon számolhatjuk ki egy 3 3-as kernelt véve. h(x, y) = f(x 1, y 1) 1/9 + f(x 1, y) 1/9 + f(x 1, y + 1) 1/9 +f(x, y 1) 1/9 + f(x, y) 1/9 + f(x, y + 1) 1/9 +f(x + 1, y 1) 1/9 + f(x + 1, y) 1/9 + f(x + 1, y + 1) 1/9. Az átlag-sz r minden információt egyenletesen vesz gyelembe, ugyanazzal a súllyal pedig lehet, hogy a közelebbi pixeleket nagyobb súllyal kellene számolni, mint a távoliakat, és ekkor létjogosúltsága van olyan sz r nek, ami a közelebbit nagyobb súllyal, a távolabbit kisebb súllyal veszi, ilyen például a Gauss-sz r. 11
(a) Eredeti fehér-fekete kép (b) Gauss zaj (c) Átlag-sz r, kis kernellel (d) Átlag-sz r, közepes kernellel (e) Átlag-sz r, nagy kernellel 3.1.2. A Gauss-sz r A kétváltozós Gauss-görbét folytonos esetben a 1 Gσ (x, y) = e 2πσ 2 x2 +y 2 2σ 2 alakban de niálhatjuk, ahol σ jelöli a szórást, és ezt minél kisebbnek választjuk, annál "fontosabb" lesz a középpontban elhelyezked pixel, és ennek kisebb környezete. Feladatunk az lesz, hogy a fenti görbét közelítsük. Ezt próbáljuk diszkréten modellezni. Különböz méretek lehetnek, és ezen belül is különböz változatai σ értékének megfelel en. 12
1 1 2 16 1 2 4 2 1 2 1 1 4 4 16 1 7 26 273 4 16 1 4 (a) 7 26 41 26 7 4 16 26 16 4 1 4 7 4 1 (b) 3.3. táblázat. (a)3 3-as, (b)5 5-ös Gauss-kernelnek egy lehetséges megadása Megjegyzés. Léteznek nem-linearis sz r k is. Ezek szemben a lineárissal nem a szomszédos pixelek lineáris kombinációját veszik, hanem külöböz módszereket használva számolja ki az új pixel értékét. Pl. a medián sz r a szomszédos pixelek mediánját számolja ki (páratlan szám esetén a középs elem, míg páros esetben a két középs elem átlaga, persze el bb növekv - vagy csökken sorrendbe kell rendezni az elemket). Ez a sz r nem használ konvolúciós m veletet, hanem minden egyes pixelt lecserél a szomszédos elemek mediánjával. Ezzel az eljárással sokkal jobb min ség képet kapunk, mint az átlagsz r vel. Emiatt ezt szokták használni pontszer zajsz résre. (a) Eredeti fehér-fekete kép (b) Só-bors zaj (c) Medián sz r 13
4. fejezet Élpont detektálás Az el z fejezetben láttuk, milyen el feldolgozások szükségesek ahhoz, hogy éleket detektálhassunk. Korábban azt is beláttuk, hogy él ott keletkezik, ahol nagy az intenzitásváltás. Kialakulásuk szerint négy fajtát különböztethetünk meg: 1. Lépcs s (step): Itt nagy árnyalatváltozás történik, hirtelen az egyik pixrelr l a másikra. Ilyen nagyon éles határvonalnál található pl. egy felh karcoló sötét épületének határvonalánal a világos ég el tt. 2. Rámpa (ramp): Az árnyalatváltozás nem hirtelen megy végbe, mint a lépcs snél, hanem folyamatosan, ez az eset egy tárgynak az árnyékánál fordulhat el. 3. Gerinc (ridge): Az árnyalatváltozás ebben az esetben hirtelen történik, akárcsak a lépcs snél, de itt rövid id n belül vissza is tér. Pl. vékony bet knél fordulhat el. 4. Tet (roof): Hasonlít az el z höz, viszont az árnyalatváltozás nem olyan éles ebben az esetben. Ez a fajta nagyon ritkán fordul el. 4.1. ábra. Balról-jobbra haladva a következ éltípusokat láthatjuk: lépcs s, rámpa, gerinc, tet 4.1. Gradiens alapú operátorok Ismeretes, hogy egy függvény deriváltját az alábbi módon deniáljuk és számolhatjuk ki. g = dg dx = lim x x 0 g(x) g(x 0 ) x x 0 14
Mivel a deriváltak egymáshoz viszonyított arányára vagyunk kiváncsiak, ezért a x x 0 választható 1-nek, hiszen most diszkrét esetben 1 pixel távolságnál közelebb nem tudunk lépni, és ezt a távolságot nevezzük 1 egységnek. Innen adódik a, g = dg dx = g(x 0 + 1) g(x 0 ) amit derivált közelítésnek neveznek. Megjegyzend, hogy nagyon sokféleképpen lehet a deriváltat közelíteni, de mi csak numerikusan közelítjük. A f = f(x + 1, y) f(x, y) (4.1) x egyenlet a jobboldali parciális deriváltat jelzi x irányban, míg az f x = f(x, y) f(x 1, y) (4.2) egyenlet a baloldali parciális deriváltat x irányban. Analóg módon m ködik az y irányban is. De a diagonális és az anti-diagonális irányban is hasonlóan tudunk deriválni, Pl. f + f x y jobboldali derivált: f x + f = f(x + 1, y + 1) f(x, y) (4.3) y Így összesen 8 f irányt kapunk (vízszintes, függ leges, diagonális, valamint anti-diagonális irányokat). A fenti 8 egyenletb l kapjuk a gradiens egyik közelítését: f(z 5 ) ((z 3 + 2z 6 + z 9 ) (z 1 + 2z 4 + z 7 ); (z 7 + 2z 8 + z 9 ) + (z 1 + 2z 2 + z 3 )) Az alábbi táblázatban láthatjuk az elemek elhelyezkedését a fénykép mátrixban, hogy miért ilyen alakú ez a közelítés, arra kés bb adunk magyarázatot. A jobb átláthatóság kedvéért szokás csak ezt a táblázatot megadni egy lineáris sz r esetén. Mi a deriválásokat fogjuk megadni ilyen sz r kkel. z 1 z 2 z 3 z 4 z 5 z 6 z 7 z 8 z 9 4.1. táblázat. A kernelben az elemek elheyezkedése Ha csak az egyik irányt vesszük gyelembe (a 8 lehetséges közül) akkor nem feltétlenül kapunk jó közelítést, hisz el fordulhat hogy éppen hibát jelez az az egy irány. Emiatt az lesz a cél, hogy ezek kombinációját vegyük. Ezzel is csökkentve a hibák lehet ségét. Erre két konstrukciót alkotunk (most csak az x irányra). Mindkett nél csak 6 iránnyal számolunk, a függ leges irányokkal most nem kell számolnunk, mivel az x irány érdekes számunkra jelen esetben. Az els konstrukcióban 3 kombinációt használunk: 2 vízszintes irányt veszünk 1 diagonális és 1 anti-diagonális irányt veszünk, ezek jobboldaliak 15
1 diagonalis és 1 anti-diagonális irányt veszünk, ezek baloldaliak Így kapjuk a (4.2) táblázatban látható táblákat. És végül, ha a (c), (f), (i) esetnek vesszük az "átlagát" (valójában elég az összeget venni, mert ilyen módon egész számokat kapunk, ami a számolásokat megkönnyíti. Ez azért elég, mert csak a deriváltak egymáshoz viszonyított relatív nagyságára vagyunk kiváncsiak). Amit kapunk, az egy ismert operátor, Prewitt operátor x irányú komponense. Az y irányú komponense hasonlóan kapható meg ld.(5.1) (a) része. 0 0 0 0 0 0 0 0 0 1 1 0 + 0 1 1 = 1 0 +1 0 0 0 0 0 0 0 0 0 (a) (b) (c) 0 0 +1 0 0 0 0 0 +1 0 1 0 + 0 1 0 = 0 2 0 0 0 0 0 0 +1 0 0 +1 (d) (e) (f) 1 0 0 0 0 0 1 0 0 0 +1 0 + 0 +1 0 = 0 +2 0 0 0 0 1 0 0 1 0 0 (g) (h) (i) 4.2. táblázat. Alapderivált sz r k kombinációja A második konstrukcióban másképp kombináljuk: 1. a diagonális és az anti-diagonális irányokat vesszük, ez a (4.2)(f) + (i) része. 2. a két vízszintes irányt a (4.2) táblában (c) részét kétszeres súllyal vesszük, ld.(4.3). Ez azzal magyarázható, hogy a (4.3)(a) része kétszer a baloldali x és kétszer a jobboldali x deriváltat adná egy sima függvény esetében, ezért (b)-t is kétszeres súllyal nézzük. Így kapjuk meg a Sobel operátornak az x irányú parciális deriváltját (a Sobel operátor is egy matrix párból áll.) Ld.(5.1) (b) része. 1 0 1 0 0 0 1 0 1 0 0 0 +2 1 0 1 2 0 2 1 0 1 0 0 0 1 0 1 (a) (b) (c) 4.3. táblázat. (a) diagonális irányok, (b) vízszintes irány, (c) a kett összege 16
A következ egyszer példa bizonyítékot ad arra, hogy miért érdemesebb a "szokásos" (Prewitt,Sobel) operátorokkal számolni mint, az "alapderiváltakkal". Ha egy sima zajmentes képet veszünk, amik csak 0-kból meg 1-esekb l állnak, azaz nincs színátmenet, akkor ha az "alapsz r kkel" számolunk, mindkét irányban (vízszintes meg függ leges) észlelnék változást, de a gradiens vektor számolásakor "fura" irányokat kapunk, melyek egyike se lesz mer leges az élre, mivel az x és y koordinátája a gradiensnek csak +1, 1,0 lehet az alapderivált esetén. Ezért csak 8 irányt kaphatnánk. Ezzel szemben, ha a Sobel operátort vesszük, akkor a gradiens értékek ugyan "csúnyábbak" de az irányok sokkal "nomabbak". Sokkal több irányt kapunk, amik jobban tudják a valódi gradienst közelíteni. Azaz optimálisabb lesz. 4.2. ábra. (a) Zajmentes kép, (b) Gradiens értékek az alapderiváltakkal számolva, (c) Gradines értékek a Sobel operátorral számolva Korábban "beláttuk", hogy él ott lesz, ahol nagy a gradiens hossza. És az, hogy milyen értékt l mondjuk meg, hogy "elég nagy" ahhoz, hogy élpontnak feleljen meg, erre nincs külön módszer, mindig az adott feladattól függ. Ezt formálisan küszöbölésnek nevezzük (thresholding), azaz adott küszöbt l kezdve élpontnak fog megfelelni, és minden nála kisebb elhanyagolható lesz. A küszöb választását nagyban befolyásolja a kép min sége, hiszen minél nagyobbnak választjuk, annál több élet veszíthetünk el, még olyat is, ami esetleg egy valódi élnek felel meg, és minél kisebb ez az érték, annál több élt detektálhatunk, akár olyat is, ami nem számít valódi élnek, mint pl. a karc a rendszámtáblán, emiatt mindig az adott feladattól függ, hogy mekkorára érdemes ezt megválasztani. Ld.(4.4) táblázat. Egy egyszer példán keresztül szeretném megmutatni, miért van létjogosultsága a különbözö zajsz r k használatának. Els nekifutásra a gyorsabb eredmény elérése érdekében, mindenki azt gondolná, hogy felesleges lépés lenne a zajsz rést végrahajtani, ha már a 17
(a) Eredeti fehér-fekete kép (b) Prweitt operátor, kis küszöbbel (c) Prweitt operátor, közepes küszöbbel (d) Prweitt operátor, nagy küszöbbel 4.4. táblázat. Különböz küszöb méretek különböz gradines operátorok is képesek élpontokat detektálni. De ezzel csak óvatosan szabad bánnunk, ugyanis ilyen esetben el fordulhat, hogy a számítógép nem tud különbséget tenni egy hibás meg egy jó kép között. Lássuk tehát a példát. Vegyük el ször egy olyan képet, amiben egyetlen egy sor/oszlop mentén van él, (azaz a táblázatban minden érték 0, csupán egy sor/oszlop mentén van 1-es) ez tulajdonképpen felfogható egy hibának pl.egy karcnak a rendszámtáblan. Majd vessük össze egy olyan képpel, melynek egy tartománya mentén van él, azaz egy darabig minden sor 0-s, majd 1-es lesz egy bizonyos sortól kezdve. Vizsgáljuk meg, hogy mi történik a különböz esetekben, a két képre alkalmazva. Ha el ször a Prewitt operátort alkalmazzuk mindkét képre külön-külön, akkor nem látunk valójában különbséget, hisz mindkett detektál élt (csak különböz sorokban). Ha viszont el bb valamilyen zajsz r t használunk pl. els lépésben az átlag- sz r t vesszük, és csak ezek után alkalmazzuk a Prewitt operátort, akkor az els ("hibás" kép) nem detektál élt, ha mindvégig feltesszük, hogy 2 a küszöbérték, viszont a második esetben továbbra is lesz él. Hasonló eredményhez juthatunk, ha a medián sz r t használjuk, és csak utána a Prewittet, hisz ugyanúgy az els nem detektálna élt, a második meg igen. Részletesebb erdemény az (5.3) táblázatban látható. De a kés bbiekben a Canny éldetektálás alkalmazásánál is látni fogjuk ezt. 18
4.2. Laplace operátor Motiváció Ha sima egy változós függvényt vizsgálunk, akkor az els derivált mindig a növekédés nagyságát mondja meg. A második derivált viszont a változás sebességét. Hasonló a helyzet kétváltozós esetben is. Tekintsünk egy rámpa típusú élt. Ha a második deriváltját vizsgáljuk, akkor a (4.5) táblázatban láthatjuk, hogy valamilyen élkezdetnek, illetve végnek felel meg. Tehát ezzel a módszerrel is tudunk élt keresni. Mikor a gradienst vizsgáltuk, akkor vastag élt kaptunk outputként. Ezzel szemben mikor a második deriváltat nézzük (most még nem tudjuk, hogy kétváltozóban ez minek felel meg), két helyen detektálhatunk élt, cserébe ezek vékonyabbak lesznek. Nem cél összehasonlítani, hogy melyik eljárás jobb, mert mindig az adott feldattól függ, melyiket érdemesebb használni. Pl.ha egy orvosi m szert szeretnénk detektálni, akkor bizonyára vékony élekre lesz szükségünk, szemben azzal, mikor egy autócég egy alkatrészt szeretne detektálni, ott nem szükséges, hogy "nom" legyen a detektált él, ebben az esetben akár nagyobb hiba is megengedhet. A két módszernél azonban az a kevert eset jobb, amikor a vastag él keletkezése után kiszámoljuk a Laplacet, és csak azokat a pontokat tartjuk meg, ahol a Laplace értéke kicsi. (a) (b) (c) (d) 4.5. táblázat. (a) Rámpa típusú "függvény", (b) Els deriváltja, (c) Második deriváltja, (d) f f A második deriváltat élesítésre is szokták használni. Ugyanis ha vesszük az f f -t a fenti példában, akkor a (4.5)-ban láthatót kapjuk, ami sokkal élesebb változást mutat az eredetinél, sokkal határozottabb, és a szemünk ezt jobban észreveszi. Orvosi területen gyakori ennek a használata, ugyanis ezzel az eljárással sokkal pontosabb eredményhez juthatnak, ld.(4.6). Nézzük meg, hogy a második derivált minek felel meg több változóban. 4.2.1. Deníció. Legyen D R 2, X : D R 2 egy sima vektormez, p X(p) = = (X 1 (p), X 2 (p)). Ekkor divx(p) = X 1(p) + X 2(p) x dy kifejezést a vektormez divergenciájának nevezzük. 19
(a) Eredeti kép (b) Élesített kép 4.6. táblázat. Laplace-val való élesítés 4.2.2. Deníció. div(gradf) = div kifejezést a függvény Laplace-ának hívjuk. ( f x, f ) = 2 f dy x + 2 f 2 dy = xxf + 2 yy f = f Ha veszünk egy "szép" tartományt jelen esetben ez kis téglákat jelent és azon vizsgáljuk a gradiens vektormez t, akkor ez mint egy vektormez tekinthet egy gáz, vagy folyadék áramlását leíró pillanatnyi sebesség vektormez nek. Ha ez a vektormez lokálisan majdnem konstans, azaz nem nagyon változik meg, akkor az áramlás egyenletes, nem nyomódik össze a gáz, azaz egy nagyon piciny téglalapba nagyjából ugyanannyi gáz áramlik be és ki az adott pillanatban. Tehát ezen a téglán a gáz s r sége nem változik. Ezzel szemben, ha X vektormez, egyre nagyobb, vagy egyre kisebb, az azt jelenti, hogy sokkal több gáz áramlik be, mint ki, vagy fordítva. 4.3. ábra. "gáz" áramlása téglákon 20
De mi történik egy él mentén? Ha a rámpa élnek nézzük a keresztmetszetét, akkor azon jól láthatjuk, hogy hogyan változik a vektormez nk értéke, azaz a "gáz" áramlása. Észrevehet, hogy csak az él két szélén történik éles változás. 4.4. ábra. Rámpa él keresztmetszete Az ötlet az az, hogy ez a változás pont az, amit keresünk, hisz megmondja, mennyi gáz áramlik be, illetve ki. Azaz az intenzitásváltás "gyorsaságát" írja le. Elég lesz nekünk kis tartományon vizsgálni ezeket a változásokat, ugyanis, ha túl nagy tartományt vennénk, esetleg nem észelelnénk változást. Hogyan lehet mindezt kiszámolni? Vegyünk egy Ω R 2 tartományt, amik nálunk csak [a 1, a 2 ] [b 1, b 2 ] alakúak lesznek. Amit vizsgálnunk kell, az a Ω határ mentén, hogy mennyi gáz lép ki, illetve be Ωba. Ez adja a s r ség változását. Egy határon lév gázrészecskére az X vektormez nek a határra mer leges komponense mondja meg, hogy milyen sebességel lép ki vagy be a gázrészecske. A határral párhuzamos komponense nem ad érdemi összetev t, mert nem járul hozzá a ki, vagy belépéshez. Azaz a határ p pontjában a kiáramlás sebességét az X p,n (p) =< X(p), n(p) > n(p) adja meg, ahol n(p) az Ω tartomány p határpontjában a küls normális egységvektor. Ha< X(p), n(p) > kifejezés pozitív, akkor kiáramlik a gáz, ellenkez esetben meg beáramlik. Azaz a pillanatnyi változást a < X(p), n(p) > ds Ω integrál írja le, ahol ds a görbementén az ívhossz szerinti integrálnak felel meg. Ez csak annyit jelent, hogy egyenletes sebességgel haladunk. Formálisan a következ képpen írható 21
le: Ω a2 < X(p), n(p) > ds = < X(x, b 1 ), (0, 1) > dx + < X(a 2, y), (1,0) > dy a 1 b 1 a1 b1 < X(x, b 2 ), (0,1) > dx < X(a 1 y), ( 1,0) > dy a 2 b 2 = a2 = a2 a 1 X 2 (x, b 1 )dx + a1 a 2 X 2 (x, b 2 )dx a 1 X 2 (x, b 2 )dx X 2 (x, b 1 )dx + b2 b 1 b1 b 2 b2 b 1 b2 X 1 (a 2, y)dy X 1 (a 1, y)dy X 1 (a 2, y)dy X 1 (a 1, y)dy X 2 (x, b 2 ) X 2 (x, b 1 ) = X 1 (a 2, y) X 1 (a 1, y) = b2 b 1 y X 2 (x, y)dy (4.4) a2 a 1 x X 1 (x, y)dx (4.5) Ha a (4.4) egyenletet integráljuk x szerint a 1, a 2 között és a (4.5) egyenletet y szerint b 1, b 2 között, akkor a bal oldalak épp a korábbi integrált adják, míg a jobb oldal az alábbi alakú lesz: a2 b2 a 1 b 1 1 X 1 (x, y) + 2 X 2 (x, y)dydx (4.6) De tudjuk, hogy X = gradf = ( x f, y f) Ezt behelyettesítve a fenti egyenletbe kapjuk az egyenletet. De amib l adódik: Ω a2 b2 a 1 b 1 xx f + yy fdydx xx f + yy f = f < gradf(p), n(p) > ds = Ω div(gradf)dxdy = Ω fdµ Megjegyezzük, hogy csak speciális alakú Ω-ra csináltuk, de általános Ω tartományra is igaz. Ha Ω tartomány terület Ω egyenl, és pici tartományokat veszünk, akkor az ezeken vett integrálok egymáshoz viszonyított relatív nagysága mondja meg, hogy hol nagy vagy kicsi a változás, ezért elég az Ω f Ω 22
kifejezést vizsgálni, de ha f sima függvény, akkor f Ω Ω p f(p) Ω, ahol Ω p azt jelenti, hogy Ω tartomány egyre kisebb és p-re húzódik rá. Ha f(p) 0, akkor p körül lényegében nem változik a gradiens hossza. Ha f(p) nagyon nagy, akkor nagy a gradiens változása, és ez kell nekünk. Korábban láttuk, hogy a gradienst hogyan lehet diszkrét esetben közelíteni. Lássuk most hogyan lehet Laplacet közelíteni diszkréten! Hasonlóan, mint ahogy korábban láttuk x f(x, y) = f(x + 1, y) f(x, y) (4.7) egyenlet a jobboldali parciális deriváltat jelzi x irányban, míg a x f(x 1, y) = f(x, y) f(x 1, y) (4.8) egyenlet a baloldali parciális deriváltat x irányban. A x x f(x 1, y) = f(x, y) f(x 1, y) = f(x, y) f(x, y) (f(x, y) f(x 1, y)) = f(x + 1, y) 2f(x, y) + f(x 1, y). egyenlet adja meg a Laplace közelítését. A fenti egyenletb l különböz Laplace kernelt kaphatunk. Ld.(5.2) táblázat. 4.3. Canny éldetektálás John F.Canny nevéhez f z dik (1986). Ez az algoritmus élkeresésre alkalmas, a mai napig elterjedt ennek a használata, ugyanis elég jó erdeményeket ad outputként. Cannynak több elvárása volt az algoritmussal szemben: El ször is elvárta, hogy jól legyen detektálva, azaz maximalizálni kellene azokat az élpontokat, amik egy "valódi" élhez tartoznak, és persze ekkor a többi élpont minimalizálva legyen. Valódi alatt azt értjük, hogy nem hiba által keletkezett/kapott él. Továbbá fontosnak tartotta, hogy a detektált él közel legyen az eredeti képen látható élhez. Majd legvégül szem el tt tartotta, hogy egy eredeti él a képen ne forduljon el több, mint egy alkalommal a detektálás során. Ez az algoritmus lépcs s éltípusokra m ködik, és 5 f lépésb l áll, melynek mindegyik lépése külön "algoritmusból" áll. De az egyes lépések, csak egymás után kötött sorrendben valósulhatnak meg. Lássuk, hogy az egyes lépésekben hogyan m ködnek az algoritmusok. 23
1. Smoothing: Ebben a lépésben zajsz rés történik ugyanúgy, mint korábban láttuk. Itt a Gauss-sz r t használják erre a célra. A simítás onnan jön, hogy ezzel "elsimítjuk" a zajt. 2. Finding gradients: Hasonlóan az eddigiekhez élpont keresése a cél ebben a lépésben. Erre a Sobel operátort használják. Itt is mindig a nagy gradienseket tartjuk szem el tt, majd látni fogjuk, hogy a többit el fogjuk vetni. 3. Non-maximum suppression: Itt a nem maximum élpontok elvetésre kerülnek, innen az elnevezés. Azaz, mindig az lesz a cél, hogy lokális maximumot találjunk. Ez viszont több lépesen keresztül megy végbe. El ször is, amikor a gradiens vektort kiszámoljuk, nagyon sok irányba mutathat, emiatt mindig a legközelebbi 45 -ra kerekítjük, ugyanis ezek felelnek meg a 8 szomszédnak (8 f iránynak). Majd a következ lépésben minden egyes pixelt összehasonlítunk a közelített gradiens irányában lév 2 szomszédjával. Ha pl. a gradiens felfelé mutat, akkor a felette, illetve az alatta lév vel hasonlítjuk. Azaz a pozitív, illetve negatív irányokkal. Ha a vizsgált pixelnek a grandiens értéke nagyobb, mint a szomszédosoké, akkor megtartjuk, különben elvetjük. 4. Double thresholding: Eddig mindig egyetlen egy küszöbértéket választottunk, de láttuk, hogy ezzel nagyon különböz eredményekhez juthatunk. Emiatt a "jobb" eredmény elérése érdekében ez az algoritmus két küszöböt választ, egy alsó, illetve egy fels t. Minden olyan élpontot, ami az alsó küszöb alatt van elhagyjuk, és mind, ami e felett van megtartjuk, és elnevezzük "strong"-nak. Ami viszont a kett között van, azt "weak"-nak hívjuk. A következ lépésben derül ki, hogy hogyan történik az éldetektálás. 5. Edge tracking by hysteresis: A "stronggal" jelölt pontok biztosan élpontnak felelnek meg, tehát azokat megtartjuk. A "weak" pontok kapcsolatát a stronggal egy gráal lehet szemléltetni. Azokat a weak pontokat tartjuk meg, melyek egy összegfügg ségi komponenst alkotnak valamelyik stornggal, azaz egy strong minden él szomszédját, azok él szomszédjait és így tovább, mind megtartjuk. 24
(a) Eredeti fehér-fekete kép (b) Canny éldetektálás (c) Zajos (d) Canny éldetektálás 25
5. fejezet Hough-módszer Ez az algoritmus el re megadott alakzatok detektálására jó. Láttuk, hogy Canny algoritmus is detektál élt, viszont ott tetsz leges módszerrel (pl.spline-nal) összeköti a kapott élpontokat. Itt viszont kötött "szabály" alapján történik mindez. Az alábbiakban bemutatjuk a Hough-módszert néhány speciális és az általános esetre. 5.1. Egyenes detektálás Adott a képsíkon néhány egyenes, és ezeket szeretnénk detektálni. Els lépésben létrehozunk egy diszkrét paraméterteret, aminek a koordinátái r, θ lesznek, ahol θ [0, 360 ] a szöget és r [0, R] az adott sugarat jelöli. Ez tulajdonképpen egy adattömb, amit természetesen valamilyen lépésközök mellett diszkréten értelmezünk majd. Minden egyes celláját kezdetben 0-ra inicializáljuk. Tudjuk, hogy két pont a képsíkon meghatároz egy egyenest, ez leírható a következ képpen: e : cosθ 0 x + sinθ 0 y = r 0 Ez az egyenes az (r 0, θ 0 ) pontnak felel meg a paramétertéren. Ha adott a fényképünkön detektált élpontok halmaza P i, akkor minden egyes (P i, P j ) párra kiszámoljuk a hozzájuk tartozó egyenes (r ij, θ ij ) paraméterét. Majd megnöveljük a paramétertérben ennek a cellának az értékét +1-vel. Minden pontpárra elvégezzük ezt a lépést. Így a paramétertéren azok a cellák lesznek "jók", amiben a "legmagasabb" érték szerepel. Ne feledjük el, hogy a paramétertérben minden pont egy egyenest reprezentál. Ezek után választani kell majd egy levágási paramétert, hogy csak azokat a cellákat tartsuk meg a paramétertérben, ahol a szerepl szám legalább akkora, mint a levágási küszöb. Tehát például, ha azt szeretnénk, hogy n pont legyen egy egyenesen, akkor ( n 2) kell, hogy legyen a levágási küszöb. Természetesen megengedhetünk valamekkora pontatlanságot is, azaz ha a paramétertér (r 0, θ 0 ) pont valamilyen környezetében a cellák összértéke legalább ( n 2), akkor ez alapján is mondhatjuk, hogy találtunk egy jó egyenest, mivel a kerekítések és pontatlanságok miatt lehet, hogy két pont egy kicsit más paramétert ad, mint kellene. 26
5.2. Kör detektálás Adott a fénykép, amin adottak a P i élpontok (gradiens módszerrel meghatároztuk korábban). A fényképen egy adott sugarú kört szeretnék detektálni. El ször is létre kell hoznunk egy paraméterteret, aminek a nagysága azonos a fénykép nagyságával, lényegében megismételjük a fénykép táblázatát, csak most minden cella értéke kezdetben 0. Ez a paramétertér "ugyanaz", mint a fénykép, így pontjait egymásnak megfeleltethetjük. Vegyük észre, hogy P i k(q, r) Q k(p i, r), (5.1) ahol P i az élpontot jelöli a képsíkon, k(q, r) pedig a Q középpontú r sugarú kört, a k(p i, r) pedig a P i körüli r sugarú kört jelöli. A (5.1) felírás miatt minden egyes P i pont körül veszünk egy r sugarú kört a paramétertéren. Ennek a körnek a pixeleit +1-vel megnöveljük. Ezt azért tesszük, mert ezek azok a középpontok, melyekhez tartozó r sugarú körök átmennek a P i ponton. Minden P i élpontra lefutattjuk ezt. Így a paramétertér egy adattömbb l fog állni. Azok a pixelek, amik kell jelölést kaptak (sok +1-est) azt jelenti, hogy kell en sok k(p i, r) körön rajta van, azaz ha egy cella n jelölést kapott, akkor ezzel a cellával mint középponttal rajzolt körön pontosan n db élpont lesz rajta. Ha tehát a levágási küszöböt 10-nek választjuk, akkor ez azt jelzi, hogy azok a cellák, amelyeken legalább 10 szerepel, olyan r sugarú körök középpontjai, amelyeken 10 élpont van rajta. Ha a sugár nem adott, akkor "alkalmasan kicsiny" lépésközzel veszünk r i sugarakat és az el z algoritmust mindegyik r i -re lefutattjuk. Ezzel a módszerrel az a gond, hogy nagyon sok potenciális kör jöhet szóba. Ami a gyakorlat szempontjából nem túl optimális, emiatt egy jobb algoritmust kellene találnunk. Erre jó a "nomabb" Hough-módszer. 5.3. "Finomabb" Hough-módszer Adott a fénykép az élpontokkal, ahogyan az el z módszernél is szerepel, most viszont a P i élpontokon kívül a detektált élre mer leges vektor (gradiens vektor) is adott. Ennek most csak a polárkoordinátákban felírt szöge kell az algoritmushoz. Jelölje ezt θ i. Itt is létrehozunk egy paméterteret, ugyanakkorát, mint a fénykép. Minden egyes élpontnál a fényképen ismerjük a gradiens irányát. Ez nagyon nagy el nyt jelent, hisz ezzel csökenthetjük a potencális körök középpontjainak a számát. Kezdetben itt is 0-ra inicializáljuk a celláit. Ezen a paramétertéren csak a P i ± r (cosθ i, sinθ i ) celláknak növeljük az értékeit, +1-vel minden egyes lépésben, hiszen csak a gradiens irányában vagy azzal ellentétesen lehet annak a körnek a középpontja, mely átmegy a P i ponton és a hátra mer leges a gradiensre. Így tehát minden egyes lépésben csak 2 pixelnek növeljük az értékét, szemben az el z vel, ahol nagyon sok pont kapott jelölést. A futásid miatt ez az algoritmus optimálisabb az el z nél és kevesebb "álkört" is eredményez a végén. 27
5.4. Általános alakzat detektálás Adott egy lista, amiben az élpontok és ezekhez tartozó gradiens szöge van eltárolva. Ezek az adott fénykép adatait írják le. Létre kell hoznunk egy segédtáblázatot. Ez az általunk keresett alakzat adatait tárolja el. El ször fel kell osztanunk az alakzat határvonalát elég s r n, így kapunk E i élpontokat. Minden egyes élpontnak van egy normálvektora, ami mer leges a határvonalra. Ennek a szögét (θ) tároljuk el a táblázat els oszlopában. Továbbá nyilván kell tartanunk az alakzatnak egy referencia pontját, ami nem feltétlenül a súlypontot jelenti, legyen ez C. El kell még tárolni a keresett alakzat minden E i határpontjára az E i C vektort, amit praktikus lesz a polár koordinátáival eltárolni r i, φ i alakban. Ezek a táblázat második és harmadik oszlopai. Továbbá létre kell hozni a fénykép méretével azonos nagyságú paraméterteret. Szokás szerint celláit 0-ra állítjuk be. Ha a gradiens irány egy P j élpontban párhuzamos valamelyik határpont pl. E i normálvektorával, azaz a gradiens, és az élpontnál tárolt szögek 0, vagy 180 fokkal térnek csak el, akkor az általunk keresett alakzatot a fényképre helyezve (forgatás nélkül) az E i hatápontjánál fogva a P j élponthoz tolva a fényképen szerepl él meg fog lokálisan egyezni az alakzat élével. Ekkor a P j + E i C pontba kerül, a megfelel módon eltolt alakzatunk referencia pontja és a paramétertér ezen cellájának értéket megnöveljük +1-vel. Ezzel jelezzük, hogy ha ide toljuk el az alakzatunkat (elforgatás nélkül a referencia pontjánál fogva), akkor 1 élponton át fog menni és ott az él épp mer leges lesz a gradiensre. Persze, ha n áll az algoritmus legvégén a cellában, akkor pontosan n élpont lesz az eltolt határvonalán és ezeken pont jó irányban halad át a határvonal, arra, amerre a fényképen lév él is áthalad. Természetesen a küszöbölés hasonlóan történik, mint korábban. Ha az alakzat nagysága változhat, akkor az új nagyságra megint le kell futtatni az algoritmust, de a segédtáblázatban csak az E i C vektor hossza változik a nagyítással azonos mértékben, minden más változatlan marad. Ha elforgatjuk az alakzatunkat, akkor pedig minden szög értékéhez hozzá kell adni az elforgatás szögét a segédtáblázatban. Innen látszik, hogy csak egyszer kell "igazán dolgozni" a segédtáblázat legyártásával, ha megfelel alakban tároljuk az adatainkat. Általános alakzat detektálás 28
Összefoglaló Célunk az volt, hogy éleket, alakzatokat ismerjünk fel egy fényképen. El ször a folytonos esetet néztük meg, hogy hogyan modellezhet a fényép, valamint a fényképen egy alakzat élét matematikailag hogy tudjuk felismerni. Láttuk, hogy ebben az esetben egy alakzat éle éppen egy szinthalmaznak felelt meg. Egy él általában a nagy intenzitásváltásnál keleltkezik, ami a mi esetünkben épp a nagy gradines hosszal volt ekvivalens. Ez minél nagyobb volt, annal élesebben láttuk a színváltást. Ezek után tértünk rá arra az esetre mikor egy számítógépt l vártuk el, hogy felismerje hol van él a fényképen. Ehhez már diszkrét esetben kellett alkalmaznunk a korábbi meggyeléseinket. Az éldetektálás ebben az esetben két módszerrel történt. El ször mikor a gradienssel számoltunk majd a második alakalommal mikor a Laplace-val. Ezeket próbáltuk diszkretizálni. Végeredményként élpontokat adtak. Miután az élpontok detekálása megtörtént, bemutattunk két módszert az élpontok"összekötésere", hogy az alakzatot megkaphassuk. Az egyik a Canny a másik a Hough-módszer volt. Sose volt célunk összehasonlítani az egyes eljárásokat, hisz mindig az adott feldattól függöt, hogy melyiket érdemesebb használni. Mi csak fekete-fehér képekr l beszéltünk, de kihasználva a színek közötti különbségeket (melyek fekete-fehérré konvertálva esetleg elt nnek) az el z módszerek javíthatóak színes képek esetén. A kép feldolgozás valamint az alakzat felismerés csupán nagyon kis területe ennek a tengernyi nagy tudománynak. Ez a tudomány folyamatosan fejl dik, és nagyon fontos területeken is egyre jobban terjed el. Nemrégiben a facebook csapata egy arc-felismer eljárást készített annak érdekében, hogy könnyebben lehessen az egyes embereket beazonosítani, ezzel is megkönnyítve mások munkáját, hisz ezzel a módszerrel biztonságosabbá tudták tenni az egyes személyek adatait. 29
Függelék 1 0 +1 +1 +1 +1 1 0 +1 0 0 0 1 0 +1 1 1 1 (a) 1 0 +1 +1 +2 +1 2 0 +2 0 0 0 1 0 +1 1-2 1 (b) 5.1. táblázat. (a) Prewitt x ill. y szerinti deriváltja, (b) Sobel x ill. y szerinti deriváltja 0 0 0 0 1 0 0 1 0 1 2 1 + 0 2 0 = 1 4 1 0 0 0 0 1 0 0 1 0 (a) (b) (c) 0 0 1 1 0 0 1 0 1 0 2 0 + 0 2 0 = 0 4 0 1 0 0 0 0 1 1 0 1 (d) (e) (f) 0 1 0 1 0 1 1 1 1 1 4 1 + 0 4 0 = 1 8 1 0 1 0 1 0 1 1 1 1 (g) (h) (i) 5.2. táblázat. (a) x x f, (b) y y f, (c) f,(d) x x f,(e) y y f, (f) f, (g) x x f,(h) y y f, (i) f 30
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 (a) (b) 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 0 0 0 0 3 3 3 3 +3 +3 +3 +3 0 0 0 0 0 0 0 0 0 0 0 0 (c) (d) 0 0 0 0 0 0 0 0 1/3 1/3 1/3 1/3 1/3 1/3 1/3 1/3 1/3 1/3 1/3 1/3 2/3 2/3 2/3 2/3 1/3 1/3 1/3 1/3 1 1 1 1 0 0 0 0 1 1 1 1 (e) (f) 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 0 0 0 0 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 (g) (h) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 (i) (j) 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 0 0 0 0 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (k) 5.3. táblázat. (a) Karc, (b) tartomány, (c) Prewitt karcra, (d) Prewitt tarományra, (e) átlag karcra, (f) átlag tartományra, (g) átlag+prewitt karcra, (h) átlag+prewitt tartományra, (i) medián karcra, (j) medián tartományra, (k) medián+prewitt karcra, (l) medián+prewitt tartományra (l) 31
Irodalomjegyzék [1] Canny Edge Detection (http://www.cse.iitd.ernet.in/ pkalra/col783/canny.pdf) [2] Dana H. Ballard Christopher M.Brown, Computer Vision [3] Laczkovich Miklós T. Sós Vera, Valós analízis I-II [4] Leonard G.C.Hamey, A Functional Approach to Border Handling in Image Processing (http://web.science.mq.edu.au/ len/preprint/hamey-dicta2015-functionalborder.pdf) [5] Mubarak Saha, Fundamentals of Computer Vision (http://crcv.ucf.edu /gauss /BOOK.PDF) [6] Richard E. Woods, Richard E. Woods Rafael C. Gonzalez, Digital Image Processing:2nd (Second) edition [7] Richard Szeliski, Computer Vision: Algorithms and Applications, Electronic Draft 2010 (http://szeliski.org/book/). [8] Verhoczki László, Klasszikus Dierenciálgeometria, ELTE, TTK, egyetemi jegyzet. 32