Konvolusjon brukes til mange ting som å beregne derivater, oppdage kanter, bruke uskarphet osv. og alt dette gjøres ved å bruke en 'convolution kjerne'. En konvolusjonskjerne er en veldig liten matrise, og i denne matrisen har hver celle et nummer og også et ankerpunkt.
Ankerpunktet brukes til å vite posisjonen til kjernen i forhold til bildet. Den starter i øverste venstre hjørne av bildet og beveger seg på hver piksel sekvensielt. Kjernen overlapper noen få piksler i hver posisjon på bildet. Hver piksel som overlappes, multipliseres og legges til. Og summen settes som verdien av gjeldende posisjon.
Konvolusjon er prosessen der hvert element i bildet legges til sine lokale naboer, og deretter blir det vektet av kjernen. Det er relatert til en form for matematisk konvolusjon.
I konvolusjon utfører ikke matrisen tradisjonell matrisemultiplikasjon, men den er betegnet med *.
Anta at det er to 3x3-matriser, en er kjerne og en annen er en bildedel. I konvolusjon snus rader og kolonner i kjernen og deretter multipliseres de og summeres deretter. Elementer som er tilstede i midten av matrisen, dvs. i [2,2] av bildet, vil bli vektet kombinasjon av bildematrisen og vektene vil bli gitt av kjernen. På samme måte vil alle de andre elementene i matrisen bli vektet og deretter vil vektene bli beregnet.
Følgende er pseudokode for å beskrive konvolusjonsprosessen:
For each image row in input image: For each pixel in image row: Set accumulator to zero For each kernel row in kernel: For each element in kernel row: If element position corresponding* to pixel position then Multiply element value corresponding*to pixelvalue Add result to accumulator Endif Set output image pixel to accumulator
Konvolusjon kan beregnes ved å bruke flere for løkker. Men å bruke for loops fører til mange gjentatte beregninger og også størrelsen på bildet og kjernen øker. Ved å bruke diskret Fourier Transform-teknikk kan konvolusjonsberegning gjøres raskt. I denne teknikken konverteres hele konvolusjonsoperasjonen til en enkel multiplikasjon.
I konvolusjon oppstår problemet når kjernen er nær kanten eller hjørnene fordi kjernen er todimensjonal.
For å overvinne disse problemene kan følgende ting gjøres:
- De kan ignoreres
- Ekstra piksler kan opprettes nær kantene.
Ekstra piksler kan opprettes på følgende måter:
- Dupliser kantpiksel.
- Reflektere kanter
- Piksler kan kopieres fra den andre enden.