AHTI OKSANEN SIFT-MENETELMÄ PIIRTEENSOVITUKSESSA Kandidaatintyö Tarkastaja: lehtori Heikki Huttunen Jätetty tarkastettavaksi 8. toukokuuta 2011
ii TIIVISTELMÄ TAMPEREEN TEKNILLINEN YLIOPISTO Signaalinkäsittelyn ja tietoliikennetekniikan koulutusohjelma OKSANEN, AHTI: SIFT-menetelmä piirteensovituksessa Kandidaatintyö, 27 sivua Toukokuu 2011 Pääaine: Signaalinkäsittely Tarkastaja: lehtori Heikki Huttunen Avainsanat: piirteentunnistus, piirteensovitus, SIFT, skaala-avaruus Tässä kandidaatintyössä tarkastellaan useissa konenäköjärjestelmissä käytettyjen piirteentunnistuksen sekä -sovituksen yleisimpiä ominaisuuksia sekä ongelmakohtia. Lisäksi työssä keskitytään tarkastelemaan David Lowen kehittämän SIFTpiirteentunnistusalgoritmin toimintaa sekä teorian että käytännön näkökulmasta. Tietokoneiden laskentatehon jatkuvasti kasvaessa piirteentunnistuksen sovelluskohteita syntyy koko ajan lisää, ja uusia tehokkaampia sekä luotettavampia algoritmeja pyritään jatkuvasti kehittämään täyttämään sovelluksien tarpeet. Työn tarkoituksena on selvittää SIFT-menetelmän soveltuvuus piirteen- sekä kuvansovituksessa testaamalla algoritmia niin luotettavuuden kuin tehokkuudenkin kannalta. Lisäksi pyritään arvioimaan algoritmin kohdalle asetettuja väitteitä SIFT- piirteiden riippumattomuudesta sekä häiriönsietokyvystä.
iii ALKUSANAT Tämä kandidaatintyö on kirjoitettu osana Tampereen teknillisen yliopiston signaalinkäsittelyn laitoksen kandidaatintyöseminaaria keväällä 2011. Haluaisin kiittää työni ohjaajana ja tarkastajana toiminutta lehtori Heikki Huttusta, joka avusti työn etenemisessä esittämällä rakentavia kommentteja ja ohjaamalla työn kulkua oikeaan suuntaan. Lisäksi kiitän kaikkia niitä läheisiä ihmisiä, jotka ymmärsivät sen tosiasian, että joskus kandidaatintyön kirjoittaminen nousee prioriteettilistalla sosiaalisen elämän edelle. Tampereella, 8. toukokuuta 2011 Ahti Oksanen
iv SISÄLLYS 1 Johdanto... 1 2 Piirteensovitus... 3 3 SIFT... 6 3.1 SIFT yleisesti... 6 3.2 Skaala-avaruuden ääriarvot... 7 3.2.1 Skaala... 7 3.2.2 Skaalariippumattomuus... 8 3.2.3 Skaala-avaruuden muodostaminen... 8 3.2.4 Gaussin erotuskuvien laskeminen... 10 3.2.5 Ääriarvojen etsiminen... 11 3.3 Avainpisteiden päättäminen... 11 3.3.1 Avainpiste-ehdokkaiden paikallistaminen... 11 3.3.2 Reunapisteiden hylkääminen... 13 3.4 Avainpisteiden asennon määrittäminen... 14 3.5 Piirrevektorin luominen... 16 4 SIFT-menetelmän testaus... 18 4.1 Avainpisteiden määrä... 18 4.2 Suorituskyky... 19 4.3 Piirteen- / kuvansovitus... 20 4.3.1 Kohinasietoisuus... 21 4.3.2 Kiertoriippumattomuus... 22 4.3.3 Skaalariippumattomuus... 23 5 Johtopäätökset... 25 Lähteet... 26
v TERMIT JA SYMBOLIT FPS MATLAB Pikseli RGB SIFT Frames per second, kehysnopeus näytölle sekunnissa piirrettyjen kuvien määrä Numeeriseen laskentaan suunniteltu ohjelmisto ja ohjelmointikieli (Matrix Laboratory) Bittikarttagrafiikassa esiintyvä kuvan pienin osa, kuvapiste. Merkitään usein lyhenteellä px Väriavaruus, jossa eri värejä muodostetaan sekoittamalla keskenään punaista (red), vihreää (green) ja sinistä (blue) Scale-invariant feature transform, piirteentunnistusalgoritmi Funktion f osittaisderivaatta muuttujan x i suhteen Det(H) Tr (H) R Matriisin H determinantti Matriisin H jälki Reaalilukujen joukko x Muuttujan x itseisarvo x Vektorin x euklidinen normi σ 1 Todennkäköisyysjakauman keskihajonta, satunnaismuuttujan hajonnan mitta. 2 Skaalan arvo σ² Todennäköisyysjakauman varianssi, vrt. σ Konvoluutio-operaattori
1 1 JOHDANTO Piirteensovitus (feature matching) ei ole suomen kieleen vakiintunut termi, mutta se kuvaa parhaiten prosessia, jossa kahdesta eri kuvasta, piirteentunnistuksen [1, s. 183 188] avulla, tunnistettuja piirteitä, eli kuvasisältöä parhaiten kuvaavia ominaisuuksia, vertaillaan ja sovitetaan toisiinsa, tarkoituksena löytää vastaavuuksia [2, s. 19]. Yksi yleisimmistä piirteensovituksen sovelluskohteista on konenäköjärjestelmissä usein käytetty piirteenseuranta (feature tracking), joka tarkoittaa seurattavasta kohteesta irrotettujen piirteiden paikan määrittämistä tietyillä ajanhetkillä [1, s. 208]. Piirteenseuranta voidaankin usein mieltää tietokoneen näkökulmaksi liikkuvan kohteen seurannasta sillä ihmisen käsitys kohteen seuraamisesta perustuu objektiin k o- konaisuutena eikä niinkään siinä esiintyviin yksittäisiin ominaisuuksiin tai piirteisiin [3, s. 3]. Yleisemmällä tasolla voidaankin puhua objektinseurannasta (object tracking), eli liikkuvan objektin paikantamisesta. Tietokoneiden laskentatehon jatkuvan kasvun sekä kameroiden laatu- ja hintakehityksen myötä kiinnostus objektin- ja piirteenseurannan sovellusmahdollisuuksia kohtaan on lisääntynyt huimasti. Piirteenseurannan sovelluksia käytetäänkin useilla eri aloilla teollisuudesta lääketieteeseen; esimerkiksi robottiavusteinen kiru r- gia [4, s. 2] sekä lentokoneen navigointi maan pinnanmuotoihin perustuen [5, s. 41] voidaan toteuttaa tietokonenäön ja piirteenseurannan avulla. Tutkimuskohteena piirteenseuranta on ollut jo pitkään yksi haastavista digitaalisen kuvankäsittelyn sovelluksista; useiden eri muuttujien, kuten valaistuksen ja objektin asennon vaihtelu tarkasteluhetkien välillä hankaloittaa seurantaprosessia - käytetyn algoritmin täytyisikin olla häiriönsietokykyinen mahdollisimman monelle muutokselle jotta seurannasta saataisiin luotettavaa ja ennen kaikkea hyödyllistä. Erilaisia lähestymistapoja piirteenseurantaan on yritetty onnistuneestikin, mutta usein ongelmaksi on koitunut menetelmien yksipuolisuus; tietyissä olosuhteissa hyvin toimivia algoritmeja ei pystytä soveltamaan erityyppisissä tilanteissa [6, s. 2]. Tässä kandidaatintyössä syvennytään tutkimaan David Lowen vuonna 1999 julkaisemaa piirteentunnistusalgoritmia SIFT (Scale-invariant feature transform) [2] ja sen soveltuvuutta piirteensovitukseen. Vaikka SIFT onkin jokseenkin uusi piirteentunnistusalgoritmi, se perustuu suureksi osaksi jo kauan käytössä olleisiin menetelmiin, joiden parhaimpia puolia SIFT sulavasti yhdistelee ja soveltaa; mainittakoon esimerkiksi skaala-avaruus [7], Gaussin erotuskuvat ja kulmantunnistus [8], jotka kaikki ovat olleet käytössä jo useita vuosikymmeniä, ja joihin SIFT vankasti pohjautuu. Käytännön osuutena tässä työssä toteutettiin MATLABohjelmiston päälle rakennettu SIFT-algoritmi. Vaikka toteutus toimiikin jokseenkin
luotettavasti piirrejoukkojen sovituksessa, yksittäisten piirteiden sovituksessa esiintyy epävarmuutta; lisäksi MATLAB-koodin tulkattavuudesta johtuen ohjelman suoritusaika jää hyvin korkeaksi. Näistä syistä toteutuksen tarkempi testaaminen jäi pois luvusta 4 (SIFT-menetelmän testaus). Sen sijaan testaus suoritettiin David Lowen alkuperäiselle SIFT-toteutukselle. Seuraavissa luvuissa käydään läpi piirteentunnistuksen ja -sovituksen yleisimpiä ominaisuuksia sekä ongelmakohtia - lisäksi tarkastellaan SIFT-algoritmin yksityiskohtaista toimintaa sekä teorian että käytännön näkökulmasta. 2
2. Piirteentunnistus 3 3 2 PIIRTEENSOVITUS Konenäköjärjestelmän yksi olennaisimmista vaiheista on piirteentunnistus (feature detection), jossa nimensä mukaisesti mittausdatasta pyritään tunnistamaan loppuprosessin kannalta olennainen informaatio, eli mittausdataa parhaiten kuvaavat piirteet [1, s. 183]. Yleisesti mittausdata voi olla esimerkiksi kiihtyvyysanturista saatavaa dataa tai vaikkapa äänisignaalia, mutta tässä työssä mittausdatalla tarkoitetaan digitaalikameran kennolta saatavaa näytteistettyä kuvadataa. Se, mitä olennainen informaatio kuvan tapauksessa tarkoittaa, riippuu täysin sovelluskohteesta. Esimerkiksi liikennemerkkejä tunnistaessa halutaan mahdollisesti löytää kuvasta kaikki tietyn väriset ja muotoiset alueet, kun taas numeroiden luokittelussa keskitytään symmetrisyyden ja massakeskipisteen tarkasteluun. Yleisessä tapauksessa, mihin tässäkin työssä syvennytään, ei voida suoraan sanoa mitkä ovat kuvassa juuri niitä karakteristisia piirteitä, sillä kuva saattaa sisältää monentyyppisiä objekteja joista jokainen on tunnistamisen kannalta yhtä merkittävässä asemassa. Tällöin varmimpia tapoja etsiä piirteitä on etsiä kuvasta esimerkiksi reunoja, kulmia ja yhtenäisiä alueita, joiden avulla voidaan kuvata lähes mikä tahansa objekti [6, s. 5-6]. On tärkeää että piirre on stabiili, eli pysyvä. Pysyvyydellä tarkoitetaan mahdollisuutta löytää piirre samasta kohdasta kuvassa, vaikka kuvausolosuhteet muuttuisivatkin tai kuvaan aiheutuisi häiriötä [9, s. 2]. Epästabiilit piirteet tekevät kuvien vertailusta ja piirteiden luokittelemisesta epäluotettavaa jolloin lopputulos ei usei n- kaan ole haluttu tästä syystä tunnistusalgoritmi voi sisältää vaiheita joissa epästabiileista piirteistä yritetään päästä eroon. SIFTin tapauksessa eräs menetelmä on eliminoida matalakontrastiset piirteet jotka usein aiheutuvat satunnaisesta kuvakohinasta, ja näin ollen ovat epästabiileja [2, s. 11]. Mahdollinen skenaario voisi olla esimerkiksi kuva, jossa vaalean seinäpinnan matalakontrastisesta tekstuurista löydetään tunnistuksen kannalta merkityksettömiä piirteitä, jotka kaiken lisäksi ovat ep ä- stabiileja. Tällöin olisi suotavaa että algoritmi hylkäisi nämä turhat piirteet. Sanotaankin että menetelmä voi olla robusti, eli häiriönsietokykyinen tietyille ominaisuuksille esimerkiksi SIFT on robusti vähäiselle kuvakohinalle sekä pienille valaistuksen muutoksille sovitettavien kuvien välillä [2, s. 4]. Piirre voi olla myös riippumaton (invariant) erilaisista spatiaalisista muutoksista kuten skaalasta, kierrosta ja siirrosta [10, s. 14 15(1)] tällöin kuvassa olevaa objektia voidaan pienentää tai suurentaa, kääntää ja liikuttaa kuvatasossa vapaasti, niin että siitä on edelleen mahdollista tunnistaa samat piirteet kuin alkuperäisessä kuvassa. Riippumattomuus yhdelle tai useammalle tekijälle on tärkeässä roolissa etenkin tunnistettaessa piirteitä videon peräkkäisissä kuvakehyksissä, joiden välillä
2. Piirteentunnistus 4 objektit usein liikkuvat eri tavoin. Jotta objektia olisi mahdollista seurata, täytyy menetelmän osata tunnistaa se eri asennoissa ja paikoissa tämän mahdollistaa piirteiden riippumattomuus. Toisena esimerkkinä mainittakoon panoraamakuvien automaattinen koostaminen, jossa useista vierekkäin otetuista valokuvista yhdistetään laajempia kokonaisuuksia sovittamalla kuvien reunojen piirteitä - tällöin täytyy ottaa huomioon kuvien väliset pienet geometriset muutokset ja vääristymät jotta lopputuloksesta saataisiin realistinen [1, s. 377]. Eri menetelmät ja algoritmit suhtautuvat eri tavoin mainittuihin spatiaalisiin muutoksiin; esimerkiksi SIFT-algoritmi on riippumaton skaalasta, kierrosta sekä siirrosta [2, s. 2], mikä tekee siitä piirteensovituksen kannalta luotettavan ja monipuolisen menetelmän. Ennen piirteentunnistuksen suorittamista voidaan alkuperäinen kuva vielä esikäsitellä parhaan mahdollisen lopputuloksen saavuttamiseksi. Esikäsittelyssä alkuperäinen kuva voidaan muuntaa harmaasävymuotoon ja esimerkiksi esisuodattaa kuva epästabiileja piirteitä aiheuttavan kuvakohinan poistamiseksi [1, s. 89]. Harmaasävymuunnos on kannattavaa tapauksissa joissa piirteet eivät ole väririippuvaisia; 24-bittisen RGB-värikuvan kolmen ulottuvuuden kuvaaminen 8-bittiseksi yhteen ulottuvuuteen keventää lopullista laskentaprosessia huomattavasti, mistä on hyötyä etenkin reaaliaikaisissa sovelluksissa joissa laskenta-aika pitää minimoida. Mahdollisen esikäsittelyn jälkeen käydään kuvan jokainen kuvapiste eli pikseli yksi kerrallaan läpi. Kuvapisteille ja tarvittaessa niiden naapurustoille suoritetaan vuorotellen haluttuja matemaattisia tarkasteluja, joiden perusteella tunnistetaan piirteet, eli päätetään mitkä kuvapisteet ovat sopivia piirteiksi. Kuvapisteelle voidaan laskea esimerkiksi x- ja y-suuntainen gradientti (kuva 2.1), jonka perusteella tiedetään sijaitseeko piste reunalla [1, s. 211] muita keinoja ovat esimerkiksi kuvapisteen ääriarvotarkastelu ja Hessen matriisin laskeminen etsittäessä kulmapisteitä [1, s. 189]. Kuva 2.1. Vasemmalla alkuperäinen testikuva, keskellä siitä laskettu x-suuntainen gradienttikuva, ja oikealla y-suuntainen gradienttikuva. Kuvassa 2.1. on esitetty testikuvan kaikille kuvapisteille laskettujen x- ja y- suuntaisten gradienttien tuloskuvat. Gradienttikuvista havaitaan selvästi alkuperäisessä kuvassa olevien objektien reunat sekä yhtenäiset alueet, joiden avulla objektit voidaan täysin tunnistaa.
2. Piirteentunnistus 5 5 Digitaalisten kameroiden kennojen koon kasvaessa myös niiden tuottamien kuvien pikselimäärä kasvaa kuluttajaluokan digitaalikameroista saatavissa kuvissa saattaakin nykyään olla jopa yli 10 miljoonaa kuvapistettä. Näin ollen kuvien keskinäinen vertailu kuvapiste kerrallaan olisi laskennallisesti hyvin raskasta otettaessa huomioon erilaisten kiertojen, siirtojen sekä skaalojen variaatiot. Lisäksi kuvien v ä- lillä vaihtelevat häiriötekijät, kuten valaistuksen muutokset sekä kohina tekisivät vertailusta epävarmaa ja käytännössä mahdotonta. Piirteenirrotuksen (feature extraction) avulla voidaan kuvasta tunnistetut piirteet esittää alkuperäiseen mittausd a- taan verrattuna matalampiulotteisten piirrevektoreiden avulla [1, s. 184]. Jokainen piirrevektori yksilöi kuvaamansa piirteen ja mahdollisesti sen naapuruston niihin liittyvien ominaisuuksien perusteella, jättäen kaiken epäoleellisen informaation huomiotta. Tällöin piirteitä vertaillessa ja sovittaessa keskitytään vain olennaisen, loppusovelluksen kannalta tärkeän datan käsittelyyn, jolloin laskentatehokkuus saadaan maksimoitua. Kun piirrevektorit on luotu, päästään piirteitä vertailemaan ja sovittamaan eri kuvien välillä. Tätä prosessia kutsutaan piirteensovitukseksi. Yksittäisiä piirteitä voidaan verrata helposti piirrevektoreiden samankaltaisuuden perusteella; yleinen keino on laskea kahden piirrevektorin etäisyys esimerkiksi euklidista metriikkaa käyttäen menetelmää kutsutaan lähimmän naapurin menetelmäksi (nearest neighbor). Lähimmän naapurin menetelmässä piirrevektoria verrataan kaikkiin vertailukuvasta löytyneiden piirteiden piirrevektoreihin, tarkoituksena löytää paras vasta a- vuus, eli niin sanottu lähin naapuri. [1, s. 200 207]. Löydettyjen vastaavuuksien joukkoa voidaan rajoittaa esimerkiksi etäisyyden perusteella, jos tiedetään että piirre ei voi liikkua kuvien välillä tiettyä matkaa enempää näin laskenta-aluetta voidaan pienentää ja samalla nopeuttaa koko prosessia. Usein kuitenkin halutaan sovittaa kokonaisia kuvia tai kuvissa olevia objekt e- ja, eli piirrejoukkoja. Puhutaan objektinsovituksesta tai kuvansovituksesta. Eräs toimiva tapa objektinsovitukseen on soveltaa lähimmän naapurin menetelmää sekä klusterointia [10, s. 25(10)]. Sovitettavan objektin alueella sijaitseville kaikille piirteille etsitään lähimmät naapurit vertailukuvasta; voi olla että useat piirteet tunnist u- vat väärin ja näin hajaantuvat eri puolille kuvaa. Todennäköistä kuitenkin on, että suuri osa piirteistä täsmää, ja näin ollen kasaantuu vertailukuvassa objektin alueelle. Tässä vaiheessa otetaan käyttöön klusterointi, jonka tarkoituksena on löytää hajaantuneesta piirrejoukosta mahdollisimman yhtenäisiä ryhmiä eli klustereita. Klust e- roinnin avulla oikein tunnistuneiden piirteiden muodostava tiivis rypäs pystytään paikantamaan ja näin ollen objektit saadaan sovitettua [2, 19 21]. Tunnettuja klusterointimenetelmiä on useita erilaisia mainittakoon esimerkiksi k-means [10, s. 13(10)] sekä Hough muunnos [11, s. 25].
6 3 SIFT 3.1 SIFT yleisesti SIFT (scale-invariant feature transform) on David Lowen vuonna 1999 julkaisema piirteentunnistusalgoritmi stabiilien piirteiden löytämiseksi kuvadatasta. Algoritmin avulla tunnistetut piirteet, joita kutsutaan myös avainpisteiksi (keypoint), ovat riippumattomia skaalasta, kierrosta sekä sijainnista kuvassa. Lisäksi ne ovat robusteja vähäisille valaistuksen muutoksille, kuvakohinalle sekä pienille geometrisille vääristymille [2, s. 2]; menetelmä onkin varsin mainio apuväline videokuvassa olevien objektien seurannassa. Muita SIFTin sovelluskohteita ovat panoraamakuvien koostamisessa käytetty kuvien yhdistäminen (image stitching), sekä eleiden tunnistus esimerkiksi ihmisen liikkeitä analysoitaessa. SIFT-avainpisteet ovat pääosin kuvassa sijaitsevia lokaaleja ääriarvoja, jotka ovat sijoittuneet reunojen risteyskohtiin ja kulmiin, kuten kuvasta 3.1 voidaan havaita. Tyypillisestä 512 x 512 kuvapisteen kokoisesta kuvasta löydetään yleensä noin 2000 stabiilia avainpistettä, riippuen tietenkin kuvan sisällöstä. Voidaan kuitenkin sanoa että mitä suurempi määrä avainpisteitä löydetään, sitä luotettavampaa ja ta r- kempaa tunnistuksesta saadaan. Toisaalta piirreavaruuden ollessa kovin suuri saattaa piirteiden vertailu kuluttaa paljon laskenta-aikaa ja -tehoa, jolloin varsinkin reaaliaikaisissa sovelluksissa kohdataan ongelmia. Löytyvien piirteiden lukumäärää on tarvittaessa kuitenkin mahdollista vähentää tai lisätä tiettyjä parametreja muuttamalla; tällä tavoin algoritmi saadaan mukautettua kuhunkin sovellukseen yksilöllisesti [2] Kuva 3.1. SIFT-avainpisteet sijoittuvat pääosin kuvasta löytyviin kulmiin. Vasemmalla puolella on alkuperäinen testikuva ja oikealla siitä tunnistetut SIFT-avainpisteet.
7 SIFT-algoritmi voidaan jakaa neljään päävaiheeseen: o skaala-avaruuden (scale space) ääriarvojen etsiminen o avainpisteiden päättäminen o avainpisteiden asennon määrittäminen o piirrevektoreiden (descriptor) luominen Algoritmi on suunniteltu niin, että raskaimmat operaatiot suoritetaan aina mahdollisimman pienelle kuvapistejoukolle toisin sanoen avainpiste-ehdokkaita eliminoidaan jatkuvasti algoritmin edetessä [2, s. 5]. Lisäksi tiettyjen operaatioiden tulokset, kuten gradienttimatriisit, tallennetaan työmuistiin jolloin niitä voidaan käyttää hyödyksi myöhemmissä vaiheissa. Näin säästytään ylimääräiseltä laskemiselta ja voidaan edesauttaa algoritmin suoritusnopeutta. Seuraavissa aliluvuissa käydään algoritmin päävaiheet yksitellen läpi. 3.2 Skaala-avaruuden ääriarvot 3.2.1 Skaala Kun objekti liikkuu kamerasta pois päin, sen koko kuvassa pienenee suhteessa kuvan kokoon sanotaan että objektin skaala pienenee spatiaalisesti. Toisaalta, kun objektin koko pienenee, myös siitä löydettyjen yksityiskohtien määrä vähenee. Ajatellaan esimerkiksi auton rekisterikilpeä, jossa olevat merkit voi helposti lukea kun sitä ta r- kastellaan metrin etäisyydeltä. Auton liikkuessa tarkastelupisteestä pois päin mer k- kien hahmottaminen vaikeutuu koko ajan, kunnes jossain vaiheessa merkeistä ei saa enää selvää. Tämä johtuu merkkien reunojen sumentumisesta, eli korkeimpien taajuuksien suodattumisesta pois. Voidaan päätellä että skaalalla on spatiaalisuuden lisäksi myös taajuudellinen ominaisuus, eli skaalan arvo kertoo objektin koon lisäksi sen taajuussisällön alkuperäiseen objektiin verrattuna. On siis mahdollista että ka h- della erikokoisella kuvalla on sama skaala ja toisaalta kahdella samankokoisella k u- valla voi olla eri skaala kyse on vain taajuussisällön ja koon välisestä suhteesta. Skaala ilmoitetaan reaaliluvulla R, jolloin arvo tarkoittaa alkuperäistä tai sitä täysin vastaavaa objektia. Mitä suurempi skaalan arvo on, sitä enemmän o b- jektista on suodattunut korkeita taajuuksia pois tai toisaalta sitä pienempi sen koko on alkuperäiseen verrattuna. Vastaavasti voidaan soveltaa skaalan arvon ollessa n e- gatiivinen [12, s. 2].
8 3.2.2 Skaalariippumattomuus Avainpiste on riippumaton skaalan muutoksesta (scale invariant) jos sen vastaavuus on mahdollista löytää kaikilta mahdollisilta skaaloilta halutulla välillä [2, s. 5]. Skaalariippumattomuuden määritelmän nojalla kuvasta kohteen alueelta löydettyjen kaikkien stabiilien avainpisteiden vastaavuudet täytyisi siis pystyä löytämään kaikista kuvan skaalavariaatioista tietyllä skaalavälillä. Riippumattomuuden saavuttaminen laskemalla alkuperäisestä kuvasta kaikki mahdolliset skaalat yksitellen olisi paitsi laskennallisesti äärimmäisen hidasta, myös käytännössä mahdotonta, sillä kaikkien skaalojen kattaminen vaatisi äärettömän määrän kuvia. Laskemalla vain äärellinen määrä skaaloja voitaisiin skaalaväli toteuttaa hyvin karkeasti, mutta sen seurauksena algoritmi toimisi epäluotettavasti ja laskeminen olisi edelleen hidasta. Skaalariippumattomuus on mahdollista kuitenkin saavuttaa yksinkertaisesti muodostamalla kuvasta jatkuva ja lineaarinen skaalan funktio, jota kutsutaan skaalaavaruudeksi [7, 11]. Skaala-avaruus koostetaan SIFTin tapauksessa vain 20 skaalakuvasta; näin minimoidaan tarvittavan datan määrän toteutuksen ollessa kuitenkin toimiva ja tehokas. 3.2.3 Skaala-avaruuden muodostaminen SIFTin skaala-avaruus koostuu neljästä oktaavista. Yksi oktaavi sisältää viisi skaalaa, eli keskenään samankokoista, mutta toinen toistaan enemmän alipäästösuodatettua kuvaa. Jokaisessa oktaavissa olevien kuvien koko on puolet edellisen oktaavin kuvakoosta [2, s. 5]. Tämän niin kutsutun kuvapyramidin avulla voidaan esittää kaikki skaalat halutulla välillä ottaen samalla huomioon skaalan spatiaalisen sekä taajuudellisen ominaisuuden. Kuva 3.2. SIFTin skaala-avaruus koostetaan neljästä oktaavista joissa jokaisessa on viisi skaalaa. Kuvien muodostamaa kokonaisuutta kutsutaan usein myös kuvapyramidiksi. Useista eri syistä [7, s. 1020] paras mahdollinen ikkunafunktio skaala-avaruuden alipäästösuodatukseen on yleisesti käytetty normaalijakauman funktio (Gaussian function), ja kuvan tapauksessa funktion yleistys kahteen ulottuvuuteen (kaava 3.1). Jatkossa funktiosta käytetään nimitystä Gaussin ikkuna (Gaussian kernel).
9 (3.1) (3.2) Skaala-avaruuden kuva määritellään konvoluutio-operaation tuloksena Gaussin ikkunan sekä kuvan välillä (kaava 3.2). Alipäästösuodatetun kuvan korkeimmat taajuudet ovat suodattuneet pois, minkä seurauksena kuvassa havaitaan pehmenemistä. Suodatuksen, ja toisaalta pehmenemisen määrään voidaan vaikuttaa keskihajonnan σ arvoa muuttamalla (kuva 3.2). Alipäästösuodatuksen tarkoituksena on myös estää laskostuminen seuraavia oktaaveja interpoloidessa jolloin vältetään uusien epästabiilien avainpisteiden syntyminen [2, s. 5]. Kuva 3.3. Alkuperäinen kuva (vasemmalla) suodatettuna kahdella eri Gaussin ikkunalla: keskimmäisessä kuvassa ja oikeanpuoleisessa. Keskihajonnan arvoa kasvattamalla kuvan yksityiskohdat häviävät taajuussisällön vähentyessä. Ennen skaala-avaruuden rakentamista alkuperäinen kuva suurennetaan bilineaarista interpolointia käyttäen kaksinkertaiseksi, minkä jälkeen se alipäästösuodatetaan Gaussin ikkunalla keskihajonnan σ arvolla σ = 1. Näin tuloksena saadun kuvan pinta-ala on alkuperäiseen kuvaan verrattuna nelinkertainen minkä seurauksena stabiileja avainpisteitä löydetään yhtä lailla nelinkertainen määrä. Jotta lopullinen ääriarvojen etsintä kattaisi tasaisesti koko skaala-avaruuden, suodatetaan jokainen oktaavissa oleva skaalakuva, missä S on oktaavissa olevien kuvien lukumäärä, Gaussin ikkunalla keskihajonnan arvolla: Oktaavin peräkkäisten kuvien σ 0 (3.2) on siis aina k-kertainen, jolloin skaala-avaruudesta saadaan tasavälinen (taulukko 3.1). Vakion k arvoksi on määritetty ja vakion σ 0 aloitusarvoksi σ 0 = 1.6. Nämä vakiot on valittu Lowen työryhmän tekemien tutkimusten perusteella, ja niitä käyttämällä voidaan maksimoida stabiilien avainpi s- teiden määrä koko skaala-avaruudessa [2, s. 10]. Parametrien k ja σ 0 arvoja muuttamalla voidaan tarvittaessa vaikuttaa avainpisteiden määrään sovelluskohtaisesti.
10 Taulukko 3.1. Skaalan σ n arvot oktaaveittain O n, kun σ 0 = 1.6 ja k = σ 1 σ 2 σ 3 σ 4 σ 5 O 1 1,600 2,263 3,200 4,525 6,400 O 2 3,200 4,525 6,400 9,051 12,800 O 3 6,400 9,051 12,800 18,102 25,600 O 4 12,800 18,102 25,600 36,204 51,200 Kuten taulukosta 3.1. nähdään, jokaisen oktaavin aloituskuvaksi valitaan aina edell i- sestä oktaavista pinon kolmas kuva, eli kuva jonka skaala on kaksinkertainen σ 0 arvoon nähden, toisin sanoen σ 0 kaksinkertaistuu peräkkäisissä oktaaveissa. Aloituskuva interpoloidaan eli uudelleennäytteistetään ottamalla siitä joka toinen kuvapiste pysty- että vaakasuunnassa, minkä seurauksena kuvan koko puolittuu. 3.2.4 Gaussin erotuskuvien laskeminen Viimeisessä vaiheessa ennen ääriarvojen etsimistä lasketaan skaala-avaruuden kuvista Gaussin erotuskuvat (difference of Gaussians). Kyseisessä menetelmässä oktaavissa olevat kaksi vierekkäistä, vakion k verran toisistaan eroavaa skaalakuvaa vähennetään keskenään, jolloin jäljelle jää suodattamaton taajuuskaista spatiaalitasoon kuvattuna [14] (kuva 3.4). (3.4) Kuva 3.4. Gaussin erotuskuva, jossa on jäljellä vain reunat sekä kirkkaimmat ja tummimmat alueet. Kuva on laskettu arvoilla ja 1.6. Kuvan havainnollistamiseksi harmaasävyarvoja on korjattu tasoittamalla kuvan histogrammi. Menetelmä on tarkka approksimaatio Gaussin ikkunan toisesta derivaatasta [13] (Laplacian of Gaussian), jonka avulla kuvasta voidaan etsiä sen kirkkaimpia ja tummimpia alueita, mikä SIFTin tapauksessa tarkoittaa merkittävien pisteiden, yhtenäisten alueiden sekä reunojen löytymistä. Gaussin erotuskuvia lasketaan jokaiseen oktaaviin yhteensä neljä kappaletta peräkkäisten kuvien erotuksina; erotuskuvat toimivat jatkossa perustana SIFT-piirteiden etsimiselle [2, s. 7].
11 3.2.5 Ääriarvojen etsiminen Lopuksi Gaussin erotuskuvista D etsitään ääriarvot, tässä tapauksessa lokaalit maksimit ja minimit, jotka määrätään avainpiste-ehdokkaiksi. Oktaavin sisältämistä neljästä Gaussin erotuskuvasta kahden keskimmäisen kuvan jokaista kuvapistettä verr a- taan sen kahdeksaan skaalanaapuriin ja yhdeksään naapuriin ylemmällä sekä alemmalla skaalatasolla (kuva 3.5). Jos kuvapisteen arvo on joko suurin tai pienin tässä 26 kuvapisteen naapurustossa, valitaan kyseinen piste ääriarvoehdokkaaksi [2, s. 7-8]. Täytyy huomioida, että ääriarvojen etsimistä ei suoriteta oktaavin ylimmälle tai alimmalle skaalalle, sillä niillä molemmilla on vain yksi naapuriskaala. Kuva 3.5. Skaalakuvan kuvapistettä (merkitty mustalla) verrataan kaikkiin sitä ympäröiviin harmaalla merkittyihin naapureihin - sekä ylemmällä että alemmalla skaalatasolla. Tämä toistetaan kaikille kuvan kuvapisteille. Tähän mennessä alkuperäisestä kuvasta on muodostettu mahdollisimman kattava skaala-avaruus, jonka sisältämien skaalojen pohjalta on laskettu Gaussin erotuskuvien lokaalit ääriarvot eli avainpiste-ehdokkaat. Seuraavassa luvussa 3.3 määritetään avainpisteiden täsmälliset sijainnit. 3.3 Avainpisteiden päättäminen 3.3.1 Avainpiste-ehdokkaiden paikallistaminen Gaussin erotuskuvista laskettuja lokaaleja ääriarvoja kutsutaan avainpisteehdokkaiksi sillä ne eivät ole vielä lopullisia avainpisteitä. Kuvadata on näytteistettyä eli diskreettiä, joten löydetyistä ääriarvoista ei voida sanoa että ne ovat aidosti ääriarvoja; on mahdollista että oikea ääriarvopiste kelluu jossain kuvapisteiden välillä (kuva 3.6), jolloin jokin toinen kuvapiste saattaa olla lähempänä oikeaa ääriarvoa. Tästä syystä jokainen avainpiste-ehdokas sovitetaan sen lähellä olevaan dataan käyttämällä paraboloidin toisen asteen Taylorin laajennusta (kaava 3.5), minkä avulla oikean ääriarvon tarkka sijainti voidaan interpoloida [11, s. 25].
12 Kuva 3.6. Mustat rastit esittävät jatkuvasta kuvatasosta näytteistettyjä diskreettejä kuvapisteitä. Sovittamalla pisteet paraboloidiin pyritään löytämään oikeaa maksimiarvoa (valkoinen rasti) lähinnä olevan kuvapisteen sijainti Pisteen naapurustoonsa sovittava funktio on muotoa:, (3.5) missä D on avainpiste-ehdokkaan arvo ja T ehdokkaan etäisyys sovitefunktion origosta. Laskemalla yhtälön 3.5 derivaatan nollakohdat saadaan tuloksena aidon ääriarvon etäisyys ehdokaspisteestä: (3.6) Derivaatat sekä approksimoidaan avainpiste-ehdokkaan ja sen kahdeksan naapuripisteen erotuksina. Jos lasketun etäisyyden minkä tahansa dimension (x, y, σ) itseisarvo on yli 0.5, voidaan päätellä että oikea ääriarvo sijaitsee lähempänä jotain toista kuvapistettä (kuva 3.7). Tällöin alkuperäinen avainpiste-ehdokas hylätään ja interpolointi suoritetaan seuraavalle kuvapisteelle, joka valitaan uudeksi avainpiste-ehdokkaaksi. Proseduuria toistetaan niin kauan kunnes paras mahdollinen approksimaatio on saatu laskettua. Lopuksi etäisyys summataan avainpiste-ehdokkaan sijaintiin, jolloin saadaan riittävä estimaatti lopullisen avainpisteen sijainnista. Täsmällisempiä yksityiskohtia ääriarvoehdokkaiden paikallistamisesta löytyy Lowen tutkimuksesta [2, s. 10 11]. Kuva 3.7. Kahden kuvapisteen keskustojen välinen etäisyys on 1 pikseli, mistä seuraa että liikuttaessa kuvapisteen keskustasta yli 0.5 pikseliä x- tai y-suunnassa, saavutaan toisen kuvapisteen alueelle.
13 Koska matalakontrastiset piirteet ovat epästabiileja, ne halutaan poistaa avainpisteiden joukosta. Ääriarvojen kontrasti voidaan helposti laskea kaavoista 3.5 ja 3.6 yhdistetyn kaavan 3.7 avulla. (3.7) Koska kontrasti tarkoittaa kuvapisteen intensiteettiarvon suhdetta sen ympäristön gradientteihin, voidaan päätellä että matalakontrastisilla pisteillä tämä suhde on pi e- ni. SIFTin tapauksessa kaikki avainpisteet, joille laskettu kontrasti eli gradienttisuhde on pienempi kuin 0.03, hylätään. Sovelluksesta riippuen minimiarvo voidaan valita sopivaksi halutulla välillä [0, 1], mutta arvon ollessa liian suuri myös stabiileja avainpisteitä saatetaan hylätä [2, s. 11]. 3.3.2 Reunapisteiden hylkääminen Tähän mennessä kuvasta on löydetty suuri määrä avainpisteitä, toisten sijoittuessa tarkasti objektien kulmiin ja reunojen risteyskohtiin kun taas osa sijaitsee jossain objektien reunojen lähistöllä. Kulmissa ja risteyksissä olevat pisteet, joita kutsuttakoon kulmapisteiksi, ovat mainioita avainpisteitä, sillä ne ovat stabiileja ja säilyvät myös skaalan muuttuessa. Lisäksi ne paikantuvat tarkasti paraboloidin sovituksessa. Sen sijaan reunoilla olevat avainpisteet ovat usein epästabiileja liikkuessaan edestakaisin reunoja pitkin; tämä johtuu reunapisteiden huonosta paikantuvuudesta ja kohinansietokyvystä, mistä johtuen sama avainpiste saattaa lokalisoitua reunan eri kohtiin eri kuvissa (kuva 3.8) Näistä syistä reunapisteistä halutaan päästä eroon algoritmin luotettavuuden lisäämiseksi [2, s. 12, 8]. Kuva 3.8. Objektien reunoilla sijaitsevat epästabiilit avainpisteet saattavat liikkua kuvien välillä kohinasta ja valaistuksenmuutoksista johtuen, joten kyseiset avainpisteet täytyy eliminoida Laskemalla jokaiselle avainpisteelle 2x2 -kokoinen Hessen matriisi H (kaava 3.8), voidaan päätellä sijaitseeko piste Gaussin erotuskuvassa D objektin reunalla vai kulmassa. Matriisin derivaatat approksimoidaan erotuskuvasta avainpisteen ja sen naapurustonsa välisten erotuksien perusteella. Objektin reunalla olevan pisteen ympäristöllä on vain vähäinen muutosnopeus reunan suuntaisesti, mutta erittäin suuri muutosnopeus koh-
14 tisuorasti reunaan nähden (kuva 3.9). Jotta siis pystyttäisiin määrittämään onko avainpiste reunalla, tarvitsee ainoastaan tietää x- ja y-suuntaisten muutosnopeuksien välinen suhde, joka maksimoituu reunapisteissä. [ ] (3.8) Kuva 3.9. Objektien reunoilla harmaasävyarvojen muutosnopeus on pieni reunan suuntaisesti, mutta reunan normaaliin suunnassa muutosnopeus voi olla erittäin suuri. Hessen matriisin ominaisarvot ovat verrannollisia pisteen ympäristön muutosnopeuksiin, joten niitä voidaan käyttää muutosnopeuksien suhteen laskemisessa [Harris88]. Koska olemme kiinnostuneita vain ominaisarvojen α ja β välisestä suhteesta, vältymme kokonaan yksittäisten ominaisarvojen laskemiselta. Sen sijaan matriisin jäljen Tr(H) (kaava 3.9) sekä determinantin Det(H) (kaava 3.10) avulla saamme laskettua muutosnopeuden suhteen ilmoittavan kynnysarvon (kaava 3.11), jolloin tarkastelusta selvitään hyvin yksinkertaisilla laskutoimituksilla [8, s. 150]. = α + β (3.9) = α β (3.10) (3.11) Vakion r arvoksi on tutkimuksissa valittu 10, jolloin muutosnopeuden suhteen ollessa yli 12.3 avainpiste hylätään. Tarkempaa tietoa reunapisteiden hylkäämisestä löytyy Lowen tutkimuksesta [2, s. 12]. Lähes kaikki lopulliset avainpisteet on nyt päätetty ja niiden tarkat sijainnit paikallistettu. Seuraavassa aliluvussa määritetään avainpisteiden asento. 3.4 Avainpisteiden asennon määrittäminen Avainpisteellä on naapurustonsa perusteella tietty asento, eli kiertokulma, jonka tuntemalla avainpiste voidaan esittää asennosta riippumattomana piirrevektorinsa avulla. Jokainen piirrevektori muodostetaan suhteessa avainpisteen asentoon; näin ollen kuvassa oleva objekti voi vapaasti kiertyä 0-359 ilman että sitä kuvaavien piirrevektoreiden
15 sisältö radikaalisti muuttuu; tällöin vastaava objekti ja vastaavat piirteet on mahdollista löytää muistakin kuvista joissa objekti on. Avainpisteen skaalaa lähinnä olevasta kuvapyramidin skaalakuvasta L lasketaan avainpisteen ympäristön kaikille kuvapisteille gradientin voimakkuus sekä orientaatiokulma pisteiden 3x3-naapuruston erojen perusteella (kaavat 3.12 ja 3.13). Laskenta-alueen kokoa ei Lowen tutkimuksessa ole ilmoitettu, mutta omassa toteutuksessani alueen koko suhteutettiin kunkin avainpisteen skaalaan. ( ) (3.12) ( ) (3.13) Alueen äärimmäisten pisteiden arvot eivät välttämättä korreloi avainpisteen asennon kanssa merkittävästi, joten niiden painoarvoa on syytä pienentää. Tästä syystä gradientin voimakkuuksia painotetaan pyöreällä Gaussin ikkunalla (kuva 3.10), jolloin asennon määrittäminen perustuu pääasiassa avainpisteen lähimpiin naapureihin. Ikkunan keskihajonnan arvoksi σ valitaan 1.5-kertainen arvo avainpisteen skaalaan σ nähden [2, s. 13]. Kuva 3.10. Avainpisteen (musta rasti) ympäristölle laskettuja gradientin voimakkuuksia painotetaan pyöreällä Gaussin ikkunalla (tässä σ = 7), jolloin avainpisteen asento määritetään pääasiassa sen lähinaapureiden arvojen perusteella. Mitä tummempi ruutu on, sitä pienempi painokerroin on. Lasketuista arvoista muodostetaan 36 osaväliin jaettu histogrammi (kuva 3.11), jossa kukin osaväli kattaa 10 laajuisen sektorin. Jokaista laskettua gradienttikulmaa vastaava painotettu gradientin voimakkuus lisätään histogrammissa oikeaan osaväliin, jonka jälkeen arvot normalisoidaan välille jakamalla kaikki arvot histogrammin maksimiarvolla. Nyt histogrammin huippuarvot kuvaavat siis avainpisteen ympäristössä vallitsevia orientaatioita. Näistä arvoista korkeinta huippua vastaava os a- väli valitaan avainpisteen suurpiirteiseksi asennoksi. Lisäksi jokaisesta yli 0.8 ko r- kuisesta huipusta luodaan uusi avainpiste joka eroaa alkuperäisestä avainpisteestä vain orientaationsa osalta. Lopuksi sovitetaan toisen asteen paraabeli jokaisen löydetyn huipun kolmen lähimmän naapurin arvoihin, jolloin paraabelin maksimiarvosta saadaan määritettyä avainpisteen tarkka asento [2, s. 13].
16 1 0,9 0,8 0,7 0,6 0,5 0,4 0,3 0,2 0,1 0 Kuva 3.11. Painotetun histogrammin maksimiarvoon ja sen lähimpiin naapureihin sovitetaan paraabeli, jolloin tuloksena saadaan avainpisteen tarkka asento - tässä tapauksessa 115. Arviolta vain 15 %:ssa histogrammeista esiintyy useita huippuja, joten lopullinen avainpisteiden määrä ja toisaalta algoritmin suoritusnopeus ei muutu merkittävästi. Sen sijaan uusien avainpisteiden syntymisellä voidaan vaikuttaa piirteensovituksen luotettavuuteen ratkaisevasti [2, s. 13]. 3.5 Piirrevektorin luominen Tässä vaiheessa avainpisteille on määritelty sijainti, skaala sekä asento. Näiden parametrien perusteella voidaan jokainen avainpiste jo yksilöidä, mutta tehokkaamman vertailun saavuttamiseksi avainpisteistä luodaan niitä kuvaavat piirrevektorit. Piirrevektoreiden luomisen perustana käytetään lähestymistapaa biologiseen näköön; tarkemmin sanottuna prosessissa pyritään mallintamaan primäärisen näköaivokuoren (V1) kompleksisten neuronien toimintaa. Kyseisillä neuroneilla on voimakas vaste gradienteille tietyllä orientaatiolla sekä spatiaalisella taajuudella. Nämä gradientit eivät kuitenkaan paikannu verkkokalvolla tarkasti, vaan ne voivat liikkua hieman eri suuntiin tietyn reseptiivisen kentän alueella, aiheuttamatta muutoksia vasteessa [15]. Näin ne toimivat hyvänä mallina piirrevektoreita rakentaessa, kun vektoreista halutaan saada mahdollisen riippumattomia objektin muodonmuutoksille. Avainpisteen ympärillä olevan 16x16 kokoisen alueen kaikille kuvapisteille lasketaan gradientin voimakkuus sekä kiertokulma avainpisteen skaalaa lähimpänä olevasta kuvapyramidin kuvasta. Kulmat suhteutetaan avainpisteen asentoon saavuttaaksemme riippumattomuuden asennosta. Käytännössä tämä tapahtuu vähentämällä kaikista lasketuista kiertokulmista alkuperäisen avainpisteen asento. Koska avainpiste on hakualueen keskimmäinen arvo, eli se sijaitsee teoriassa neljän keskimmäisen kuvapisteen välissä, täytyy kuvapisteiden väliin jäävät arvot interpoloida esimerkiksi bilineaarista interpolointia käyttäen. Tämän jälkeen gradientin voimakkuudet painotetaan etäisyyden mukaan pyöreällä Gaussin ikkunalla (kuva 3.12), jonka keskihajonnan σ arvoksi valitaan puolet laskenta-alueen koosta, eli tässä tapauksessa σ = 8. Painotuksen tarkoituksena on estää äkilliset muutokset piirrevektorissa avainpisteen liikkuessa vähäisen määrän kuvan alueella [2, s. 15 16].
17 Kuva 3.12. Vasemmanpuoleisessa kuvassa on 16x16 alueelta lasketut orientaatiot Gaussin ikkunalla painotettuine gradientin voimakkuuksineen. Oikealla on 4x4 ikkunoista lasketut painotetut histogrammit - toisin sanoen kyseessä on piirrevektori graafisessa muodossa. Molemmissa kuvissa nuolien suunta kertoo gradienttikulman, ja nuolien pituus gradientin voimakkuuden. Painotettu 16x16 kuvapisteen kokoinen matriisi jaetaan seuraavaksi 16 yhtä suureen ikkunaan; näistä jokaiselle ikkunalle lasketaan erikseen gradientin voimakkuuksilla painotettu histogrammi, jonka muodostavat kahdeksan yhtä suurta osaväliä. Osaväleistä kukin kattaa siis 45 laajuisen sektorin. Nämä 4x4 kuvapisteen kokoiset histogrammiikkunat mahdollistavat yksittäisen kuvapisteen liikkumisen kuvassa jopa neljän pikselin verran vaikuttamatta piirrevektorin arvoihin. Tästä syystä yksittäiset objektit voivat siirtyä kuvassa huomattaviakin määriä ilman että piirteiden tunnistettavuus kärsii. Ikkunoita voidaankin verrata aiemmin mainittuihin silmän verkkokalvon reseptiivisiin kenttiin. Lopuksi muodostetaan piirrevektori v asettamalla peräkkäin kaikki 16 histogrammia tällöin jokaiselle avainpisteelle luodaan 4x4x8 = 128 lukua käsittävä vektori. Vektori v normalisoidaan jakamalla jokainen sen arvo vektorin euklidisella normilla ; tällä tavoin päästään eroon vektorin sisäisestä kontrastinvaihtelusta, joka aiheutuu kuvapisteen intensiteetin vakiolla kertomisesta ja näin ollen muuttaa gradienttien voimakkuuksia samassa suhteessa. Kirkkauden lineaarinen vaihtelu, eli vakioarvon summaaminen kuvapisteen intensiteettiarvoon, ei kuitenkaan vaikuta vektorin arvoihin, sillä gradientin voimakkuudet lasketaan kuvapisteiden välisistä eroista jotka tässä tapauksessa pysyvät suhteessa samoina. Sen sijaan epälineaariset kirkkauden vaihtelut, jotka johtuvat lähinnä kameran saturaatiosta sekä kolmiulotteisten kappaleiden valaistuksen vaihteluista, vaikuttavat joidenkin gradienttien suhteellisiin voimakkuuksiin kasvattamalla niiden arvoa merkittävästi; tästä johtuen piirrevektorin arvot kynnystetään luvulla 0.2 minkä jälkeen vektori normalisoidaan uudelleen. Tällöin saadaan aikaan osittain epälineaarisille valaistuksenvaihteluille robusti piirrevektori. Vakio 0.2 on löydetty Lowen tutkimuksissa vertailemalla eri valaistuksissa otettuja kuvia samoista kolmiulotteisista kappaleista [2, s. 16]. Nyt kuvasta on löydetty kaikki SIFT-piirteet, ja ne on saatu esitettyä skaalasta, kierrosta sekä siirrosta riippumattomina. Lisäksi luodut piirrevektorit ovat robusteja vähäiselle kuvakohinalle, lineaarisille kontrastin ja kirkkauden muutoksille sekä hienoisille geometrisille vääristymille. Seuraavassa luvussa testataan SIFT-menetelmän toimivuutta käytännössä.
18 4 SIFT-MENETELMÄN TESTAUS Tässä luvussa testataan SIFT-menetelmän toimivuutta tarkastelemalla kuvasta löytyneiden stabiilien avainpisteiden määrää, algoritmin ajallista suorituskykyä sekä piirteen- ja kuvansovituksen toimivuutta. Testikuvana käytettiin neliön muotoista, 2048x2048 kuvapisteen kokoista valokuvaa, joka sisältää erimuotoisia sekä -kokoisia objekteja lisäksi kuvassa on paljon yksityiskohtia, objektien heijastuksia ja matalakontrastinen taustatekstuuri, joten se soveltuu erinomaisesti piirteentunnistuksen testaamiseen. Testit on toteutettu MATLAB ohjelmiston päällä toimivan David Lowen alkuperäisen C- kielisen SIFT-toteutuksen [17] sekä yksinkertaisten MATLAB-testiskriptien avulla. Vertailumenetelmänä käytettiin suositun Harrisin kulmantunnistimen MATLABtoteutusta [18]. Harrisin kulmatunnistin perustuu nimensä mukaisesti ainoastaan kuvan objekteista etsittäviin kulmiin, joten SIFTiin verrattuna se on toteutukseltaan huomattavasti yksinkertaisempi. Lisää Harrisin menetelmästä voi lukea alkuperäisestä raportista [8]. 4.1 Avainpisteiden määrä Yksi hyvä mittari SIFT-algoritmin toimivuudelle on tarkastella sen avulla kuvasta löydettyjen avainpisteiden määrää. Mitä suurempi määrä stabiileja avainpisteitä pystytään paikantamaan, sitä suuremmalla todennäköisyydellä objektit ja yksittäiset piirteet saadaan sovitettua ja täsmättyä. Testiskriptinä käytettiin silmukkarakennetta, joka pienentää alkuperäisen kuvan kokoa jokaisella kierroksella kokonaisluvun n verran, ja laskee pienennetystä kuvasta löytyneiden SIFT-avainpisteiden lukumäärän sekä vertailuna Harris-piirteiden lukumäärän. Kierrosten välissä kuvaa alipäästösuodatetaan hieman laskostumisen estämiseksi. for n = 1:N % n kertoo kierrosten määrän img_lowpass = lowpass(img, n); % alipäästösuodatus img_res = resize(img_lowpass, 1/n) % kuvakoon muuttaminen end amount_sift(n) = sift(img_res) % avainpisteiden etsiminen amount_harris(n) = harris(img_res)
19 10000 Avainpisteiden määrä 1000 100 10 SIFT Harris 1 128 137 147 158 171 187 205 228 256 293 342 410 512 683 1024 2048 SIFT 132 136 147 182 189 219 225 273 291 373 467 606 933 1349 2322 6201 Harris 29 34 35 38 40 46 52 58 70 82 94 120 161 228 363 852 Sivunpituus (px) / avainpisteiden määrä Kuva 4.1. Löytyneiden avainpisteiden lukumäärät kuvan sivunpituuden funktiona. Huomaa logaritminen y-akseli. Kuva 4.1. esittää testikuvasta löytyneiden SIFT- ja Harris-piirteiden lukumäärän kuvan sivunpituuden funktiona. Kuten tiedetään, kuvapinta-ala kasvaa suhteessa neliöllisesti sivunpituuden kasvaessa; tämä voidaan hyvin havaita molemmilla menetelmillä löydettyjen avainpisteiden määrästä; käyrät mukailevat eksponentiaalifunktiota melko tarkasti. SIFTin löytämien avainpisteiden määrä alkuperäisessä kuvassa (2048 x 2048 px) on yli 7-kertainen Harris-piirteiden määrään verrattuna; tämä kertoo menetelmän luotettavuudesta objektinsovituksessa, sillä suuremmasta avainpistejoukosta on todennäköisempää löytää vastaavuuksia ja näin ollen tunnistaa helposti yksittäisiä objekteja. 4.2 Suorituskyky Etenkin videokuvan tapauksessa on syytä tarkastella SIFTin suorituskykyä, sillä useissa piirteen- ja objektinseurannan sovelluksissa vaaditaan reaaliaikaista prosessointia käytännössä tämä tarkoittaa vähintään 15 fps (frames per second) laskentanopeutta, mikä vastaa noin 0.07 sekunnin laskenta-aikaa kehystä kohden. Laskentanopeus voidaan suhteuttaa kuvan resoluutioon tai esimerkiksi löytyneiden stabiilien avainpisteiden määrään; on kuitenkin selvää että kuvan koolla ja siitä löydettyjen avainpisteiden määrällä on vahva korrelaatio, joten tässä keskitytään tarkastelemaan SIFTin laskentanopeutta ainoastaan kuvan koon funktiona. Testikokoonpanona käytettiin hieman vanhempaa 3.00 GHz Pentium 4 suorittimellista kotitietokonetta 2 Gt keskusmuistilla; voidaan olettaa että uudella tietokoneella lasketut arvot olisivat jonkin verran pienemmät. Käytetty testiskripti on sama kuin luvussa 4.1
20 100 10 Aika (s) SIFT Harris 1 0,1 128 137 147 158 171 187 205 228 256 293 342 410 512 683 1024 2048 SIFT 0,39 0,55 0,52 0,57 0,59 0,63 0,69 0,7 0,88 1,08 1,18 1,73 2,73 4,53 9,04 51,8 Harris 0,12 0,11 0,14 0,15 0,21 0,22 0,25 0,39 0,41 0,52 0,74 1,01 1,54 2,75 6,39 27,5 Sivunpituus (px) / suoritusajat (s) Kuva 4.2. Algoritmien suoritusaika sivunpituuden funktiona. Suoritusajat eivät sisällä skriptissä tehtyjen alipäästösuodatuksen ja kuvakoon muutoksen kuluttamaa aikaa. Huomaa logaritminen y-akseli. Kuten arveltua, kuvasta 4.2. voidaan nähdä sivunpituuden, ja näin ollen avainpistemäärän vahva korrelaatio suoritusajan kanssa. Laskenta-aika on estimoitu jokaiselle sivunpituudelle viiden suorituksen keskiarvona, joten suurimmat huiput ovat tasoittuneet pois. SIFT-algoritmin laskenta-aika jo pienimmällä sivunpituudella (128 px) on lähes 0.4 sekuntia, mikä vastaa 2.5 fps kehysnopeutta. Toisin sanoen SIFT ei olisi testikokoonpanolla soveltuva reaaliaikaiseen suoritukseen. Sama pätee myös Harrisin algoritmiin, jota käyttämällä kehysnopeus nousee 9 fps suuruiseksi, mikä ei edelleenkään olisi riittävä suurimmassa osassa reaaliaikaisuutta vaativissa sovelluksissa. Toisaalta voidaan ajatella, että esimerkiksi teollisuuskäytössä konenäön taustalla toimiva prosessointi olisi kotitietokoneeseen verrattuna huomattavasi nopeampaa. Lisäksi useamman prosessorin sekä esimerkiksi näytönohjainkortin valjastaminen laskentaprosessiin laskisi suoritusaikaa merkittävästi. 4.3 Piirteen- ja kuvansovitus Piirteensovituksen eksakti tarkastelu vaatisi tuhansia, ellei jopa kymmeniätuhansia piirteitä käsittävän tietokannan, johon kuvista löytyneitä piirteitä voitaisiin verrata ja näin ollen laskea niiden perusteella tarkkoja virhearvoja. Tässä työssä keskitytään piirteensovituksen osalta kuitenkin vain karkeaan tarkasteluun. Tarkoituksena on testata SIFTmenetelmän soveltuvuutta avainpistejoukkojen sovittamiseen kahden kuvan välillä, ottaen huomioon skaala-, ja asentoriippumattomuuden sekä robustisuuden kuvakohinalle. Käytännössä tämä toteutetaan laskemalla kahdelle kuvalle SIFT-avainpisteet, ja etsimällä kullekin avainpisteelle sen lähin vastine vertailukuvasta käyttämällä lähimmän naapurin menetelmää. Lisäksi lasketaan vastinpiirrevektoreiden välisen kulman kosini θ kaavan 4.1 avulla; kulma saa kosinin arvoja välillä, ja sen avulla voidaan määrit-
Täsmänneiden avainpisteiden osuus % 21 tää vektoreiden samankaltaisuus. Jos kulma θ on alle 0.6, oletetaan piirrevektoreiden esittävän samaa avainpistettä ja näin ollen vastineet voidaan hyväksyä. Muussa tapauksessa avainpiste voidaan erilaisuuden nojalla hylätä [19]. Menetelmällä saadaan vain erittäin suurpiirteinen approksimaatio vektoreiden samankaltaisuudesta, ja sen antamat tulokset ovat siis vain suuntaa-antavia. 4.3.1 Kohinasietoisuus ( ) (4.1) SIFT-menetelmän kohinasietoisuutta testattiin lisäämällä testikuvaan normaalijakautunutta kohinaa progressiivisesti. Kohinan lisääminen toteutettiin yksinkertaisella silmukalla käyttäen MATLABin imnoise funktiota, jonka parametreina annettiin kohinatyypiksi normaalijakautunut kohina (gaussian), kohinan keskiarvoksi valittiin 0, ja varianssin σ arvoa muutettiin silmukan sisällä kohinan määrän lisäämiseksi: for n = 1:N end % lisätään kuvaan kohinaa varianssilla 0.01/n img_noisy = imnoise(img, gaussian, 0, 0.01/n) %lasketaan kahden kuvan välillä täsmänneiden avainpisteiden määrä match(img, img_noisy); Kierrosten määräksi valittiin N = 20, jolloin kuvakohinan varianssi σ² sai arvoja väliltä σ. Funktion tuloksena saatiin täsmänneiden avainpisteiden lukumäärä. Tulokset on esitetty kuvassa 4.3. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Kohinan varianssi σ² Kuva 4.3. Täsmänneiden avainpisteiden osuus testikuvan avainpisteistä normaalijakautuneen kohinan varianssin funktiona. Katkoviivalla merkitty käyrä on toisen asteen funktion sovite. Alkuperäisestä testikuvasta (410 x 410 px) löytyneiden avainpisteiden lukumäärä 606 kpl (100 %).
22 Kuvasta 4.3. havaitaan kuinka täsmänneiden piirteiden määrä vähenee toisen asteen paraabelia mukaillen kohinan varianssin kasvaessa. Tämä on ymmärrettävää, sillä kohinan lisääntyessä kuvaan syntyy paljon epästabiileja avainpisteitä joita kaikkia SIFTalgoritmi ei pysty eliminoimaan tästä johtuen osa avainpisteistä tunnistuu täysin väärin ja ne hylätään. Kuten Lowen tutkimuksessa todetaan, SIFT-menetelmä on robusti vähäiselle kuvakohinalle, eli se ei ole riippumaton kohinan määrästä. Tämä pitää paikkaansa testitulosten nojalla. Kuva 4.5. Täsmänneet avainpisteet alkuperäisen kuvan ja kohinakuvan (σ = 0.01) kuvan välillä.. 4.3.2 Kiertoriippumattomuus Avainpisteiden riippumattomuutta kierrosta testattiin yhtä lailla silmukkarakenteisella testiskriptillä. Jokaisella kierroksella vertailukuvaa käännettiin 18 lisää, jolloin 20 kierroksen jälkeen kuvaa oli kierretty yhteensä 360. Tulosten perusteella menetelmä oli lähes täysin (> 95 %) riippumaton kuvan kierrosta, eli lähes kaikki piirteet voitiin sovittaa missä tahansa kuvan asennossa välillä 1-360. Kuva 4.6. Kiertoriippumattomuuden testausta piirteensovituksessa. Vasemmalla rajattu alue testikuvasta, ja oikealla vastaava alue 90 kierrettynä.
Täsmänneiden avainpisteiden osuus 23 Kuvassa 4.6. on esimerkki piirteiden sovituksesta kahden eri kulmassa olevan kuvan välillä, vertailukuvan kierron ollessa 90. Kuten kuvasta havaitaan, lähes kaikki piirteet saatiin sovitettua oikein. SIFTin tapauksessa voidaan siis puhua kiertoriippumattomuudesta. 4.3.3 Skaalariippumattomuus Skaalariippumattomuutta tutkittiin pienentämällä testikuvan spatiaalista skaalaa progressiivisesti silmukan sisällä. Pienennetystä kuvasta löydetyt avainpisteet sovitettiin alkuperäisen testikuvan (2048 x 2048 px) avainpisteisiin. Tuloksena saatiin laskettua kaikkien täsmänneiden avainpisteiden lukumäärän suhde skaalatun kuvan avainpisteiden lukumäärään, mikä on esitetty kuvassa 4.7. 100% 95% 90% 85% 80% 75% 70% 65% 60% Skaala Kuva 4.7. Skaalakuvan avainpisteiden lukumäärän suhde alkuperäisen kuvan kanssa täsmänneiden avainpisteiden määrään. Alkuperäistä testikuvaa (2048 x 2048 px) skaalattiin välillä [0.95, 0.1] yhteensä 18 kertaa, jolloin pienimmän lasketun skaalakuvan pinta-ala oli vain 5 % alkuperäisen kuvan pinta-alasta; käytännössä tämä tarkoittaa 204 x 204 pikselin kokoista kuvaa. Testikuvassa olevat objektit pienenivät siis 95 prosenttia, joten on oletettua että kuvainformaatiota katosi samalla valtava määrä Kuten kuvasta 4.7. havaitaan, skaalaa pienennettäessä täsmänneiden avainpisteiden suhde pysyy kuitenkin hyvin vakaana, lähellä 80 prosenttia. Tämä tarkoittaa, että pienennetyistä kuvista löydettiin hyvin paljon samoja avainpisteitä kuin alkuperäisestä kuvasta.
24 Kuva 4.8. Vasemmalla rajattu alue 0.7-kertaiseksi skaalatusta testikuvasta, oikealla rajattu alkuperäinen testikuva. Kuvasta 4.8. nähdään että lähes kaikki piirteet saatiin sovitettua oikein skaalatun ja alkuperäisen testikuvan välillä. Ei voida kuitenkaan sanoa että SIFT olisi täysin riippumaton skaalasta, sillä täydellinen riippumattomuus vaatisi sen, että kaikki skaalatun kuvan avainpisteet pystyttäisiin sovittamaan alkuperäiseen kuvaan. Kuitenkin lähes 80 % avainpisteistä saadaan sovitettua kaikilla skaaloilla, mikä käytännössä tarkoittaa sitä, että kaikki kuvassa olevat objektit on mahdollista tunnistaa skaalasta riippumatta; SIFTin tapauksessa voidaankin siis puhua skaalariippumattomuudesta.