INF2310 vår 2010 - UKEOPPGAVER 6

Oppgave 1 - Randeffekter ved konvolusjon
Diskuter fordeler og ulemper ved "reflected indexing" og "circular indexing" når man konvolverer et bilde med en filtermaske.

Oppgave 2 - Lag et program for gradient-estimering med Sobel-operatoren
Mange av dere har sikkert en intuitiv forståelse av konvolusjon, og mange kan reprodusere ligningen for konvolusjon mellom et bilde og et filter. Men praktisk forståelse henger veldig sterkt sammen med det å ha programmert operasjonen. Du skal derfor få lov til å programmere en fundamentalt viktig konvolusjons-operator, uten å bruke en ferdig program-pakke. Bruk gjerne Matlab.

Du skal først lage et program som utfører konvolusjonen av et gitt bilde og de to filtermaskene i Sobel-operatoren. Det vil si at for hvert filter skal programmet flytte filteret rundt i alle posisjoner der minst ett punkt i filtret ligger innenfor bildet. For hver posisjon skal programmet ved hjelp av to for-løkker løpe gjennom alle multiplikasjonene, addere disse sammen, dividere med riktig faktor og skrive resultatet til rett posisjon i et ut-bilde. Resultatet skal være to bilder som inneholder hhv gradientkomponenten i x-retning og gradient-komponenten i y-retning. Husk at etter konvolusjonen skal gradientkomponentene være positive for kanter der intensiteten øker fra venstre mot høyre og nedenfra og oppover i bildet. Pass på at du får med fortegnet i ut-bildet.

Deretter skal du lage et program som produserer et gradientmagnitude-bilde fra de to gradientkomponent-bildene. For hver pikselposisjon skal du altså kvadrere hver av de tilsvarende pikselverdiene i de to produserte bildene, summere, beregne kvadratroten og skrive resultatet i et nytt ut-bilde.

Du skal slippe å produsere det bildet som inneholder retningen til maksimal lokal gradient (arctan(gy/gx).

Bildet du skal kjøre på ligger på ~inf2310/bilder og heter mona.png (eller bruk http://www.uio.no/studier/emner/matnat/ifi/INF2310/v10/undervisningsmateriale/bilder/mona.png        .

Det er meningen du skal bruke koden du laget tidligere til å lese og skrive bilder til fil. Men du skal IKKE bruke noen ferdigdefinerte Sobel-verktøy eller andre ferdige konvolusjons-prosedyrer. Du skal programmere konvolusjonen slik at du overbeviser både deg selv og oss om at du har forstått "mekanikken" i konvolusjon!
Du bør produsere følgende:
Program: Din egen kildekode.
Bilder: resultat-bildene gx(x,y), gy(x,y) og G(x,y)

Oppgave 3 - Gjentatt konvolusjon
Diskuter effekten av gjentatt konvolusjon med samme lavpass-filter, f.eks. et 3x3 filter med 1/9 i alle posisjoner. Se bort fra rand-effekter.
Hint: I oppgaven ovenfor har vi ikke sagt noe om hvordan bildet ser ut. Vi betegner bildet med f(x,y) og filteret med h(i,j). Anta for enkelhets skyld at bildet er kvadratisk, NxN piksler. Vil det hjelpe om vi bruker "superposisjon", dvs at vi betrakter bildet som en sum av høyst NxN bilder, der hvert bilde bare har ett piksel som er forskjellig fra 0?