IN2070 vår 2021 - UKEOPPGAVER 7

Disse oppgavene omhandler implementering av konvolusjon og uthenting av kantinformasjon fra et bilde ved bruk av Sobel-filtrering.

Oppgave 2 i den første obligatoriske oppgaven dekker betydelig deler av denne ukens temaer. Oppgavene under kan brukes som en forberedelse til den oppgaven eller gjøres i etterkant. Husk også å gjøre forrige ukes oppgaver ettersom disse tester litt andre ferdigheter og kunnskap.

Begge oppgavene under omhandler programmering, og det er meningen at du skal implementere ting fra "scratch". Bruk det språket du vil (men kanskje helst Matlab eller Python). Bilder til å teste implementasjonen din kan du finne her (og stort sett overalt ellers på internett).

Det vil ikke bli lagt ut løsningshint til disse ukeoppgavene, men du kan enkelt sjekke om din implementasjon er korrekt ved å sammenligne resultatene du får med din egne implementasjon med resultat du får ved bruk av ferdige funksjoner. I Matlab kan du eksempelvis estimere gradientkomponentene til bildet f ved bruk av 3x3-Sobel-operatoren slik:

hx = fspecial('sobel');
% alternative: hx = [1 2 1 ; 0 0 0 ; -1 -2 -1];
gx = imfilter(f, hx,  'conv');
gy = imfilter(f, hx', 'conv');
% note 1 about imfilter: X = 0 (zero padding) is the default boundary option
% note 2 about imfilter: 'same' is the default output size option

Tilsvarende kan gjøres i Python slik:

from scipy import signal
hx = np.array([[1, 2, 1],
               [0, 0, 0],
               [-1, -2, -1]])
gx = signal.convolve2d(f, hx,             mode='same')
gy = signal.convolve2d(f, hx.transpose(), mode='same')
# alternative: hx.transpose() can be replaced by np.rot90(hx, 1)
# note about scipy.signal.convolve2d:
# boundary='fill' and fillvalue=0 (zero padding) is the default

I Python finnes det også en funksjon som kan brukes til å gjøre dette mer direkte:

from scipy import ndimage
gx = ndimage.sobel(f, 1, mode='constant')
gy = ndimage.sobel(f, 0, mode='constant')
# note about scipy.ndimage.sobel:
# cval=0 (zero padding) is the default when mode is 'constant'

Oppgave 1 - Generell konvolusjon

Implementer en generell funksjon som konvolverer et input 2D-bilde med et input 2D-filter som har odde sidelengder. Resultatbildet skal ha samme størrelse som inputbildet, og du kan benytte nullutviding.

Oppgave 2 - Kantinformasjon ved Sobel-filtrering

Bruk konvolusjonsfunksjonen du lagde i oppgave 1 til å estimere den vertikale og den horisontale gradientkomponenten til et bilde ved bruk av 3x3-Sobel-operatoren (prøv gjerne med andre filterstørrelser også). Bruk gradientkomponentestimatene til å beregne tilhørende estimat av gradientmagnituden og gradientretningen.

Publisert 13. jan. 2021 07:55 - Sist endret 1. mars 2021 22:36