Bilder och bildbearbetning

Slutförd

Innan vi kan utforska bildbearbetning och andra funktioner för visuellt innehåll är det bra att tänka på vad en bild faktiskt är i datasammanhang för ett datorprogram.

Bilder som pixelmatriser

För en dator är en bild en matris med numeriska pixelvärden . Tänk till exempel på följande matris:

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

Matrisen består av sju rader och sju kolumner som representerar pixelvärdena för en bild på 7 x 7 bildpunkter (som kallas bildens upplösning). Varje pixel har ett värde mellan 0 (svart) och 255 (vit); med värden mellan dessa gränser som representerar nyanser av grått. Bilden som representeras av den här matrisen ser ut ungefär som följande (förstorade) bild:

Diagram of a grayscale image.

Matrisen med pixelvärden för den här bilden är tvådimensionell (representerar rader och kolumner, eller x - och y-koordinater ) och definierar en enda rektangel med pixelvärden. Ett enda lager med pixelvärden som detta representerar en gråskalebild. I verkligheten är de flesta digitala bilder flerdimensionella och består av tre lager (kallas kanaler) som representerar röda, gröna och blå färgtoner (RGB). Vi kan till exempel representera en färgbild genom att definiera tre kanaler med pixelvärden som skapar samma kvadratiska form som föregående gråskaleexempel:

Red:
 150  150  150  150  150  150  150  
 150  150  150  150  150  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  150  150  150  150  150
 150  150  150  150  150  150  150

Green:
 0    0    0    0    0    0    0          
 0    0    0    0    0    0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0    0    0    0    0    0
 0    0    0    0    0    0    0

Blue:
 255  255  255  255  255  255  255  
 255  255  255  255  255  255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255  255  255  255  255  255
 255  255  255  255  255  255  255

Här är den resulterande bilden:

Diagram of a color image.

De lila rutorna representeras av kombinationen:

Red: 150 
Green: 0 
Blue: 255 

De gula rutorna i mitten representeras av kombinationen:

Red: 255
Green: 255
Blue: 0

Använda filter för att bearbeta bilder

Ett vanligt sätt att utföra bildbearbetningsuppgifter är att använda filter som ändrar bildpunktsvärdena för att skapa en visuell effekt. Ett filter definieras av en eller flera matriser med pixelvärden som kallas filterkärnor. Du kan till exempel definiera filter med en 3x3-kernel enligt följande exempel:

-1 -1 -1
-1  8 -1
-1 -1 -1

Kerneln är sedan sammankopplad över bilden, beräknar en viktad summa för varje 3x3-korrigering av bildpunkter och tilldelar resultatet till en ny bild. Det är lättare att förstå hur filtreringen fungerar genom att utforska ett steg-för-steg-exempel.

Vi börjar med den gråskalebild som vi utforskade tidigare:

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

Först tillämpar vi filterkärnan på bildens övre vänstra korrigering, multiplicerar varje pixelvärde med motsvarande viktvärde i kerneln och lägger till resultatet:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (0 x -1) + (255 x -1) = -255

Resultatet (-255) blir det första värdet i en ny matris. Sedan flyttar vi filterkärnan längs en pixel till höger och upprepar åtgärden:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (255 x -1) + (255 x -1) = -510

Återigen läggs resultatet till i den nya matrisen, som nu innehåller två värden:

-255  -510

Processen upprepas tills filtret har övergått i hela bilden, som du ser i den här animeringen:

Diagram of a filter.

Filtret är sammanräknat i bilden och beräknar en ny matris med värden. Vissa av värdena kan ligga utanför värdeintervallet 0 till 255 bildpunkter, så värdena justeras så att de passar in i det intervallet. På grund av filtrets form beräknas inte pixelns yttre kant, så ett utfyllnadsvärde (vanligtvis 0) tillämpas. Den resulterande matrisen representerar en ny bild där filtret har omvandlat den ursprungliga bilden. I det här fallet har filtret haft effekten att markera formernas kanter i bilden.

Här är ett exempel på samma filter som tillämpas på en verklig bild för att se effekten av filtret tydligare:

Originalbild Filtrerad bild
Diagram of a banana. Diagram of a filtered banana.

Eftersom filtret är sammanriktat i bilden kallas den här typen av bildmanipulering ofta för convolutional filtrering. Filtret som används i det här exemplet är en viss typ av filter (kallas laplace-filter) som markerar kanterna på objekt i en bild. Det finns många andra typer av filter som du kan använda för att skapa suddighet, skärpa, färginversion och andra effekter.