ProjectsMotionAnalysis

From ImageWiki

Jump to: navigation, search

Contents

Bevægelsestatistik

Formålet med projektet er at indsamle statistik omkring hvor meget bevægelse der er i de enkelte dele af et rum. Er der mere bevægelse omkring colaautomaten end der er omkring håndvasken? Det endelige resultat bliver forhåbentligt et farvekodet kort af et rum hvor én farve angiver meget bevægelse og en anden farve angiver ingen bevægelse.

Formålet med denne side er både at fungere som notesbog for gruppen og som statusside I andre kan følge med i (hvis I er til den slags).

For god ordens skyld bør det nævnes at dette delprojekt udarbejdes af:

Strategi

Den første observation der skal gøres omkring løsningen til problemet er, at robotten skal køre rundt og kortlægge verdenen samtidigt med statistikken opsamles. Dette udelukker den simple tilgang, nemlig at lade robotten stå stille og lade den analysere differensbilleder. Robotten skal altså være i stand til at adskille den del af ændringen i billedet der skyldes robottens egenbevægelse.

En strategi er at se på optisk flow og finde den del af flowet der ikke skyldes egenbevægelse. Da robottens bevægelse kendes pga. odometrien bør dette være muligt.

Nelsons første metode

I Nelson, R. C. (1991) Qualitative detection of motion by a moving observer. International Journal of Computer Vision, 7: 33--46 præsenteres to metode til detektion af bevægelse når kameraet også bevæger sig. Den første metode er implementeret og giver lovende resultater. Dog kan den kun detektere bevægelige kanter. Nelsons tilgang er meget praktisk, hvilket betyder at metoden har en rimelig chance for at fungere. Desuden afprøves metoden på virkelig data, hvilket langtfra altid er tilfældet. Andre artikler afprøver kun deres metoder på syntetisk data, hvilket langtfra er overbevisende.

Et problem ved estimation af optisk flow er at det lokalt kun er muligt at beregne flow i den lokale gradients retning (normal flow). Dette kaldes the Aperature Problem. Det er altså ikke umiddelbart muligt at beregne flow og efterfølgende frasortere bevægelse der skyldes egenbevægelse. Nelson viser hvorledes det er muligt at sætte begrænsninger på flowet i gradientretningen således at egenbevægelse kan frasorteres.

Afprøvning af Nelsons første metode

Her skal vi nok skrive et par kommentarer og vise et par billeder, men det må lige vente en dags tid eller to.

Nelsons anden metode

Den anden metode Nelson foreslår baserer sig på den observation at den del af flowet der skyldes egenbevægelse ofte vil være en glat funktion af tiden. Bevægelser der er uafhængige af egenbevægelsen vil derimod være mindre kontinuære. Eksempel: Når vi går en tur bevæges det ene ben mens det andet står stille, hvilket betyder at bevægelsen består af små bratte "skridt".

Idéen er at benytte flow beregnet udfra tiden t og t-1 til at forudsige flowet der beregnes udfra t+1 og t. Hvis flowet ikke er forudsigeligt vurderes det at dette skyldes en anden bevægelse end robottens.

Metoden er blevet implementeret og indledende afprøvninger viser at resultaterne minder meget om dem der fås med Nelsons første metode. Umidelbart er årsagen til dette at begge metoder kun kan giver fornuftige resultater i områder hvor der er store gradienter. Dette betyder at begge metoder er i stand til at detektere kanter der har bevæget sig, men ikke flader der har bevæget sig. Det ville være fordelagtigt hvis der kunne interpoleres mellem disse kanter således at segmenter kunne udtrækkes, men dette er formentlig for stor en opgave.

Andre metoder

Andre tilgange end Nelsons er selvfølgelig blevet overvejet, men de er uden store overvejelser blevet afvist. I dette afsnit vil de indtryk man får af at læse en artikel på fem minutter udgøre basis for at sige grimme ting om andre metoder end Nelsons.

I Computing Egomotion and Detecting Independent Motion from Image Motion Using Collinear Points (1996) antages det at robottens bevægelse ikke er kendt, hvorfor denne estimeres. Dette er fokus for artiklen, der giver et umiddelbart fornuftigt bud på hvorledes egenbevægelsen kan estimeres. Forfatterne erkender at deres metode fejler når der er for megen bevægelse der ikke skyldes robotten. Derfor forsøger de at finde denne bevægelse før de estimerer egenbevægelse. Dette betyder at deres tilgang kan anvendes i projektet, men desværre er denne del af deres resultater mindre overbevisende. Skulle egenbevægelse derimod estimeres ville artiklen være relevant, men til detektion af anden bevægelse er dette ikke tilfældet.

I Takumi Ebine og Nozomu Hamada (2002) Detection of Moving Objects Using Observer Motion-Based Optical Flow Estimation benyttes optisk flow til at detektere objekter der bevæges. Fokus for artiklen er på at måle hvor meget vi tror på at en pixel har bevæget sig uafhængigt af kameraet. Det beskrives (umiddelbart - så godt er artiklen heller ikke læst) ikke hvorledes flow skal beregnes for at løse denne opgave, hvilket betyder at forskellige flow estimeringsteknikker skal afprøves. Dette er dog ikke relevant for artiklen da denne benytte syntetisk data, hvilket praktisk talt fjerner flowestimationsproblemet. Dette betyder at det ikke rigtigt er muligt at vurdere hvor gode resultater der opnås i artiklen. Resultaterne er ikke specielt gode, hvilket er bekymrende eftersom virkelig data ikke en gang benyttes. Artiklen virker altså ikke særligt overbevisende...

En umiddelbart nydelig tilgang tages i J.-M. Odobez og P. Bouthemy (1994), Detection of multiple moving objects using multiscale Markov random fields. Her præsenteres en statistisk model for objektbevægelse der benytter Markov Random Fields. Der opnås umiddelbart ganske pæne resultater, men metoden er ikke designet med køretid i tankerne. I 1994 krævedes 3 sekunders beregningstid for at behandle et 256x256 billede. Selvom Moore's lov har givet betydeligt hurtigere maskiner er det dog tvivlsomt om denne metode kan køre i sand tid parallelt med vSLAM. Hvis der er tid til det, vil det være relevant at implementere metoden for at vurdere dette, men tiden er den afgørende faktor.

Datastruktur til bevægelseskort

For at kunne gemme information om mængden af bevægelse forskellige steder i verdenen er det (oplagt) nødvendigt at have en datastruktur til dette. Umiddelbart kan ERSP's datastrukturer til gridmaps ikke benyttes da disse ikke giver mulighed for at gemme vilkårlig data i et felt (eng. grid).

Vi har derfor valgt at implementere en datastruktur til dette selv. Da det på forhånd ikke er til at sige hvor stort et kort der er behov for skal dette være dynamisk udvideligt. Vi har valgt at benytte en to dimensionel hashtabel (std::map<std::pair<int,<int>, data> i C++) som repræsentation da dette er enkelt at implementere og samtidigt bør være både effektivt og fleksibelt.

Med denne struktur kan robotten vise sit kort over bevægelsen mens det opbygges. Denne visualisering er primært lavet med henblik på at give en demonstration bevægelsesdetektoren. Denne visualisering ser endda fin ud så den skulle nok kunne bruges på demodagen :-)

Resultater

Metoden kører ved at, i hver iteration af robottens samlede system, beregne antallet af billedpunkter der bevæger sig uafhængig af robotten. Dette tal gemmes sammen med robottens position og retning og et tidsstempel. Denne data visualiseres når robotten stopper vha. Matlab.

Visualiseringen foregår ved at fremskrive robottens position i den retning robotten kigger. Derved fås et bud på hvor bevægelsen primært foregår (man kan dog diskutere hvor godt det bud egentlig er). Billedpunkter i kortet der ligger tæt på denne fremskrivelse tildeles en vægt der fås ved at se på afstanden mellem det fremskrevne punkt og billedpunktet. Billedpunktets "bevægelsesværdi" forøges herefter med vægten gange det fundne antal billedpunkter som bevæger sig uafhængigt af robotten. Til sidst divideres hvert billedpunkt i kortet med summen af de, til punktet hørende, vægte. Derved fås resultater som nedenfor.

Motionmap1.png

Personal tools