Nikkilän Kulttuurikäytävät & Cultural planning -menetelmä työkaluna
AHTI OKSANEN SIFT-MENETELMÄ PIIRTEENSOVITUKSESSA Oksanen.pdf · 2017-02-08 · 1 1 JOHDANTO...
Transcript of AHTI OKSANEN SIFT-MENETELMÄ PIIRTEENSOVITUKSESSA Oksanen.pdf · 2017-02-08 · 1 1 JOHDANTO...
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 piir-
teentunnistuksen sekä -sovituksen yleisimpiä ominaisuuksia sekä ongelmakohtia. Lisäk-
si työssä keskitytään tarkastelemaan David Lowen kehittämän SIFT-
piirteentunnistusalgoritmin toimintaa sekä teorian että käytännön näkökulmasta.
Tietokoneiden laskentatehon jatkuvasti kasvaessa piirteentunnistuksen sovellus-
kohteita 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 arvioi-
maan 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 oh-
jaamalla 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 Frames per second, kehysnopeus – näytölle sekunnissa piir-
rettyjen kuvien määrä
MATLAB Numeeriseen laskentaan suunniteltu ohjelmisto ja ohjel-
mointikieli (Matrix Laboratory)
Pikseli Bittikarttagrafiikassa esiintyvä kuvan pienin osa, kuvapiste.
Merkitään usein lyhenteellä px
RGB Väriavaruus, jossa eri värejä muodostetaan sekoittamalla
keskenään punaista (red), vihreää (green) ja sinistä (blue)
SIFT Scale-invariant feature transform, piirteentunnistusalgoritmi
Funktion f osittaisderivaatta muuttujan xi suhteen
Det(H) Matriisin H determinantti
Tr (H) Matriisin H jälki
ℝ Reaalilukujen joukko
| x | Muuttujan x itseisarvo
|| x || Vektorin x euklidinen normi
σ 1° Todennkäköisyysjakauman keskihajonta, satunnaismuut-
tujan 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 ominai-
suuksia, vertaillaan ja sovitetaan toisiinsa, tarkoituksena löytää vastaavuuksia [2, s.
19]. Yksi yleisimmistä piirteensovituksen sovelluskohteista on konenäköjärjestel-
missä 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 koh-
teen seurannasta sillä ihmisen käsitys kohteen seuraamisesta perustuu objektiin ko-
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 hin-
takehityksen myötä kiinnostus objektin- ja piirteenseurannan sovellusmahdollisuuk-
sia kohtaan on lisääntynyt huimasti. Piirteenseurannan sovelluksia käytetäänkin
useilla eri aloilla teollisuudesta lääketieteeseen; esimerkiksi robottiavusteinen kirur-
gia [4, s. 2] sekä lentokoneen navigointi maan pinnanmuotoihin perustuen [5, s. 41]
voidaan toteuttaa tietokonenäön ja piirteenseurannan avulla. Tutkimuskohteena piir-
teenseuranta on ollut jo pitkään yksi haastavista digitaalisen kuvankäsittelyn sovel-
luksista; useiden eri muuttujien, kuten valaistuksen ja objektin asennon vaihtelu tar-
kasteluhetkien välillä hankaloittaa seurantaprosessia - käytetyn algoritmin täytyisi-
kin olla häiriönsietokykyinen mahdollisimman monelle muutokselle jotta seurannas-
ta saataisiin luotettavaa ja ennen kaikkea hyödyllistä. Erilaisia lähestymistapoja piir-
teenseurantaan on yritetty onnistuneestikin, mutta usein ongelmaksi on koitunut me-
netelmien 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 trans-
form) [2] ja sen soveltuvuutta piirteensovitukseen. Vaikka SIFT onkin jokseenkin
uusi piirteentunnistusalgoritmi, se perustuu suureksi osaksi jo kauan käytössä ollei-
siin menetelmiin, joiden parhaimpia puolia SIFT sulavasti yhdistelee ja soveltaa;
mainittakoon esimerkiksi skaala-avaruus [7], Gaussin erotuskuvat ja kulmantunnis-
tus [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 MATLAB-
ohjelmiston päälle rakennettu SIFT-algoritmi. Vaikka toteutus toimiikin jokseenkin
2
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. Piirteentunnistus 3 3
2 PIIRTEENSOVITUS
Konenäköjärjestelmän yksi olennaisimmista vaiheista on piirteentunnistus (feature
detection), jossa nimensä mukaisesti mittausdatasta pyritään tunnistamaan loppupro-
sessin 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 digi-
taalikameran kennolta saatavaa näytteistettyä kuvadataa. Se, mitä olennainen infor-
maatio 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 symmetri-
syyden ja massakeskipisteen tarkasteluun. Yleisessä tapauksessa, mihin tässäkin
työssä syvennytään, ei voida suoraan sanoa mitkä ovat kuvassa juuri niitä karakteris-
tisia 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 mah-
dollisuutta löytää piirre samasta kohdasta kuvassa, vaikka kuvausolosuhteet muut-
tuisivatkin tai kuvaan aiheutuisi häiriötä [9, s. 2]. Epästabiilit piirteet tekevät kuvien
vertailusta ja piirteiden luokittelemisesta epäluotettavaa jolloin lopputulos ei usein-
kaan ole haluttu – tästä syystä tunnistusalgoritmi voi sisältää vaiheita joissa epästa-
biileista piirteistä yritetään päästä eroon. SIFTin tapauksessa eräs menetelmä on
eliminoida matalakontrastiset piirteet jotka usein aiheutuvat satunnaisesta kuvakohi-
nasta, ja näin ollen ovat epästabiileja [2, s. 11]. Mahdollinen skenaario voisi olla
esimerkiksi kuva, jossa vaalean seinäpinnan matalakontrastisesta tekstuurista löyde-
tää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. Sano-
taankin että menetelmä voi olla robusti, eli häiriönsietokykyinen tietyille ominai-
suuksille – esimerkiksi SIFT on robusti vähäiselle kuvakohinalle sekä pienille va-
laistuksen muutoksille sovitettavien kuvien välillä [2, s. 4].
Piirre voi olla myös riippumaton (invariant) erilaisista spatiaalisista muutok-
sista 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 piir-
teiden riippumattomuus. Toisena esimerkkinä mainittakoon panoraamakuvien auto-
maattinen 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 lopputu-
loksesta saataisiin realistinen [1, s. 377]. Eri menetelmät ja algoritmit suhtautuvat eri
tavoin mainittuihin spatiaalisiin muutoksiin; esimerkiksi SIFT-algoritmi on riippu-
maton 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ä al-
kuperäinen kuva voidaan muuntaa harmaasävymuotoon ja esimerkiksi esisuodattaa
kuva epästabiileja piirteitä aiheuttavan kuvakohinan poistamiseksi [1, s. 89]. Har-
maasävymuunnos on kannattavaa tapauksissa joissa piirteet eivät ole väririippuvai-
sia; 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 pik-
seli yksi kerrallaan läpi. Kuvapisteille ja tarvittaessa niiden naapurustoille suorite-
taan vuorotellen haluttuja matemaattisia tarkasteluja, joiden perusteella tunnistetaan
piirteet, eli päätetään mitkä kuvapisteet ovat sopivia piirteiksi. Kuvapisteelle voi-
daan laskea esimerkiksi x- ja y-suuntainen gradientti (kuva 2.1), jonka perusteella
tiedetään sijaitseeko piste reunalla [1, s. 211] – muita keinoja ovat esimerkiksi ku-
vapisteen ää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äi-
sessä 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 saat-
taakin nykyään olla jopa yli 10 miljoonaa kuvapistettä. Näin ollen kuvien keskinäi-
nen 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 ext-
raction) avulla voidaan kuvasta tunnistetut piirteet esittää alkuperäiseen mittausda-
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 saa-
daan 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 neigh-
bor). Lähimmän naapurin menetelmässä piirrevektoria verrataan kaikkiin vertailu-
kuvasta löytyneiden piirteiden piirrevektoreihin, tarkoituksena löytää paras vastaa-
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 objekte-
ja, eli piirrejoukkoja. Puhutaan objektinsovituksesta tai kuvansovituksesta. Eräs toi-
miva tapa objektinsovitukseen on soveltaa lähimmän naapurin menetelmää sekä
klusterointia [10, s. 25(10)]. Sovitettavan objektin alueella sijaitseville kaikille piir-
teille etsitään lähimmät naapurit vertailukuvasta; voi olla että useat piirteet tunnistu-
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ää hajaan-
tuneesta piirrejoukosta mahdollisimman yhtenäisiä ryhmiä eli klustereita. Kluste-
roinnin avulla oikein tunnistuneiden piirteiden muodostava tiivis rypäs pystytään
paikantamaan ja näin ollen objektit saadaan sovitettua [2, 19–21]. Tunnettuja kluste-
rointimenetelmiä 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 riip-
pumattomia skaalasta, kierrosta sekä sijainnista kuvassa. Lisäksi ne ovat robusteja
vähäisille valaistuksen muutoksille, kuvakohinalle sekä pienille geometrisille vääris-
tymille [2, s. 2]; menetelmä onkin varsin mainio apuväline videokuvassa olevien
objektien seurannassa. Muita SIFTin sovelluskohteita ovat panoraamakuvien koos-
tamisessa 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 havai-
ta. 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 tar-
kempaa tunnistuksesta saadaan. Toisaalta piirreavaruuden ollessa kovin suuri saattaa
piirteiden vertailu kuluttaa paljon laskenta-aikaa ja -tehoa, jolloin varsinkin reaaliai-
kaisissa sovelluksissa kohdataan ongelmia. Löytyvien piirteiden lukumäärää on tar-
vittaessa 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 mahdolli-
simman pienelle kuvapistejoukolle – toisin sanoen avainpiste-ehdokkaita eliminoi-
daan 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 voi-
daan 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 objek-
tin 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 merk-
kien hahmottaminen vaikeutuu koko ajan, kunnes jossain vaiheessa merkeistä ei saa
enää selvää. Tämä johtuu merkkien reunojen sumentumisesta, eli korkeimpien taa-
juuksien 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ä kah-
della erikokoisella kuvalla on sama skaala ja toisaalta kahdella samankokoisella ku-
valla voi olla eri skaala – kyse on vain taajuussisällön ja koon välisestä suhteesta.
Skaala ilmoitetaan reaaliluvulla ℝ, jolloin arvo tarkoittaa alkuperäistä
tai sitä täysin vastaavaa objektia. Mitä suurempi skaalan arvo on, sitä enemmän ob-
jektista on suodattunut korkeita taajuuksia pois tai toisaalta sitä pienempi sen koko
on alkuperäiseen verrattuna. Vastaavasti voidaan soveltaa skaalan arvon ollessa ne-
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 kaikis-
ta kuvan skaalavariaatioista tietyllä skaalavälillä. Riippumattomuuden saavuttami-
nen 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 muodos-
tamalla kuvasta jatkuva ja lineaarinen skaalan funktio, jota kutsutaan skaala-
avaruudeksi [7, 11]. Skaala-avaruus koostetaan SIFTin tapauksessa vain 20 skaala-
kuvasta; näin minimoidaan tarvittavan datan määrän toteutuksen ollessa kui tenkin
toimiva ja tehokas.
3.2.3 Skaala-avaruuden muodostaminen
SIFTin skaala-avaruus koostuu neljästä oktaavista. Yksi oktaavi sisältää viisi skaa-
laa, eli keskenään samankokoista, mutta toinen toistaan enemmän alipäästösuodatet-
tua 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ösuodate-
tun 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 tar-
koituksena 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: keskim-
mä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 pin-
ta-ala on alkuperäiseen kuvaan verrattuna nelinkertainen minkä seurauksena stabiile-
ja avainpisteitä löydetään yhtä lailla nelinkertainen määrä. Jotta lopullinen ääriarvo-
jen etsintä kattaisi tasaisesti koko skaala-avaruuden, suodatetaan jokainen oktaavissa
oleva skaalakuva , missä S on oktaavissa olevien kuvien lukumäärä,
Gaussin ikkunalla keskihajonnan arvolla:
σ0 (3.2)
Oktaavin peräkkäisten kuvien on siis aina k-kertainen, jolloin skaala-avaruudesta
saadaan tasavälinen (taulukko 3.1). Vakion k arvoksi on määritetty √ ja vaki-
on σ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 avainpis-
teiden määrä koko skaala-avaruudessa [2, s. 10]. Parametrien k ja σ0 arvoja muutta-
malla voidaan tarvittaessa vaikuttaa avainpisteiden määrään sovelluskohtaisesti.
10
Taulukko 3.1. Skaalan σn arvot oktaaveittain On, kun σ0 = 1.6 ja k = √
σ 1 σ 2 σ 3 σ 4 σ 5
O1 1,600 2,263 3,200 4,525 6,400
O2 3,200 4,525 6,400 9,051 12,800
O3 6,400 9,051 12,800 18,102 25,600
O4 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 ar-
voon nähden, toisin sanoen σ0 kaksinkertaistuu peräkkäisissä oktaaveissa. Aloitus-
kuva 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 ku-
vista Gaussin erotuskuvat (difference of Gaussians). Kyseisessä menetelmässä ok-
taavissa olevat kaksi vierekkäistä, vakion k verran toisistaan eroavaa skaalakuvaa
vähennetään keskenään, jolloin jäljelle jää suodattamaton taajuuskaista spatiaali-
tasoon 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, yhte-
näisten alueiden sekä reunojen löytymistä. Gaussin erotuskuvia lasketaan jokaiseen
oktaaviin yhteensä neljä kappaletta peräkkäisten kuvien erotuksina; erotuskuvat toi-
mivat 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 mak-
simit ja minimit, jotka määrätään avainpiste-ehdokkaiksi. Oktaavin sisältämistä nel-
jästä Gaussin erotuskuvasta kahden keskimmäisen kuvan jokaista kuvapistettä verra-
taan sen kahdeksaan skaalanaapuriin ja yhdeksään naapuriin ylemmällä sekä alem-
malla 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 erotuskuvi-
en 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 avainpiste-
ehdokkaiksi sillä ne eivät ole vielä lopullisia avainpisteitä. Kuvadata on näytteistet-
tyä eli diskreettiä, joten löydetyistä ääriarvoista ei voida sanoa että ne ovat aidosti
ääriarvoja; on mahdollista että oikea ääriarvopiste kelluu jossain kuvapisteiden välil-
lä (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äyt-
tä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ä. Sovitta-
malla 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 sovite-
funktion origosta. Laskemalla yhtälön 3.5 derivaatan
nollakohdat saadaan tu-
loksena 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ä jo-
tain toista kuvapistettä (kuva 3.7). Tällöin alkuperäinen avainpiste-ehdokas hylätään
ja interpolointi suoritetaan seuraavalle kuvapisteelle, joka valitaan uudeksi avainpis-
te-ehdokkaaksi. Proseduuria toistetaan niin kauan kunnes paras mahdollinen approk-
simaatio on saatu laskettua. Lopuksi etäisyys summataan avainpiste-ehdokkaan
sijaintiin, jolloin saadaan riittävä estimaatti lopullisen avainpisteen sijainnista. Täs-
mä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 avainpistei-
den joukosta. Ääriarvojen kontrasti voidaan helposti laskea kaavoista 3.5 ja 3.6 yh-
distetyn 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 pie-
ni. SIFTin tapauksessa kaikki avainpisteet, joille laskettu kontrasti | | eli gra-
dienttisuhde 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 tar-
kasti objektien kulmiin ja reunojen risteyskohtiin kun taas osa sijaitsee jossain objektien
reunojen lähistöllä. Kulmissa ja risteyksissä olevat pisteet, joita kutsuttakoon kulmapis-
teiksi, ovat mainioita avainpisteitä, sillä ne ovat stabiileja ja säilyvät myös skaalan
muuttuessa. Lisäksi ne paikantuvat tarkasti paraboloidin sovituksessa. Sen sijaan reu-
noilla olevat avainpisteet ovat usein epästabiileja liikkuessaan edestakaisin reunoja pit-
kin; 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ä kohinas-
ta ja valaistuksenmuutoksista johtuen, joten kyseiset avainpisteet täytyy eliminoida
Laskemalla jokaiselle avainpisteelle 2x2 -kokoinen Hessen matriisi H (kaava 3.8), voi-
daan 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 avain-
piste 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 muutosnopeuk-
siin, 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 muutos-
nopeuden 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 Lo-
wen tutkimuksesta [2, s. 12].
Lähes kaikki lopulliset avainpisteet on nyt päätetty ja niiden tarkat sijainnit paikallistet-
tu. Seuraavassa aliluvussa määritetään avainpisteiden asento.
3.4 Avainpisteiden asennon määrittäminen
Avainpisteellä on naapurustonsa perusteella tietty asento, eli kiertokulma, jonka tunte-
malla avainpiste voidaan esittää asennosta riippumattomana piirrevektorinsa avulla.
Jokainen piirrevektori muodostetaan suhteessa avainpisteen asentoon; näin ollen kuvas-
sa 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 laske-
taan 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ä gra-
dientin voimakkuuksia painotetaan pyöreällä Gaussin ikkunalla (kuva 3.10), jolloin
asennon määrittäminen perustuu pääasiassa avainpisteen lähimpiin naapureihin. Ik-
kunan 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 vas-
taava painotettu gradientin voimakkuus lisätään histogrammissa oikeaan osaväliin,
jonka jälkeen arvot normalisoidaan välille jakamalla kaikki arvot histogram-
min maksimiarvolla. Nyt histogrammin huippuarvot kuvaavat siis avainpisteen ym-
päristössä vallitsevia orientaatioita. Näistä arvoista korkeinta huippua vastaava osa-
väli valitaan avainpisteen suurpiirteiseksi asennoksi. Lisäksi jokaisesta yli 0.8 kor-
kuisesta huipusta luodaan uusi avainpiste joka eroaa alkuperäisestä avainpisteestä
vain orientaationsa osalta. Lopuksi sovitetaan toisen asteen paraabeli jokaisen löyde-
tyn huipun kolmen lähimmän naapurin arvoihin, jolloin paraabelin maksimiarvosta saa-
daan määritettyä avainpisteen tarkka asento [2, s. 13].
16
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 luotetta-
vuuteen ratkaisevasti [2, s. 13].
3.5 Piirrevektorin luominen
Tässä vaiheessa avainpisteille on määritelty sijainti, skaala sekä asento. Näiden para-
metrien perusteella voidaan jokainen avainpiste jo yksilöidä, mutta tehokkaamman ver-
tailun saavuttamiseksi avainpisteistä luodaan niitä kuvaavat piirrevektorit. Piirrevekto-
reiden luomisen perustana käytetään lähestymistapaa biologiseen näköön; tarkemmin
sanottuna prosessissa pyritään mallintamaan primäärisen näköaivokuoren (V1) komp-
leksisten 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 re-
septiivisen 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ä ole-
vasta kuvapyramidin kuvasta. Kulmat suhteutetaan avainpisteen asentoon saavuttaak-
semme riippumattomuuden asennosta. Käytännössä tämä tapahtuu vähentämällä kaikis-
ta lasketuista kiertokulmista alkuperäisen avainpisteen asento. Koska avainpiste on ha-
kualueen 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 vali-
taan puolet laskenta-alueen koosta, eli tässä tapauksessa σ = 8. Painotuksen tarkoitukse-
na on estää äkilliset muutokset piirrevektorissa avainpisteen liikkuessa vähäisen määrän
kuvan alueella [2, s. 15–16].
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
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 ker-
too 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 pai-
notettu histogrammi, jonka muodostavat kahdeksan yhtä suurta osaväliä. Osaväleistä
kukin kattaa siis 45° laajuisen sektorin. Nämä 4x4 kuvapisteen kokoiset histogrammi-
ikkunat mahdollistavat yksittäisen kuvapisteen liikkumisen kuvassa jopa neljän pikselin
verran vaikuttamatta piirrevektorin arvoihin. Tästä syystä yksittäiset objektit voivat siir-
tyä kuvassa huomattaviakin määriä ilman että piirteiden tunnistettavuus kärsii. Ikkunoi-
ta voidaankin verrata aiemmin mainittuihin silmän verkkokalvon reseptiivisiin kenttiin.
Lopuksi muodostetaan piirrevektori v asettamalla peräkkäin kaikki 16 histo-
grammia – 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 voi-
makkuuksia samassa suhteessa. Kirkkauden lineaarinen vaihtelu, eli vakioarvon sum-
maaminen kuvapisteen intensiteettiarvoon, ei kuitenkaan vaikuta vektorin arvoihin, sillä
gradientin voimakkuudet lasketaan kuvapisteiden välisistä eroista jotka tässä tapaukses-
sa pysyvät suhteessa samoina. Sen sijaan epälineaariset kirkkauden vaihtelut, jotka joh-
tuvat lähinnä kameran saturaatiosta sekä kolmiulotteisten kappaleiden valaistuksen
vaihteluista, vaikuttavat joidenkin gradienttien suhteellisiin voimakkuuksiin kasvatta-
malla 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 Lo-
wen tutkimuksissa vertailemalla eri valaistuksissa otettuja kuvia samoista kolmiulottei-
sista 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ä hienoi-
sille geometrisille vääristymille. Seuraavassa luvussa testataan SIFT-menetelmän toimi-
vuutta käytännössä.
18
4 SIFT-MENETELMÄN TESTAUS
Tässä luvussa testataan SIFT-menetelmän toimivuutta tarkastelemalla kuvasta löytynei-
den stabiilien avainpisteiden määrää, algoritmin ajallista suorituskykyä sekä piirteen- ja
kuvansovituksen toimivuutta. Testikuvana käytettiin neliön muotoista, 2048x2048 ku-
vapisteen kokoista valokuvaa, joka sisältää erimuotoisia sekä -kokoisia objekteja – li-
sä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 MATLAB-
toteutusta [18]. Harrisin kulmatunnistin perustuu nimensä mukaisesti ainoastaan kuvan
objekteista etsittäviin kulmiin, joten SIFTiin verrattuna se on toteutukseltaan huomatta-
vasti 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öy-
dettyjen avainpisteiden määrää. Mitä suurempi määrä stabiileja avainpisteitä pystytään
paikantamaan, sitä suuremmalla todennäköisyydellä objektit ja yksittäiset piirteet saa-
daan sovitettua ja täsmättyä. Testiskriptinä käytettiin silmukkarakennetta, joka pienen-
tää 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
amount_sift(n) = sift(img_res) % avainpisteiden etsiminen
amount_harris(n) = harris(img_res)
end
19
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öydet-
tyjen 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 luotettavuu-
desta 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äy-
tä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 suh-
teuttaa 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äy-
tetty testiskripti on sama kuin luvussa 4.1
1
10
100
1000
10000
Sivunpituus (px) / avainpisteiden määrä
Avain
pis
teid
en
määrä
SIFT
Harris
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
128 137 147 158 171 187 205 228 256 293 342 410 512 683 1024 2048
20
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 sivunpi-
tuudelle 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 testikokoon-
panolla 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 aja-
tella, 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 suoritusai-
kaa merkittävästi.
4.3 Piirteen- ja kuvansovitus
Piirteensovituksen eksakti tarkastelu vaatisi tuhansia, ellei jopa kymmeniätuhansia piir-
teitä 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 piirteenso-
vituksen osalta kuitenkin vain karkeaan tarkasteluun. Tarkoituksena on testata SIFT-
menetelmän soveltuvuutta avainpistejoukkojen sovittamiseen kahden kuvan välillä, ot-
taen huomioon skaala-, ja asentoriippumattomuuden sekä robustisuuden kuvakohinalle.
Käytännössä tämä toteutetaan laskemalla kahdelle kuvalle SIFT-avainpisteet, ja etsimäl-
lä kullekin avainpisteelle sen lähin vastine vertailukuvasta käyttämällä lähimmän naapu-
rin menetelmää. Lisäksi lasketaan vastinpiirrevektoreiden välisen kulman kosini θ kaa-
van 4.1 avulla; kulma saa kosinin arvoja välillä , ja sen avulla voidaan määrit-
0,1
1
10
100
Sivunpituus (px) / suoritusajat (s)
Aik
a (
s)
SIFT
Harris
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
128 137 147 158 171 187 205 228 256 293 342 410 512 683 1024 2048
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 tapauk-
sessa 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.1)
4.3.1 Kohinasietoisuus
SIFT-menetelmän kohinasietoisuutta testattiin lisäämällä testikuvaan normaalijakautu-
nutta kohinaa progressiivisesti. Kohinan lisääminen toteutettiin yksinkertaisella silmu-
kalla käyttäen MATLABin imnoise–funktiota, jonka parametreina annettiin kohinatyy-
piksi normaalijakautunut kohina (gaussian), kohinan keskiarvoksi valittiin 0, ja varians-
sin σ arvoa muutettiin silmukan sisällä kohinan määrän lisäämiseksi:
for n = 1:N
% 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 avainpistei-
den määrä
match(img, img_noisy);
end
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.
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ä testi-
kuvasta (410 x 410 px) löytyneiden avainpisteiden lukumäärä 606 kpl (100 %).
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
Täsm
än
ne
ide
n a
vain
pis
teid
en
os
uu
s
%
Kohinan varianssi σ²
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ä kohi-
nan lisääntyessä kuvaan syntyy paljon epästabiileja avainpisteitä joita kaikkia SIFT-
algoritmi 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ää paik-
kaansa 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 kier-
roksen 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 sovit-
taa missä tahansa kuvan asennossa välillä 1-360°.
Kuva 4.6. Kiertoriippumattomuuden testausta piirteensovituksessa. Vasemmalla rajattu alue testikuvasta,
ja oikealla vastaava alue 90° kierrettynä.
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 kiertoriippumattomuu-
desta.
4.3.3 Skaalariippumattomuus
Skaalariippumattomuutta tutkittiin pienentämällä testikuvan spatiaalista skaalaa prog-
ressiivisesti 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 avainpistei-
den lukumäärään, mikä on esitetty kuvassa 4.7.
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 ker-
taa, 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. Testikuvas-
sa 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 prosent-
tia. Tämä tarkoittaa, että pienennetyistä kuvista löydettiin hyvin paljon samoja avainpis-
teitä kuin alkuperäisestä kuvasta.
60%
65%
70%
75%
80%
85%
90%
95%
100%
Täsm
än
neid
en
avain
pis
teid
en
osu
us
Skaala
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 al-
kuperäisen testikuvan välillä. Ei voida kuitenkaan sanoa että SIFT olisi täysin riippuma-
ton 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.
25
5 JOHTOPÄÄTÖKSET
Työssä esiteltiin piirteisiin sekä piirteentunnistukseen ja -sovitukseen liittyvää perusteo-
riaa, mutta pääpaino oli SIFT-piirteentunnistusalgoritmin yksityiskohtaisessa tarkaste-
lussa sekä algoritmin soveltuvuudessa piirteensovitukseen. SIFT-algoritmin jakautuessa
neljään päävaiheeseen, jokainen vaiheista käytiin yksitellen läpi kuvaten niissä suoritet-
tavat matemaattiset operaatiot sekä toimintojen syyt ja seuraukset. Lisäksi algoritmia
testattiin eri menetelmillä, tarkoituksena ottaa selville pitääkö SIFTin kohdalle asetetut
väitteet riippumattomuudesta ja robustisuudesta paikkaansa – samalla tarkasteltiin algo-
ritmin toimivuutta piirteen- ja kuvansovituksessa.
Vaikka SIFT onkin teknologian näkökulmasta ajateltuna suhteellisen vanha me-
netelmä, testien perusteella se on kuitenkin erittäin kilpailukykyinen ja luotettava mene-
telmä piirteentunnistuksen sektorilla. Niin yksittäiset piirteet kuin piirrejoukot on mah-
dollista sovittaa SIFTin avulla eri kuvien välillä, ja testituloksiin viitaten voidaan sanoa
että algoritmi toimii lähes virheettömästi normaaliolosuhteissa. Tässä työssä esiteltyjen
testien ulkopuolisista menetelmistä yksi parhaista olisi ehdottomasti subjektiivinen ver-
tailu, jossa voitaisiin tarkastella menetelmän luotettavuutta ihmisen näkökulmasta; tie-
tokoneen tekemä testaus on usein eksaktia tulosten ollessa yleensä vain suuntaa antavia
lukuarvoja, joiden perusteella on hyvin vaikea sanoa mitään tulosten oikeellisuudesta.
Ihmisen biologinen näkö osaa kuitenkin kertoa onko objekti tunnistettu oikein, tai esiin-
tyykö esimerkiksi panoraamakuvassa luonnottomia virheitä, jotka ehkä tietokoneen mu-
kaan olisivat merkityksettömiä.
Algoritmin ollessa riippumaton skaalasta sekä kierrosta, sen ollessa häiriönsie-
tokykyinen useille ominaisuuksille, ja sen toimiessa universaalisti monenlaisille kuville,
voidaankin vain ihmetellä mitä algoritmilta voitaisiin enää vaatia. Suurin ongelma
SIFTin kohdalla on kuitenkin vielä tänä päivänä, yli kymmenen vuotta algoritmin kehit-
tämisen jälkeen, laskentatehokkuus. SIFT on monivaiheinen algoritmi ja se sisältää
useita raskaita laskuoperaatioita, joten tehokkaammallakin tietokoneella reaaliaikainen
laskenta ei luultavasti olisi mahdollista. Teknologisen kehityksen valossa on kuitenkin
vain ajan kysymys, milloin SIFTin toiminta tavallisella kotitietokoneella saataisiin reaa-
liaikaiseksi, ja näin ollen algoritmille voitaisiin löytää uusia käyttökohteita.
26
LÄHTEET
[1] Szeliski, R. Computer Vision: Algorithms and Applications. 1st Edition, Springer
2011. 812p.
[2] Lowe, D. 2004. Distinctive Image Features from Scale-Invariant Keypoints. In: In-
ternational Journal of Computer Vision. Vol. 60(2). Springer. pp. 91-110.
[3] Liu, G., Austen, E., Booth, K., Fisher, B., Rempel, M. & Enns, J. Multiple object
tracking is based on scene, not retinal, coordinates. In: Journal of Experimental
Psychology: Human Perception and Performance, Vol 31(2), April 2005. pp. 235-
247.
[4] Doignon, C., Nageotte, F., Maurin, B. & Krupa, A. 2008. Pose Estimation and
Feature Tracking for Robot Assisted Surgery with Medical Imaging. In: Kragic, D
& Kyrki, V (ed.). Unifying Perspectives in Computational and Robot Vision. Vol.
8. 2008, Springer. pp. 79-101.
[5] Gray, J. 2009. Deeply-Integrated Feature Tracking for Embedded Navigation.
Dissertation. Ohio, USA. Air Force Institute of Technology. 92 p.
[6] Yilmaz, A., Javed, O. & Shah, M. 2006. Object tracking: A survey. ACM Comput.
Surv. Vol. 38(4), Article 13. 45p.
[7] Witking, A. Scale-space filtering. Proceedings of the 8th international Joint Con-
ference on Artificial Intelligence, Karlsruhe, Germany, 1983. San Francisco, CA,
USA 1983, Morgan Kaufmann Publishers Inc. pp. 1019–1022.
[8] Harris, C., Stephens, M. A combined corner and edge detector. Proceedings of the
4th Alvey Vision Conference, Manchester, UK, August31 – September 2, 1988.
pp. 147-151.
[9] Lowe, D. Object Recognition From Local Scale-invariant Features. Proceedings
of the International Conference on Computer Vision, Kerkyra, Greece, September
20-27, 1999. pp. 1150–1157.
[10] Duda, R., Hart, P. & Stork, D. Pattern Classification. 2nd Edition, Wiley-
Interscience 2000. 654 p.
[11] Brown, M., Lowe, D. Invariant Features from Interest Point Groups. British Ma-
chine Vision Conference, Cardiff, Wales, September, 2002. pp. 656-665.
27
[12] Lindeberg, T. 2008. Scale-space. In: Wah, B. (ed.). Encyclopedia of Computer
Science and Engineering. Vol. 4. Hoboken, New Jersey, John Wiley and Sons. pp.
2495-2504.
[13] Lindeberg, T. Scale-Space Theory in Computer Vision. Kluwer Academic Publish-
ers/Springer, Dordrecht, Netherlands, 1994.
[14] Burt, P., Adelson, E. The Laplacian Pyramid as a Compact Image Code. In: IEEE
Transactions on Communications, Vol. Com-3l, No. 4, April 1983. pp. 532-430.
[15] Edelman, S., Intrator, N,. & Poggio, T. Complex cells and Object Recognition.
NIPS 97, 1997.
[16] Gonzalez, R. C., Woods, R. E. Digital Image Processing. 2nd Edition, Prentice
Hall 2002. 793 p.
[17] Keypoint detector [WWW]. [viitattu 7.5.2011]. Saatavissa:
http://www.cs.ubc.ca/~lowe/keypoints/.
[18] Harris Corner Detector – File Exchange – MATLAB Central [WWW]. [viitattu
7.5.2011]. Saatavissa: http://www.mathworks.com/matlabcentral/fileexchange/
9272-harris-corner-detector.
[19] Shi, J., Tomasi, C. Good Features to Track. IEEE Conference of Computer Vision
and Pattern Recognition, Seattle, WA , USA, June