Bilder och bildbearbetning
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:
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:
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:
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 |
---|---|
![]() |
![]() |
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.