Gå til innhold

Anbefalte innlegg

Språket er ActionScript3 men metoden jeg er ute etter er vel ganske generell.

 

Jeg har tatt et bilde med et webcamera og det jeg ønsker å gjøre er å rette opp dette bildet.

 

328420.jpeg

 

Ovenfor er hva jeg prøver å få til(basic tegning).

 

Noen som kan kanskje linke meg sider som har tutorials på dette?

Lenke til kommentar
Videoannonse
Annonse

Du må nok bare prøve deg frem med affine transformasjoner til du får ønsket effekt. Affine transformasjoner er et begrep i lineær algebra og betyr egentlig bare at du må bruke matriser for å rotere og flytte bildet ditt sånn at det blir rett. Hvis du har noen referansepunkter (som du har, siden du vet hvordan bildet skal være når det er ferdig), så kan du f.eks tegne en prikk i hvert hjørne, og så gjøre det samme i hvert hjørne der du vil bildet ditt skal ende opp. Da vil du ende opp med et lineært likningssystem med 8 ukjente koeffesienter som du må løse for å finne matrisen som flytter bildet ditt slik du vil. Det kan kanskje være litt vanskelig hvis du ikke kan lineær algebra, så mitt tips er at du leser litt om transformasjoner og rotasjoner med matriser og så prøver du å implementere f.eks matrisemultiplikasjon i koden din (det er veldig lett, står tusenvis av steder på nettet). Hver pixel blir da en vektor som blir transformert av matrisen til sin nye plass. Og så kan du rotere og flytte bildet akkurat som du vil ved hjelp av matrisen helt til du er fornøyd.

 

Men det er bare det første steget desverre, når du har gjort det (flyttet alle pikslene til sine nye posisjoner), så må du gi dem ny farge også ved å interpolere. Det som gir best resultat er å gå "baklengs", altså for hver pixel i det nye bildet, så må du finne den gamle pikslen som den ble mappet fra. Det gjør du ved å invertere matrisen, T^(-1) er vanligvis notasjonen hvis T er matrisen. Fins et par metoder for interpoleringen, bl.a. nearest neighbor, bilinear interpolation og bicubic interpolation. Nearest neighbor suger så den trenger du ikke bry deg om. Men de to andre går kort fortalt ut på å se på verdiene til 4 og 16, henholdsvis, av nabopikslene til den gamle pikslen og ta gjennomsnittet av de. Så har du fargen på den nye pikslen. Det kan høres litt komplisert ut, men det er egentlig veldig rett frem.

 

Søk litt på matrix tutorial og bilinear filtering og neighboring pixels osv.

 

edit: eh, er det et bilde du skal gjøre dette med eller mange? Blir hvert bilde skjeivt liksom også vil du ha noe som automatisk retter det opp? Og programmmere noe som gjør det automatisk kan som sagt bli litt vrient hvis du ikke kan lineær algebra, men hvis du bare skal gjøre det med et bilde så er kanskje photoshop bedre? Eller så kan du finne matrisen manuelt første gangen og så bruke den hver gang (sett at bildet blir feil perspektiv likt hver gang da..)

 

http://www.uio.no/studier/emner/matnat/ifi...isningsplan.xml

Se spesielt på pdf nr. 4 om geometriske operasjoner. Der står det en algoritme for å "baklengsmappe" som jeg forklarte over og står også om interpolasjon og samregistrering av bilder (som er det du egentlig vil gjøre).

Endret av teflonpanne
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...