Algoritmer som skal kjenne igjen objekter i bilder, må ofte først finne hva som er grensene for ulike objekter i et bilde. En måte kan være å se etter endringer i farge. Om en ser på en og en rad vannrett eller loddrett, vil en stor endring i farge tilsvare en stor derivert langs den vektoren.
For treningens del er det greit å lage en egen derivert-funksjon. Om det er viktige data, bør en heller bruke np.gradient()
def derivert(l):
l = l.astype(float) # Vi skal dele tallene, det fungerer best med float.
d = np.zeros(l.shape)
d[0] = l[1]-l[0]
d[-1] = l[-1]-l[-2]
for i in range(1,len(l)-1):
d[i] = (l[i+1]-l[i-1])/2
return d
Her deriverer vi hver rad for seg, for å vise kantene som går loddrett.
dx = np.zeros(b.shape)
sx = b.shape[0]
for i in range(sx):
dx[i,:] = np.abs(derivert(b[i,:]))
visBilde(dx)

Om en deriverer både radene og kolonnene, og legger sammen resultatene, får en kantene både vannrett og loddrett.
def finnKanter(bilde):
sx, sy = bilde.shape
dx = np.zeros(bilde.shape)
dy = dx
for i in range(sx):
dx[i,:] = derivert(bilde[i,:])
for i in range(sy):
dy[:,i] = derivert(bilde[:,i])
kanter = np.absolute(dx) + np.absolute(dy)
return kanter.astype(np.uint8)
k = finnKanter(b)
visBilde(k)

Herfra kan ulike strategier forsøke å dele opp bildet i ulike deler for å kjenne igjen ulike deler. Eller objekter kan kjennes igjen ut fra egenskapene til kantene.
Oppgaveforslag
- De to bildene som viser «deriverte» har ulik intensitet fordi verdiene legges sammen. Bruk histogramutjevning på begge for å forsterke forskjellene og gjøre kantene mer tydelige.
- Hvordan kan du sikre at verdiene for de «deriverte» ikke overstiger 255?