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.