Af Victor Powell
En billedkerne er en lille matrix, der bruges til at anvende effekter som dem, du kan finde i Photoshop eller Gimp, f.eks. sløring, skærpning, konturering eller prægning. De bruges også i maskinlæring til “feature extraction”, en teknik til at bestemme de vigtigste dele af et billede. I denne sammenhæng kaldes processen mere generelt for “convolution” (se: convolutional neural networks.)
For at se, hvordan de fungerer, skal vi starte med at inspicere et sort/hvid-billede. Matrixen til venstre indeholder tal, mellem 0 og 255, som hver især svarer til lysstyrken af en pixel i et billede af et ansigt. Det store, granulerede billede er blevet forstørret for at gøre det lettere at se; det sidste billede er den “rigtige” størrelse.
Lad os gennemgå anvendelsen af følgende 3×3 {{selectedKernel}}} kerne på billedet af et ansigt fra oven.
Nedenfor, for hver 3×3 blok af pixels i billedet til venstre, multiplicerer vi hver pixel med den tilsvarende post i kernen og tager derefter summen. Denne sum bliver en ny pixel i billedet til højre. Hold musen over en pixel på begge billeder for at se, hvordan dens værdi beregnes.
En finesse ved denne proces er, hvad der skal ske langs billedets kanter. For eksempel har det øverste venstre hjørne af det indtastede billede kun tre naboer. En måde at løse dette på er at udvide kantværdierne med én i det oprindelige billede, mens vi beholder det nye billede i samme størrelse. I denne demo har vi i stedet ignoreret disse værdier ved at gøre dem sorte.
Her er en legeplads, hvor du kan vælge forskellige kernematricer og se, hvordan de påvirker det originale billede, eller bygge din egen kerne. Du kan også uploade dit eget billede eller bruge livevideo, hvis din browser understøtter det.
Den skærpede kernel fremhæver forskelle i tilstødende pixelværdier. Dette får billedet til at se mere levende ud.
Den uskarpe kerne af-betoner forskelle i tilstødende pixelværdier.
Den prægede kerne (ligner den sobel kerne og betyder nogle gange det samme) giver illusionen af dybde ved at fremhæve forskellene mellem pixelværdier i en given retning. I dette tilfælde i en retning langs en linje fra øverst til venstre til nederst til højre.
Indentity-kernen lader billedet forblive uændret. Hvor kedeligt!
Den brugerdefinerede kerne er, hvad du gør den til.
Sobelkerner bruges til kun at vise forskellene i tilstødende pixelværdier i en bestemt retning.
En outline-kerne (også kaldet en “kant”-kerne) bruges til at fremhæve store forskelle i pixelværdier. En pixel ved siden af nabopixels med næsten samme intensitet vil fremstå sort i det nye billede, mens en pixel ved siden af nabopixels, der adskiller sig meget, vil fremstå hvid.
For mere kan du se Gimp’s fremragende dokumentation om brug af Image kernel’s. Du kan også anvende dine egne brugerdefinerede filtre i Photoshop ved at gå til Filter -> Other -> Custom…