Datorteknik: Bildkodning, dvs hur man lagrar bilder i datorn

En bild som ska lagras i en dator, eller skickas via ett datornät. måste översättas till något format som kan hanteras av datorn. I slutänden är det ett antal bitar, dvs ettor och nollor. Man brukar tala om bildkodning. Här ska vi gå igenom några olika tekniker.

Bitmap-bilder

En vanlig bild i datorn lagras som en samling bildpunkter. Det enklaste sättet är förstås att lagra alla bildpunkterna, var för sig. Man brukar kalla det för "bitmap-bilder".

"Originalbilden" vi ska använda ser ut så här. Den tar upp 480 054 byte, dvs ca 468 kilobyte, eller "kibibyte" som ibland säger numera, eftersom "data-kilo" inte betyder 1000 som vanligt, utan 1024.

Hur stort är det då? Jämför med en typisk mp3-låt, som är på sådär 5 megabyte. Den här bilden motsvarar ungefär en tiondels mp3-låt.

En bitmap-bild. Om din webbläsare inte kan visa sådana, ser du den här texten i stället.

Varför 480 054 bytes?

Bildpunkter

I tillräckligt stor förstoring syns bildpunkterna. Här zoomar vi in på pojkens vänstra öga (till höger i bilden):

Bild     Bild

Upplösningar, storlekar och tyngder

Det kan bli lite förvirrat när man pratar om hur "stor" en bild är, och vilken "upplösning" den har, för man menar ibland olika saker. Bilden på pojken, hur stor är den? När jag mäter med linjal på skärmen som jag sitter vid just nu, är bilden 10 gånger 10 centimeter. Är det det måttet som är storleken? Eller 13 gånger 16 centimeter, som på skärmen på min andra dator? Eller är storleken 400 gånger 400 bildpunkter, eller kanske 468 kilobyte? Och vad har bilden för upplösning - 400 gånger 400, eller kanske 100 dpi? (Övning för läsaren: Ta reda på detta!)

Ytterligare en term: Ibland kallar man filens storlek (468 kilobyte) för tyngd, för att inte blanda ihop den storleken med de andra.

JPEG-bilder

JPEG är ett sätt att "komprimera" bilder. JPEG-kodningen gör om bilden till lite sämre kvalitet, vilket gör att bildfilen blir mindre. Man kan välja hur mycket kvaliteten ska försämras. Så länge man har ganska liten försämring, är det mycket svårt att se skillnaden mot originalet, men bildfilen blir ändå mycket mindre.

JPEG-kodningen är anpassad för bilder med många färger och mjuka övergångar, och den passar därför bra för fotografier, men mindre bra för text, symboler och en del teckningar.

Här visar vi JPEG-bilder med större och större grad av komprimering:

Bild

I kvaliteten "95%" (dvs väldigt bra) upptar bilden 54 kilobyte, alltså ungefär en tiondel av originalbilden, eller en hundradels mp3-låt. Den här bilden går inte (för mig, i alla fall) att skilja från originalbilden, ens vid noggranna jämförelser i mycket stor förstoring.

Bild "50%", 14 kilobyte.

Bild "25%", 9 kilobyte.

Bild "10%", 6 kilobyte.

Bild "5%", 5 kilobyte.

Bild "1%", 4 kilobyte.

Förstörande ("lossy") och förlustfri ("lossless") komprimering

Som vi såg blev bilden sämre när vi komprimerade den med JPEG. I sämsta kvaliteten ("1%") blev bildfilen bara 4 kilobyte stor, dvs en hundradel så stor som det okomprimerade originalet, men då fattas det ju också ganska mycket av vad som fanns i originalbilden. Om man utgår från den komprimerade bildfilen, kan man inte återskapa originalbilden, för de sakerna har kastats bort av komprimeringen.

JPEG är exempel på förstörande komprimering, för den försämrar alltså bilden så originalet inte går att få tillbaka. (Ja, om man har originalbilden på en egen fil kan man förstås få fram den genom att titta på den filen, men det går inte att återskapa originalbilden från den komprimerade bilden.)

Förstörande komprimering

Ett annat exempel på förstörande komprimering är mp3. Om man gör en mp3-fil av musik till exempel från en cd-skiva, kan originalmusiken inte återskapas exakt utgående från mp3-filen. Det betyder inte att musiken blir "förstörd" i betydelsen att den låter sämre, för det kan mycket väl vara så att ingen levande människa klarar av att höra någon skillnad, men originalet går alltså inte att återskapa exakt.

Motsatsen är förlustfri eller icke-förstörande komprimering. Då krymper filen, men den går att återskapa exakt. (Hur gör man det då? Exempel: Texten "här ska det stå tusen nollor" är bara 28 tecken, vilket är mycket mindre än de tusen nollorna.)

Ett exempel på förlustfri komprimering från datorvärlden är Zip-filer. Zip-filen blir mindre än originalet, men om man till exempel zippar sin uppsats vill man ju inte att en del av den ska försvinna!

Oftast är förlustfri komprimering mycket mindre effektiv än förstörande komprimering. Ett exempel på det är FLAC, som är ett format för förlustfri kodning av ljud. Till skillnad från mp3, som kan krympas till en tiondel eller ännu mindre av cd-originalets storlek utan att de flesta hör någon skillnad, brukar FLAC-filer bli mer än hälften så stora som cd-originalet.

Inom bildkodningen kan GIF-bilder, PNG-bilder och TIFF-bilder (vi kommer att läsa om dem nedan) vara förlustfria, men det beror på vilka inställningar man gjort, och ibland också på bilden.

Förlustfri komprimering

GIF-bilder

GIF-bilder arbetar inte med ett RGB-värde för varje bildpunkt, utan man har en palett med upp till 256 färger. Varje färg har ett nummer, och för varje bildpunkt anges färgen med det nummer som färgen har i paletten.

Det här datorritade diagrammer är en GIF-bild som upptar 25 kilobyte:

Bild

Så här ser paletten ut. Bilden med diagrammet innehåller 127 olika färger. (Det kan vara förvånande att det är så många, men det beror dels på att den blå bakgrunden gradvis blir mörkare längre upp, vilket kräver många olika nyanser av blått, och dels på anti-aliasing. Anti-aliasing betyder att man "suddar till" saker, till exempel bokstäver, så de ska bli mindre pixliga. Se till exempel denna detalj ur bilden ovan.)

Bild

Om man gör om den till JPEG-bild, med kvaliteten "75%", upptar den 35 kilobyte och är alltså större än GIF-bilden. Den har också sämre kvalitet.

Bild

Kvalitetsskillnaden syns tydligare om vi studerar en detalj i bilden, nämligen toppen på den högsta stapeln. Här skarp och fin i GIF-bilden:

Bild

Här är samma topp på den högsta stapeln, men från JPEG-bilden. Det extra suddet som JPEG-komprimeringen lagt till är ett exempel på så kallade JPEG-artefakter:

Bild

GIF-bilder lämpar sig bra för bilder med skarpa gränser och få färger, till exempel teckningar och många datorgenererade bilder. På fotografier fungerar de sämre. Här är samma bild som användes som exempel på JPEG-komprimering, men nu som GIF-bild. Den är 100 kilobyte stor, det vill säga nästan dubbelt så stor som JPEG-bilden, men har sämre kvalitet:

Bild

Så här ser paletten ut. Bilden innehåller 256 olika färger.

Bild

Kvalitetsskillnaden syns tydligare om vi studerar en detalj i bilden, nämligen högra ögat. Här mjuk och fin i JPEG-bilden:

Bild

Här är samma öga, men från GIF-bilden. Sämre, eftersom det inte går att använda lika många olika färger.

Bild

PNG-bilder

Funkar både för fotografier och för bilder med skarpa gränser.

Här är PNG-bilden på diagrammet, 13 kilobyte (hälften så stor som GIF-bilden ovan):

Bild

Här är PNG-bilden på pojken, 223 kilobyte (fyra gånger större än den bästa JPEG-bilden ovan):

Bild

TIFF-bilder

TIFF-bilder brukar användas för att lagra bilder i hög kvalitet. En del digitalkameror ger TIFF-bilder, och tryckare vill ofta ha illustrationer till böcker som TIFF-bilder.

Egentligen är en TIFF-fil en sorts "behållare", som kan innehålla bilder komprimerade med JPEG, men för det mesta använder man TIFF för att lagra bilder som inte komprimerats med förstörande komprimering.

Skalbara bilder

De bildformat vi tittat på hittills har varit pixelbaserade, dvs uppbyggda av bildpunkter. Om man zoomar in i en sån bild, förstorar man också bildpunkterna, som blir större och större. Vi tar den här bilden som exempel:

Bild

Bild

Bild

Ju större förstoring, desto tydligare och mer störande blir uppdelningen av bilden i bildpunkter. Man kan slippa en del av kantigheten genom att göra bilden oskarp, vilket en del bildvisningsprogram gör automatiskt när man zoomar:

Bild

Men om man vill kunna skala upp bilden riktigt snyggt, fungerar inte pixelbaserade bilder. Då kan vi använda vektorbaserade bilder. Nu består inte bilden av bildpunkter längre, utan av en beskrivning av hur bokstaven K ser ut. Den kan sen skalas upp hur stor som helst:

Bild

Bild

Ovanstående exempel är gjorde med hjälp av ett PDF-dokument. PDF-läsare som Acrobat Reader skalar upp text och (ej pixelbaserade) bilder, men den gör det inte genom att förstora enskilda bildpunkter, utan genom att rita en ny bild utifrån hur den vet att (i det här fallet) bokstaven K ser ut.

Men tänk på att man måste använda rätt program för att zooma! Om man använder Acrobat Reader, blir det som det snygga K:et ovan. Om man i stället tar ett "screenshot", och sen skalar upp den bilden i ett bildvisningsprogram, blir det som det taggiga och fula K:et.

Här är ett exempel till, med en bild som är gjord i ett ritprogram. Först skalar vi upp bilen med hjälp av ritprogrammet:

Bild Bild Bild

Bilden är alltså inte lagrad som ett antal bildpunkter, utan det står i bildfilen att bilden innehåller en rektangel och en cirkel, med vissa angivna storlekar och linjebredder. När man skalar upp bilden, är det bara att rita den där rektangeln och cirkeln, men större.

Därefter sparar vi bilden som en pixelbaserad bild, och skalar upp bilden med ett pixelbaserat program, till exempel PhotoShop. Då måste programmet göra de enskilda bildpunkterna större:

Bild Bild Bild

Ännu mer skalbara "bilder"

Titta på en datorkarta, till exempel i Google Maps eller eniro.se. Notera hur saker, som städer och vägar, försvinner och dyker upp i kartan, beroende på hur mycket man zoomar:

Bild Bild

Nu räcker det inte med en vektorbaserad bild, som skalas om. Kartan är inte lagrad som en bild alls. I stället har man lagrat alla de olika sakerna i kartan (städer, vägar, sjöar och så vidare), och sen ritas de upp som en bild precis när kartan ska visas. Beroende på vilken förstoring man valt, tas bara vissa saker med. Ju mindre vägar och städer, desto större förstoring krävs för att de ska komma med.


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se), 5 maj 2008