Kurslitteratur. Kompression av ljud och bild. Föreläsningar, preliminärt program. Laborationer

Relevanta dokument
Kurslitteratur. Kompression av ljud och bild. Föreläsningar, preliminärt program. Laborationer. Khalid Sayood, Introduction to Data Compression

Skurlängdskodning. aaaabbbbbbbccbbbbaaaa. Man beskriver alltså sekvensen med ett annat alfabet än det ursprungliga.

Kompression av ljud och bild

Ordbokskodning. Enkel variant av kodning med variabelt antal insymboler och fixlängds kodord. (Jfr tunstallkodning)

Exempel, minnesfri binär källa. Ordbokskodning. Lempel-Zivkodning. Lempel-Zivkodning, forts.

Shannon-Fano-Elias-kodning

Datakompression. Harald Nautsch ISY Bildkodning, Linköpings universitet.

Kursinnehåll. Datakompression. Föreläsningar, preliminärt program. Examination

Aritmetisk kodning. F (0) = 0 Exempel: A = {1, 2, 3} k=1. Källkodning fö 5 p.1/12

Källkodning. Egenskaper hos koder. Några exempel

FLAC (Free Lossless Audio Coding)

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Krafts olikhet. En momentant avkodbar kod (prefixkod) med kodordslängderna l 1,...,l N existerar om och endast om. 2 l i. 1 i=1

TSBK04 Datakompression. Övningsuppgifter

TSBK04 Datakompression Övningsuppgifter

Adaptiv aritmetisk kodning

Linjär prediktion. Prediktiv kodning. Linjär prediktion. Prediktiv kodare och avkodare

Föreläsning 1: Bild- och ljudkodning

En generell prediktiv kodare utnyttjar signalens utseende N steg tillbaka i tiden för kodningen, dvs vi kodar efter den betingade fördelningen

TSBK35 Kompression av ljud och bild

Föreläsning 7: Bild- och videokodning

Burrows-Wheelers transform

4/27/12. Fönstring i MDCT. Föreläsning 10: Ljudkodning ( Audio Coding ) 1. Inledning PCM, standardmetoder, MDCT, psykoakustik, ljudtryck

Kodning med distorsion

Föreläsning 10: Ljudkodning ( Audio Coding )

SMS047 Mediakodning. Introduktion. Frank Sjöberg. Introduktion. Introduktion

Transformkodning Idé: 1. Tag datasekvensen och dela in den i block av storlek N (eller N N om signalen är tvνadimensionell). Transformera dessa block

Föreläsninsanteckningar till föreläsning 3: Entropi

Analys/syntes-kodning

Psykoakustik. Ljudtrycksnivå. Hörselns omfång. Hörnivå(loudness) Människans hörsel är ganska väl studerad och det finns bra modeller för den.

Lab 3 Kodningsmetoder

Föreläsning 17 - Komprimering

Träd och koder. Anders Björner KTH

Övning 6 - Tillämpad datalogi 2012

Signaler och system, IT3

Föreläsning 7. Felrättande koder

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Bilder... Dagens föreläsning. Objektgrafik. Objektgrafik. TNMK30, 2010 Föreläsning

Detta ger oss att kanalkapaciteten för den ursprungliga kanalen är C = q 1 C 1 + q 2 C C =1 h ( ) 0.30.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Lösningsförslag till övningsuppgifter, del V

Videosignalen består av en sekvens av bilder, typiskt 24, 25 eller 30 bilder i sekunden.

Datastrukturer och algoritmer. Innehåll. Trie. Informell specifikation. Organisation av Trie. Föreläsning 13 Trie och Sökträd.

Psykoakustik. Ljudtrycksnivå. Hörselns omfång. Hörnivå (loudness) Människans hörsel är ganska väl studerad och det finns bra modeller för den.

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Informationsteori. Repetition Kanalkapaciteten C. Repetition Källkodhastigheten R 2. Repetition Kanalkodhastigheten R 1. Huffmans algoritm: D-när kod

Föreläsning i webbdesign. Bilder och färger. Rune Körnefors. Medieteknik Rune Körnefors rune.kornefors@lnu.se

LARS ULVELAND HOPFIELDNÄTVERK FÖR IGENKÄNNING AV DEGRADERADE BILDER OCH HANDSKRIVNA TECKEN

Algoritmer, datastrukturer och komplexitet

Grafisk Teknik. Rastrering. Övningar med lösningar/svar. Sasan Gooran (HT 2013)

Föreläsning 2. Transmissionslänk. Repetition: Internetprotokollens skikt. Mål

Digital- och datorteknik

Laboration 4: Digitala bilder

SF1905 Sannolikhetsteori och statistik: Lab 2 ht 2011

4.1 Grundläggande sannolikhetslära

Algoritmer, datastrukturer och komplexitet

DIGITAL KOMMUNIKATION

Tentamen i. TDDC67 Funktionell programmering och Lisp

Digital- och datorteknik

Ansiktsigenkänning med MATLAB

F3 Datarepresentation teckenkodning och datakompression EDAA05 Datorer i system! Roger Henriksson!

F3 Datarepresentation teckenkodning och datakompression

Grundläggande matematisk statistik

Människans hörsel är ganska väl studerad och det finns bra modeller för den.

Föreläsning 5: Grafer Del 1

För logitmodellen ges G (=F) av den logistiska funktionen: (= exp(z)/(1+ exp(z))

Bildförbättring i spatial domänen (kap. 3) Bildförbättring (enhancement) Spatial domän. Operatorer. Tröskling (threshold) Gråskale-transformationer

DIGITALA TAL OCH BOOLESK ALGEBRA

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

Finansiell Statistik (GN, 7,5 hp,, VT 2009) Föreläsning 2. Diskreta Sannolikhetsfördelningar. (LLL Kap 6) Stokastisk Variabel

Tentamen, Programmeringsteknik för BME, F och N

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Struktur: Elektroteknik A. Digitalteknik 3p, vt 01. F1: Introduktion. Motivation och målsättning för kurserna i digital elektronik

Moment 2 - Digital elektronik. Föreläsning 1 Binära tal och logiska grindar

Laboration 5: Regressionsanalys. 1 Förberedelseuppgifter. 2 Enkel linjär regression DATORLABORATION 5 MATEMATISK STATISTIK FÖR I, FMS 012, HT-08

Tillämpad Programmering (ID1218) :00-13:00

Förlustfri datakompression

x 23 + y 160 = 1, 2 23 = ,

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Digital Aritmetik Unsigned Integers Signed Integers"

Data och Information. Dr. Johan Hagelbäck.

Bildlagring och - komprimering

Grafer och grannmatriser

Uppgift 1 ( Betyg 3 uppgift )

International Olympiad in Informatics July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Monte Carlo-metoder. Bild från Monte Carlo

7 MÖNSTERDETEKTERING

-med fokus på robusthet

Teoretisk del. Facit Tentamen TDDC (6)

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Datorsystemteknik DVG A03 Föreläsning 3

Material till kursen SF1679, Diskret matematik: Lite om kedjebråk. 0. Inledning

Programmering II (ID1019) :00-11:00

Föreläsning 1. Repetition av sannolikhetsteori. Patrik Zetterberg. 6 december 2012

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Transkript:

TSBK35 källkodning p.3/89 TSBK35 källkodning p.4/89 Kurslitteratur Kompression av ljud och bild Harald Nautsch harna@isy.liu.se http://www.icg.isy.liu.se/courses/tsbk35/ ISY Informationskodning, Linköpings universitet Rekommenderad bok: Khalid Sayood, Introduction to Data Compression. Finns i elektronisk form via biblioteket. Övningshäfte och formelsamling. Finns på hemsidan. Elektroniska böcker, se kurssidorna. Labkompendium, föreläsningsslides, lösningsförslag till Sayood, gamla tentor, et c. finns på kurssidorna. TSBK35 källkodning p.1/89 Föreläsningar, preliminärt program Laborationer TSBK35 källkodning p.2/89 1. Inledning. Källmodeller, källkodning, huffmankodning. 2. Entropi, golombkoder, skurlängdskodning. 3. Aritmetisk kodning 4. Lempel-Ziv-kodning, distorsionsfri ljud- och bildkodning. GIF, PNG, lossless JPEG, JPEG-LS 5. Amplitudkontinuerliga stokastiska processer. Kvantisering 6. Vektorkvantisering 7. Linjär prediktiv kodning 8. Transformkodning. JPEG 9. Delbandskodning. JPEG-2000 10. Ljudkodning. Psykoakustik. mp3, AAC, Dolby Digital, Ogg Vorbis 11. Videokodning. H.26x, MPEG, DV 12. Videokodning forts. Talkodning. CELP, GSM 1. Distorsionsfri komprimering av stillbilder och musik. Görs i grupper om 2 personer. Redovisas med en liten rapport. 2. Kodning av musik. Görs i grupper om 2 personer. Redovisas med en liten rapport. 3. Transformkodning av stillbilder (4h) Görs på schemalagd tid i grupper om 2, boka plats på kurssidan. Det finns schemalagda jourlabtider även för de två första laborationerna, då assistenter kommer att vara närvarande.

Lämpliga förkunskaper TSBK35 källkodning p.7/89 Vad är datakompression? TSBK35 källkodning p.8/89 Sannolikhetslära Linjär algebra (matriser, vektorer) Analys Grundläggande transformteori Signalbehandling (linjära system) Matlab X Y X komprimering rekonstr. Y tar mindre plats att lagra än X. Distorsionsfri komprimering (lossless): X = X Komprimering med distorsion (lossy): X X TSBK35 källkodning p.5/89 TSBK35 källkodning p.6/89 Exempel: JPEG-kodning Förekommande metoder Förenklat blockschema över en JPEG-kodare: Exempel på distorsionsfri komprimering: Bild Blockbaserad transform Storlek, färgrymd, metadata, etc Kvantisering Källkodning Parametrar MUX JPG-fil Textkomprimering: zip, gzip, bzip, compress Stillbilder: GIF, PNG, lossless JPEG, JPEG-LS, faxkodning Musik: FLAC Exempel på komprimering med distorsion: Stillbilder: JPEG, JPEG 2000 Video: H.261, H.263, H.264, MPEG-1 (VideoCD), MPEG-2 (DVD, DVB), MPEG-4 (DivX, XviD), DV Avkodaren gör förstås allt i omvänd ordning. Ljud: MPEG-1 layer 3 (mp3), AC-3 (Dolby Digital), ATRAC (MiniDisc), Ogg Vorbis, AAC Tal: CELP, GSM

TSBK35 källkodning p. 11/89 TSBK35 källkodning p.12/89 Godhetsmått Godhetsmått, forts Hur stor kompression ger vår metod? Kompressionsgrad (compression ratio) Ex. Signal att komprimera gråskalebild 256 256 bildpunkter, 1 byte (8 bitar) per bildpunkt. Antag att den komprimerade signalen tar 16384 bytes att lagra. Kompressionsgraden är då 256 256 1 16384 =4ggr. Vanligt att mäta medeldatatakten (rate) i bitar/sampel (bitar/bildpunkt, bitar/tecken) Hur stor distorsion ger vår metod? Mänsklig bedömning Matematiska mått Kvadratiskt medelfel (mean square error) SNR SNR viktat för att ta hänsyn till människans syn eller hörsel. Ex. Vår bild ovan: 16384 8 256 256 =2bitar/bildpunkt För video- och ljudsignaler anger man ofta medeldatatakten i bitar/s. Vad är originalet? TSBK35 källkodning p.9/89 Egenskaper att utnyttja TSBK35 källkodning p.10/89 För ljud och bilder är originalsignalerna samplade och fint kvantiserade amplitudsignaler. Signalen kan vara skalär (monoljud, gråskalebilder) eller vektorvärd (exempelvis RGB, CMYK, multispektrala bilder, stereoljud, surroundljud). Trots att originalsignalen i princip alltid är kvantiserad kan man ändå ofta använda amplitudkontinuerliga modeller för den (föreläsning 5 och senare.) Vad är det för egenskaper hos signalen som gör att vi (oftast) kan komprimera den? Alla symboler är inte lika vanliga. T.ex. i en musiksignal är det vanligare med små amplitudvärden än med stora. Beroende mellan närliggande symboler. T.ex. i en bild så har bildpunkter bredvid varandra oftast ungefär samma värde. Egenskaper hos människans syn- eller hörselsinne. Man kan ta bort information som ändå inte kommer synas eller höras.

TSBK35 källkodning p. 15/89 TSBK35 källkodning p.16/89 Diskreta källor Stokastiska källmodeller En källa är något som producerar en en sekvens av symboler. Symbolerna är element i ett diskret alfabet A = {a 1,a 2,...,a N } av storlek N. För det mesta kommer vi att behandla ändliga alfabet, men även oändliga alfabet är tillåtna. I många fall har man bara tillgång till själva symbolsekvensen och får därför modellera källan från den. De källmodeller vi kommer att koncentrera oss på är stokastiska modeller, där vi antar att symbolerna produceras från stokastiska variabler eller stokastiska processer. Den enklaste stokastiska modellen för en källa är en diskret stokastisk variabel X. Fördelning Pr(X = a i )=P X (a i )=P (a i )=p i P (a i ) 0, a i P (a i )=1 Stokastiska källmodeller, forts. TSBK35 källkodning p. 13/89 Minneskällor TSBK35 källkodning p.14/89 En bättre källmodell är diskreta stationära stokastiska processer. En stokastisk process X t kan ses som en följd av stokastiska variabler, där man får ett utfall i varje tidpunkt t. Betingade sannolikheter: Källans utsignal i två tidpunkter t och s P (x t,x s )=Pr(X t = x t,x s = x s ) P (x s x t )= P (x t,x s ) P (x t ) Beroende mellan utsignalens värde i olika tidpunkter brukar kallas för minne. Om X t och X t+k är oberoende för alla k 0så kallas källan minnesfri. För en minnesfri källa gäller: P (x t,x t+k )=P (x t ) P (x t+k ) P (x t+k x t )=P (x t+k ) P (x t,x s )=P (x t ) P (x s x t )

TSBK35 källkodning p. 19/89 TSBK35 källkodning p.20/89 Markovkällor Verklig källa som stokastisk process. Markovkälla av ordning k P (x t x t 1 x t 2...)=P (x t x t 1...x t k ) En markovkälla är en minneskälla med begränsat minne k steg tillbaka i sekvensen En markovkälla kan beskrivas med en tillståndsgraf med M = N k tillstånd s i. Se extramaterial om markovkällor. Exempel: Alfabet {a, b}. Givna data: bbbbaabbbaaaaabbbbbabaaabbbb. För att skatta symbolsannolikheter räknar vi hur ofta varje symbol uppträder: a finns 11 gånger, b 17 gånger. De skattade sannolikheterna P (x t ) blir då: P (a) = 11, P(b) =17 28 28 För parsannolikheter och betingade sannolikheter får vi istället räkna hur ofta de olika symbolparen uppträder. aa finns 7 gånger, ab 4 gånger, ba 4 gånger och bb 12 gånger. De skattade sannolikheterna P (x t,x t+1 ) och P (x t+1 x t ) blir då: P (aa) = 7 27, P(ab) = 4 27, P(ba) = 4, P(bb) =12 27 27 P (a a) = 7 11, P(b a) = 4 11, P(a b) = 4, P(b b) =12 16 16 1917 års bibel som markovkälla TSBK35 källkodning p. 17/89 Källkodning TSBK35 källkodning p.18/89 Markov, ordning 1: Ban n pr tusopå bensoch jakaränguräkerärudera. sochör son deng, aranoch o brsade ftyggörmed. ochartiljupppt odenuskvigdekadens, t deskarör vå hoch s ber föve, en boma vtärtit ha, Markov, ordning 2: Med går, tashet. Fares, var som jung När må lagar och vinrödet De dig för mott bröder dardin Jest, prett konom forslöver: 2 för icklara säkt. 5 Akblom i Jort at Markov, ordning 3: Mina arbort Likas»rätt milja derna, 60. Då när mina vand böner kommitt de ifrån nu Heles skapade: på Herren. Han införlåter. På David beskänning, ty 1 Mosebok (Lev Markov, ordning 4: Jag sågen pust att hjärtan för mig, jag lämna icke vid namn av havet, godelaktning. Till se mig, vagnens och mark ut bliva månade skola och sitt talats ting, Källkodning innebär att vi tilldelar binära sekvenser (kallade kodord) till symboler i ett alfabet. Mängden av alla kodord kalls för kod. En kod där antalet bitar i varje kodord är fixt kallas för en fixlängdskod. En kod där kodorden har olika antal bitar kallas för en variabellängdskod. Exempel: A = {a, b, c, d} Symbol Kod 1 Kod 2 Kod 3 Kod 4 Kod 5 a 00 0 0 0 0 b 01 0 1 10 01 c 10 1 00 110 011 d 11 10 11 111 111

TSBK35 källkodning p. 23/89 TSBK35 källkodning p.24/89 Källkodning Egenskaper hos koder Koda sekvensen abbacddcd med våra koder Symbol Kod 1 Kod 2 Kod 3 Kod 4 Kod 5 a 00 0 0 0 0 b 01 0 1 10 01 c 10 1 00 110 011 d 11 10 11 111 111 Kod 1: 000101001011111011 Kod 2: 000011010110 Kod 3: 01100011110011 Kod 4: 010100110111111110111 Kod 5: 001010011111111011111 Om man från en sekvens av kodord kan återskapa den ursprungliga källsekvensen kallas koden för unikt avkodbar. Om man kan känna igen kodorden direkt vid avkodning, kallas koden momentant avkodbar (instantaneous). Om inget kodord är prefix till något annat kodord kallas koden för en prefixkod. Dessa koder är trädkoder, dvs kodorden är löv i ett binärt träd. Alla prefixkoder är momentant avkodbara. TSBK35 källkodning p. 21/89 TSBK35 källkodning p.22/89 Exempel på koder Är en given kod unikt avkodbar eller ej? Symbol Kod 1 Kod 2 Kod 3 Kod 4 Kod 5 a 00 0 0 0 0 b 01 0 1 10 01 c 10 1 00 110 011 d 11 10 11 111 111 Kod 1: Unikt avkodbar, momentant avkodbar Kod 2: Ej unikt avkodbar Kod 3: Ej unikt avkodbar Kod 4: Unikt avkodbar, momentant avkodbar Kod 5: Unikt avkodbar, ej momentant avkodbar Gör en lista av alla kodord. Undersök alla par av element i listan för att se om något element är prefix till ett annat element. I sådana fall lägg till suffixet till listan, om det inte redan finns där. Repetera tills en av två saker händer: 1. Man hittar ett suffix som är ett kodord. 2. Man hittar inga nya suffix att lägga till listan. I fall 1 är koden inte unikt avkodbar, i fall 2 är koden unikt avkodbar.

TSBK35 källkodning p. 27/89 TSBK35 källkodning p.28/89 Prestanda för koder Krafts olikhet, kodordsmedellängd Hur bra en kod är ges av dess (medel)datatakt R (eng. rate) och anges i bitar/symbol. E{antal bitar per kodord} R = E{antal symboler per kodord} Eftersom det är komprimering vi sysslar med vill vi förstås att R ska vara så liten som möjligt. Det existerar en teoretisk lägre gräns för hur mycket vi kan komprimera signalen. Observera att R är ett mått på hur bra koden är i medel över alla möjliga sekvenser från källan. Den säger ingenting om hur bra koden är för en enskild källsekvens. Krafts olikhet: En momentant avkodbar kod (trädkod) med kodordslängderna l 1,...,l N existerar omm 2 l i 1 Olikheten gäller även för alla unikt avkodbara koder. Den brukar då kallas Kraft-McMillans olikhet. Kodordsmedellängd: N l = p i l i [bitar/kodord] Om vi kodar en symbol per kodord så har vi att R = l Entropin som nedre gräns TSBK35 källkodning p. 25/89 Entropin som nedre gräns, forts. TSBK35 källkodning p.26/89 Det finns en lägre gräns för hur bra en unikt avkodbar kod kan bli: Bevis för l H(X t ) N l p i log 2 p i = H(X t ) H(X t ) kallas för källans entropi (mer om det på följande föreläsningar). H(X t ) l = p i log 2 p i p i l i = = 1 ln 2 p i (log 2 1 p i log 2 2 l i )= p i (log 2 1 p i l i ) 2 l i p i log 2 p i ( 2 l i 1) = 1 N p i ln 2 ( 2 l i p i ) 1 (1 1) = 0 ln 2 p i där vi utnyttjat ln x x 1 samt Kraft-McMillans olikhet

TSBK35 källkodning p. 31/89 TSBK35 källkodning p.32/89 Optimala koder Övre gräns för optimala koder En optimal kod för en källa är en kod sådan att det inte existerar andra koder med lägre l. En optimal kod är oftast inte unik, d.v.s. det existerar flera olika koder med samma prestanda. Det enklaste exemplet på detta är att bara byta nollor mot ettor och ettor mot nollor i kodorden. Det existerar en unikt avkodbar kod med l <H(X t )+1 Bevis: Låt l i = log 2 p i = log 2 p i + s i där 0 s i < 1 Ofta kan man även konstruera koder där uppsättningen av kodordslängder skiljer sig åt, men som har samma medelkodordslängd. 2 l i = = 2 log 2 p i s i p i 2 s i p i = 1 Kraft-McMillans olikhet är uppfylld, alltså existerar en unikt avkodbar kod med de givna kodordslängderna Övre gräns, forts. TSBK35 källkodning p. 29/89 Huffmankodning TSBK35 källkodning p.30/89 Vad är kodordsmedellängden? Enkel metod för att konstruera optimala koder. N l = p i l i = p i ( log 2 p i + s i ) = p i log 2 p i + p i s i < p i log 2 p i + p i = H(X t )+1 Den optimala koden kan ju inte vara sämre än denna kod, då vore det ingen optimal kod. Alltså gäller även för en optimal kod att l <H(X t )+1. OBS: Om p i =2 k i, i för heltal k i, så kan vi konstruera en kod med l = H(Xt ). Börja med enskilda symboler som löv. Slå i varje steg ihop de två minst sannolika noderna till en inre nod. Sannolikheten för den nya noden är summan av de två ursprungliga noderna. Om det finns fler noder med samma sannolikhet att välja mellan spelar det ingen roll vilken vi väljer. När vi konstruerat hela kodträdet, skapar vi kodorden genom att sätta 0 resp. 1 på de utgående grenarna i varje nod. Vilken gren som sätts till 0 resp. 1 spelar ingen roll.

TSBK35 källkodning p. 35/89 TSBK35 källkodning p.36/89 Utvidgning Sidoinformation För små alfabet med skeva fördelningar, eller för källor med minne, kan en huffmankod vara ganska långt från optimal. Detta kan ofta förbättras om man utvidgar källan, dvs man kodar fler symboler i taget med varje kodord. Om man kodar n symboler med varje kodord, och koden har kodordsmedellängden l så blir datatakten R = l n Den maximala redundansen (skillnanden mellan datatakten och entropin) minskar som 1 n när vi kodar n symboler i taget. Hittills har vi bara tittat på kodens datatakt R för att bedöma hur bra eller dålig den är. I en praktisk tillämpning måste man även tänka på att man kan behöva överföra sidoinformation för att mottagaren ska kunna avkoda signalen. Till exempel kan man behöva tala om för mottagaren vilket alfabet som används och hur kodträdet ser ut. I de flesta fall känner dock mottagaren till alfabetet. Ett rättframt sätt att beskriva ett kodträd är att för varje symbol först tala om hur långt dess kodord är och sen skicka kodordet. Om alfabetsstorleken är N så kan kodorden maximalt vara N 1 bitar långa, under förutsättningen att koden är optimal. Om kodordslängderna är l 1,...,l N så går det alltså åt N log(n 1) + l i bitar för att beskriva trädet på detta sätt. Sidoinformation, forts. TSBK35 källkodning p. 33/89 Skurlängdskodning TSBK35 källkodning p.34/89 Givet kodordslängderna spelar det i de flesta fall ingen roll exakt hur kodorden ser ut. Om både kodaren och avkodaren använder samma algoritm för att konstruera en kod utgående från kodordslängder, så räcker det med att skicka dessa längder som sidoinformation. I praktiken kan det gå till så att kodaren använder huffmanalgoritmen för att konstruera en kod, noterar kodordslängderna och sen slängder bort koden. Kodordslängderna används för att konstruera en ny kod, som har samma datatakt som den ursprungliga. Avkodaren kan konstruera samma kod givet längderna. I detta fall räcker det alltså att skicka N log(n 1) bitar som sidoinformation. Om mängden data som ska skickas är stor så inverkar inte sidoinformationen särskilt mycket på den totala datatakten, men om datamängden är liten eller om man har stora och/eller många koder kan det vara en signifikant andel. Ibland har man källor som producerar långa delsekvenser av samma symbol. Det kan då vara praktiskt att istället för att beskriva sekvensen som en följd av enstaka symboler, se sekvensen som en följd av skurar. En skur är en tupel som talar om dels vilken symbol som skuren består av och dels hur lång skuren är. Till exempel så kan man beskriva sekvensen som aaaabbbbbbbccbbbbaaaa (a, 4)(b, 7)(c, 2)(b, 4)(a, 4) Man beskriver alltså sekvensen med ett annat alfabet än det ursprungliga. Vinsten är att det kan vara enklare att hitta en effektiv kod för det nya alfabetet, samt att man lättare kan utnyttja källans minne.

TSBK35 källkodning p. 39/89 TSBK35 källkodning p.40/89 Faxkodning Faxkodning, forts. Faxkodning är ett typiskt exempel på när man använder skurlängdskodning. Det finns två digitala faxstandarder: Grupp 3 (T.4) och grupp 4 (T.6). En faxmaskin läser av en sida en rad i taget (1728 punkter per linje på en A4). Varje punkt är antingen vit eller svart. Typiskt får man skurar av vita respektive svarta bildpunkter. En rad kan antingen kodas separat eller med hjälp av föregående rad. När man kodar en rad separat, används skurlängdskodning. Eftersom det möjliga antalet skurlängder är så stort skulle det vara opraktiskt att ha en huffmankod över alla skurlängder. Istället beskriver man en skurlängd r som r =64 m + t, t=0,...,63 och m =1,...,27 Man inför även en extra symbol som talar om att raden är slut (EOL), dvs att resten av raden har samma färg. Den första skuren på en rad antas vara vit. Alfabetet med olika m, t och EOL kodas med fixa trädkoder, en vardera för vita respektive svarta skurar. Denna typ av kodning kallas MH (modified huffman). Faxkodning, forts. TSBK35 källkodning p. 37/89 Faxkodning, forts. TSBK35 källkodning p.38/89 Två rader efter varandra är förmodligen ganska lika varandra. Detta kan utnyttjas vid kodningen. Några definitioner: a 0 Den sista bildpunkten på en rad som är känd för både sändare och mottagare, dvs aktuell position på raden. När man börjar är det en tänkt vit bildpunkt till vänster om radens första punkt. a 1 Första bildpunkt till höger om a 0 med motsatt färg. Känd endast av sändaren. a 2 Första bildpunkt till höger om a 1 med motsatt färg. Känd endast av sändaren. b 1 Första bildpunkt till höger om a 0 på raden ovanför som har motsatt färg. Känd av både sändare och mottagare. b 2 Första bildpunkt till höger om b 1 som har motsatt färg. Känd av både sändare och mottagare. Vid kodningen får man tre fall 1. Om både b 1 och b 2 ligger mellan a 0 och a 1 så skickas kodordet 0001. Alla bildpunkter fram till punkten under b 2 har samma färg. Denna punkt blir vår nya a 0.Nyab 1 och b 2 tas fram. 2. a 1 ligger före b 2 och avståndet mellan b 1 och a 1 är högst 3. Avståndet { 3, 2, 1, 0, 1, 2, 3} kodas med {0000011, 000011, 011, 1, 010, 000010, 00000010}. a 1 blir ny a 0. 3. I övriga fall skickas 001 och skurlängderna från a 0 till a 1 och från a 1 till a 2 kodas med den endimensionella koden.

TSBK35 källkodning p. 43/89 TSBK35 källkodning p.44/89 Faxkodning, forts. Golombkoder I grupp 3 använder man båda metoderna och kodar med jämna mellanrum en rad rent endimensionellt, för att eventuella överföringsfel inte ska fortplanta sig till hela bilden. Denna kodningsmetod kallas MR (modified READ). I grupp 4 använder man bara den tvådimensionella metoden. Detta kallas MMR (modified MR). Koder för att koda heltal med monotont avtagande sannolikheter. A = {0, 1, 2,...} Välj parameter m Representera heltalet n med q = n m och r = n qm. Koda q som q stycken 1:or följt av en 0:a. Om m är en jämn tvåpotens, koda r binärt med log m bitar. Om m inte är en jämn tvåpotens 0 r<2 log m m Koda r med log m bitar 2 log m m r m 1 Koda r +2 log m m med log m bitar Golombkoder, forts. TSBK35 källkodning p. 41/89 Exempel, bildkodning TSBK35 källkodning p.42/89 Golombkoder är optimala för fördelningar av typen om man väljer m = 1 log p P (n) =p n (1 p) ; n =0, 1, 2,... I praktiken begränsar man sig ofta till jämna tvåpotenser: m =2 k Fördelen med golombkoder, jämfört med huffmankoder, är att sidoinformationen är mycket mindre. För en huffmankod måste man skicka hela kodträdet, men för en golombkod räcker det med att skicka parametern m. Man behöver inte heller hålla hela kodträdet i minnet, varken på kodar- eller avkodarsidan. Golombkoder används bl.a. i bildkodningsstandarden JPEG-LS. Originalbild, 768 512 bildpunkter, 8 bitar per bildpunkt

TSBK35 källkodning p. 47/89 TSBK35 källkodning p.48/89 Huffmankodning Huffmankodning av skillnader Vi använder histogrammet som skattning av fördelningen av pixelvärden. 6000 För att utnyttja minnet tar vi skillnaden mellan en pixel och pixeln ovanför. 8 x 104 5000 7 6 4000 5 3000 4 2000 3 2 1000 1 0 0 50 100 150 200 250 En huffmankod som optimeras till denna fördelning kodar bilden med 2954782 bitar, plus 1280 bitar sidoinformation. Detta ger oss en datatakt på ungefär 7.51 bitar/bildpunkt. 0 250 200 150 100 50 0 50 100 150 200 250 En huffmankod som optimeras till denna fördelning kodar bilden med 1622787 bitar, plus 2075 bitar sidoinformation. Detta ger oss en datatakt på ungefär 4.13 bitar/bildpunkt. Golombkodning av skillnader I TSBK35 källkodning p. 45/89 Golombkodning II TSBK35 källkodning p.46/89 För att kunna göra golombkodning av skillnadsvärdena måste vi ha ett alfabet med ickenegativa värden. Till exempel kan man koda absolutvärdet med en golombkod och sen skicka en teckenbit för varje nollskilt värde. 10 x 104 En annan variant är att representera positiva värden med jämna tal och negativa värden med udda tal. 8 x 104 7 6 9 8 5 7 4 6 3 5 2 4 3 1 2 1 0 50 0 50 100 150 200 250 Den bästa golombkoden för denna fördelning är m =3. Detta ger oss 1438806 bitar, 317104 teckenbitar och 8 bitar sidoinformation. Datatakten blir ungefär 4.47 bitar/bildpunkt. 0 50 0 50 100 150 200 250 300 350 400 450 Den bästa golombkoden för denna fördelning är m =6. Detta ger oss 1760618 bitar och 8 bitar sidoinformation. Datatakten blir ungefär 4.48 bitar/bildpunkt.

Information och entropi TSBK35 källkodning p. 51/89 Entropi TSBK35 källkodning p.52/89 X diskret stokastisk variabel Fördelning Självinformation för utfallen p i = P (a i )=Pr(X = a i ) i(a i )= log p i Logaritmen kan tas i godtycklig bas, av praktiska skäl så använder man nästan alltid basen 2. Enheten för informationen kallas då bitar. Ju lägre sannolikheten för ett utfall är, desto större är informationen i det utfallet. p i =1 = i(a i )=0 Medelvärdet av informationen kallas entropi H(X) = p i i(a i )= p i log p i Entropin kan ses som ett mått på medelinformationen i X, eller osäkerheten om X. 0 H(X) log N Entropin är maximal då alla utfall är lika sannolika. Om något av utfallen har sannolikheten 1 (och de andra utfallen alltså har sannolikheten 0) så är entropin 0, dvs det finns ingen osäkerhet. TSBK35 källkodning p. 49/89 TSBK35 källkodning p.50/89 Entropi, forts. Entropi för källor Två stokastiska variabler X och Y med alfabeten A respektive B. P XY (a i,b j )=P X (a i ) P Y X (b j a i )=P Y (b j ) P X Y (a i b j ) Betingad entropi Källa X t (stationär stokastisk process) Första ordningens entropi för källan H(X t )= p i i(a i )= p i log p i H(Y X) = i,j P XY (a i,b j ) log P Y X (b j a i ) Betingad entropi H(X t X t 1 ) H(X t ) H(Y X) H(Y ) med likhet om X och Y är oberoende med likhet om X t är minnesfri. Blockentropi Andra ordningens entropi H(X, Y )= i,j P XY (a i,b j ) log P XY (a i,b j ) H(X t 1,X t )=H(X t 1 )+H(X t X t 1 ) 2 H(X t ) n-te ordningens entropi H(X, Y )=H(X)+H(Y X) =H(Y )+H(X Y ) H(X 1,...,X n )=H(X 1 )+H(X 2 X 1 )+...+H(X n X 1...X n 1 ) n H(X t )

Entropi för källor, forts. TSBK35 källkodning p. 55/89 Problem med huffmankodning TSBK35 källkodning p.56/89 Källans entropi (kallas även entropitakt) lim n 1 n H(X 1...X n ) = lim n H(X n X 1...X n 1 ) För en minnesfri källa är entropin lika med första ordningens entropi. För en markovkälla av ordning k är entropin lika med H(X t X t 1...X t k ) Entropin ger en teoretisk lägsta gräns för hur bra man kan koda källan. Huffmankodning är teoretiskt optimalt, men kan vara opraktiskt för skeva fördelningar och/eller när man utvidgar källan. Ex: A = {a, b, c}, P(a) =0.95,P(b) =0.02,P(c) =0.03 Entropin för källan är 0.3349. Kodordsmedellängden för en huffmankod är 1.05 bitar/symbol, dvs mer än 3 gånger så stor som entropin. Om vi vill att kodordsmedellängden inte ska ligga mer än 5% från entropin måste vi utvidga källen och koda 8 symboler i taget. Detta ger en huffmankod med 3 8 = 6561 kodord. Vi skulle vilja ha en kodningsmetod där vi direkt kan ta fram kodorden för en given sekvens utan att behöva räkna fram kodorden för alla möjliga sekvenser. Ett sätt att göra detta är aritmetisk kodning. Aritmetisk kodning TSBK35 källkodning p. 53/89 Aritmetisk kodning, forts. TSBK35 källkodning p.54/89 Vi identifierar varje sekvens av källsymboler med ett tal i intervallet [0, 1). Vi gör det med hjälp av fördelningsfunktionen (cumulative distribution function) F X (i). För att få en enklare beskrivning så antar vi, utan att förlora i generalitet, att alfabetet består av heltal. A = {1, 2,...,N} Pr(X = i) =P (i) F (i) = i P (k) k=1 Antag att vi vill koda en sekvens x = x 1,x 2,...,x n. Man börjar med hela sannolikhetsintervallet [0, 1). I varje steg delar man in sitt intervall proportionellt enligt fördelningsfunktionen F (i) och väljer just det delintervall som motsvarar den symbol som kodas. Varje symbolsekvens av längd n ger ett unikt delintervall. Kodordet för sekvensen är ett tal i intervallet. Antal bitar i kodordet beror av intervallets storlek, så ett stort intervall (dvs en sekvens med hög sannolikhet) får ett kort kodord, medan ett litet intervall ger ett längre kodord. F (0) = 0 Exempel: A = {1, 2, 3} P (1) = 0.5, P(2) = 0.3, P(3) = 0.2 F (0) = 0, F(1) = 0.5, F(2) = 0.8, F(3) = 1

TSBK35 källkodning p. 59/89 TSBK35 källkodning p.60/89 Iterativ intervalluppdelning Kodord Antag att vi vill koda en sekvens x = x 1,x 2,...,x n. Vi betecknar den undre gränsen i motsvarande intervall med l (n) och den övre gränsen med u (n). Man kan då enkelt visa att l (n) = l (n 1) +(u (n 1) l (n 1) )F (x n 1) u (n) = l (n 1) +(u (n 1) l (n 1) )F (x n ) Startvärden är hela intervallet Mittpunkten i intervallet ges av l (0) = 0 u (0) = 1 T X (x) = l(n) + u (n) 2 Hur tar vi fram ett kodord b 1 b 2...b m för vårt intervall? Vi önskar förstås att koden är en prefixkod, dvs att kodordet entydigt pekar ut vårt intervall. Några alternativ: 1. Hitta det kortaste binära tal (0.b 1 b 2...b m ) 2 sådant att och (0.b 1 b 2...b m ) 2 l (n) (0.b 1 b 2...b m 1111...) 2 =(0.b 1 b 2...b m ) 2 +2 m <u (n) För att detta ska vara möjligt krävs att m = log P (x), eller m = log P (x) +1, beroende på intervallet. 2. Tag den binära representationen av T X (x) och trunkera den till m = log P (x) +1bitar. Minneskällor TSBK35 källkodning p. 57/89 Datatakt för aritmetisk kodning TSBK35 källkodning p.58/89 Vid aritmetisk kodning av minneskällor låter man intervalluppdelningen bero av tidigare symboler, dvs man använder olika F i varje steg beroende på vad tidigare symboler varit. Exempelvis, om vi har en binär markovkälla X t av ordning 1 med alfabetet {1, 2} och övergångssannolikheterna P (x t+1 x t ) P (1 1) = 0.8, P(2 1) = 0.2, P(1 2) = 0.1, P(2 2) = 0.9 så kommer vi att använda två olika fördelningsfunktioner F 1 (0) = 0, F 1 (1) = 0.8, F 1 (2) = 1 Datatakten blir generellt och för en minnesfri källa 1 n H(X 1...X n ) R 1 n H(X 1...X n )+ 2 n H(X) R H(X)+ 2 n Teoretiskt sett lite sämre än huffmankodning. Eftersom komplexiteten för kodaren inte beror på antalet symboler n vi kodar i taget, är det mycket enklare att komma nära entropigränsen än med en huffmankod. F 2 (0) = 0, F 2 (1) = 0.1, F 2 (2) = 1 För den första symbolen i sekvensen kan man antingen välja någon av de två fördelningarna, eller så använder man en tredje fördelningsfunktion baserad på de stationära sannolikheterna.

TSBK35 källkodning p. 63/89 TSBK35 källkodning p.64/89 Praktiska problem Fixpunktsaritmetik Vi har begränsad precision och kan inte lagra intervallgränser och sannolikheter med godtycklig noggrannhet. Vi vill kunna börja skicka bitar utan att vänta på att hela sekvensen med n symboler kodats. En lösning är att skicka bitar så snart vi är säkra på dem och att när detta görs skala om intervallet, så att vi maximalt utnyttjar den tillgängliga precisionen. Om den första biten i både den lägre och den övre gränsen är den samma måste även den biten i kodordet vara densamma. Då kan man skicka den biten och därefter skifta gränserna en bit, dvs skala om intervallstorleken med en faktor 2. Aritmetisk kodning implementeras oftast med fixpunktsaritmetik. Antag att intervallgränserna l (n) och u (n) lagras som heltal med m bitars noggrannhet och att fördelningsfunktionen F (i) lagras som heltal med k bitars noggrannhet. Algoritmen kan då modifieras till l (n) = l (n 1) + (u(n 1) l (n 1) +1)F (x n 1) 2 k u (n) = l (n 1) + (u(n 1) l (n 1) +1)F (x n ) 2 k 1 Startvärden blir l (0) =0och u (0) =2 m 1. Intervallskalning TSBK35 källkodning p. 61/89 Mer problem TSBK35 källkodning p.62/89 Fallen när vi ska göra intervallskalning blir: 1. Intervallet ligger helt inom [0, 2 m 1 1], dvs den mest signifikanta biten i både l (n) och u (n) är 0. Skifta ut mest signifikant bit ur l (n) och u (n) och skicka den. Skifta in 0 i l (n) och 1 i u (n). 2. Intervallet ligger helt inom [2 m 1, 2 m 1], dvs den mest signifikanta biten i både l (n) och u (n) är 1. Samma operationer som i fall 1. När vi har kodat våra n symboler avslutas kodordet genom att vi skickar alla m bitar i l (n). Koden kan visserligen bli en prefixkod även med färre bitar, men implementationen av avkodaren blir enklare om hela l skickas. För stora n blir de extra bitarna försumbara, dessutom måste man förmodligen ändå lagra bitarna i ett helt antal bytes. Tyvärr kan vi i vår algoritm hamna i problem, om den första biten i l hela tiden är 0 och den första biten i u är 1. I värsta fall hamnar vi i situationen att l = 011...11 och u = 100...00. Då kommer vår algoritm inte att fungera. Lyckligtvis kan vi komma runt detta problem. Om de två första bitarna i l blir 01 och de två första i u blir 10, kan vi göra ett bitskift, utan att skicka några bitar i kodordet. När sen de första bitarna i l och u blir detsamma kan vi förutom den biten även skicka en extra, inverterad bit, dvs vi är då säkra på om kodordet ska ha 01 eller 10.

TSBK35 källkodning p. 67/89 TSBK35 källkodning p.68/89 Intervallskalning Krav på precisionen Vi får nu tre fall 1. Intervallet ligger helt inom [0, 2 m 1 1], dvs den mest signifikanta biten i både l (n) och u (n) är 0. Skifta ut mest signifikant bit ur l (n) och u (n) och skicka den. Skifta in 0 i l (n) och 1 i u (n). 2. Intervallet ligger helt inom [2 m 1, 2 m 1], dvs den mest signifikanta biten i både l (n) och u (n) är 1. Samma operationer som i fall 1. 3. Vi har inte fall 1 eller 2, men intervallet ligger helt inom [2 m 2, 2 m 1 +2 m 2 1], dvs de två mest signifikanta bitarna är 01 i l (n) och 10 i u (n). Skifta ut mest signifikant bit ur l (n) och u (n). Skifta in 0 i l (n) och 1 i u (n). Invertera de nya mest signifikanta bitarna i l (n) och u (n). Skicka inga bitar, men håll reda på hur många gånger vi gör omskalningar av den här typen. Nästa gång vi gör en omskalning av typen 1, skicka lika många 1:or extra som antalet omskalningar av typ 3. På samma sätt, nästa gång vi gör en omskalning av typ 2 så skickas lika många extra 0:or som antalet omskalningar av typ 3. Vi måste använda en datatyp med minst m + k bitar för att få plats med delresultaten i beräkningarna. Vi ser också att det minsta intervall vi kan ha utan att någon omskalning görs har storleken 2 m 2 +1, vilket till exempel händer när l (n) =2 m 2 1 och u (n) =2 m 1. För att algoritmen ska fungera får aldrig u (n) bli mindre än l (n) (samma värde är tillåtet, när man skiftar ut bitar skiftas ju nollor in i l ochettoriniu). För att detta ska gälla måste alltså alla intervall i fördelningsfunktionen uppfylla (med en lätt överskattning) F (i) F (i 1) 2 k m+2 ; i =1,...,L Till exempel så måste m k +2om vi har något intervall av storlek 1. Avkodning TSBK35 källkodning p. 65/89 Lempel-Zivkodning TSBK35 källkodning p.66/89 Starta avkodaren i samma tillstånd (dvs l =0och u =2 m 1) som kodaren. Inför t som de m första bitarna i bitströmmen (kodordet). I varje steg räknar vi ut talet (t l +1) 2k 1 u l +1 Jämför detta tal med F för att se vilket intervall detta motsvarar. Detta ger en avkodad symbol. Uppdatera l och u på samma sätt som i kodaren. Vi gör eventuellt ett antal skift (omskalningar). Varje gång vi skalar om l och u ska vi även uppdatera t på samma sätt (skifta ut den mest signifikanta biten, skifta in en ny bit från kodströmmen som minst signifikant bit samt, om det är en om skalning av typ 3, invertera den nya mest signifikanta biten.) Repetera tills hela sekvensen är avkodad. Observera att kodaren kan behöva skicka antalet symboler som sidoinformation, så att avkodaren vet när den ska sluta avkoda. Alternativt kan man införa en extra symbol i sitt alfabet, med lägsta möjliga sannolikhet, som används för att markera när sekvensen tar slut. Koda symbolsekvenser genom referenser till vad som hänt tidigare i sekvensen. Två huvudtyper: Använd en historiebuffert, koda en delsekvens som en pekare till när sekvensen uppträdde senast (LZ77). Bygg upp en ordbok av alla unika delsekvenser som uppträder, koda referenser till tidigare ord (LZ78). Lempel-Zivkodning är mycket använd för filkomprimering, t.ex. zip, gzip, ARJ och compress. Lempel-Ziv används även i bildkomprimeringsstandarderna GIF och PNG, samt i modemstandarden V.42bis. Kodaren och avkodaren behöver inte känna till källans statistik. Prestanda kommer ändå asymptotiskt att gå mot entropigränsen. En sådan kodningsmetod kallas universell.

TSBK35 källkodning p. 71/89 TSBK35 källkodning p.72/89 LZ77 Förbättringar av LZ77 Lempel och Ziv, 1977. Betrakta sekvensen som ska kodas genom ett glidande fönster. Fönstret delas i två delar, en del som innehåller redan kodade symboler (search buffer) och en del som innehåller symboler som ska kodas härnäst (look-ahead buffer). Hitta den längsta sekvens i search buffer som matchar den sekvens som börjar i look-ahead buffer. Skicka en trippel <o,l,c>där o är en pekare till hur långt in i search buffer sekvensen börjar, l är längden av sekvensen, och c är nästa symbol som inte matchade. Denna trippel kodas enklast med ett fixlängds kodord. Antalet bitar som krävs är log S + log W + log N där S är storleken på search buffer, W storleken på look-ahead buffer och N är alfabetets storlek. Det är onödigt att skicka en pekare och en längd om vi inte hittade en matchande sekvens. Dessutom behöver vi bara skicka en ny symbol då vi inte hittade någon matchande sekvens. Inför istället en extra flaggbit som talar om om vi hittade en match eller inte. Antingen skickar vi alltså < 0,o,l>eller < 1,c>. Denna variant brukar kallas LZSS (Storer och Szymanski, 1982). Beroende på buffertstorlekarna kan det löna sig att koda korta matchningar som enstaka symboler istället. I början av kodningen, innan historiebufferten blivit fylld, kan man använda kortare kodord för o och l. Alla o, l och c är inte lika sannolika, så man kan få ytterligare kompression genom att koda dem med variabellängdskoder. LZ78 TSBK35 källkodning p. 69/89 TSBK35 källkodning p.70/89 Vad gör man när ordboken blir full? Lempel och Ziv, 1978. En ordbok av unika sekvenser byggs upp. Storleken på ordboken S. I början är ordboken tom, sånär som på index 0 som betyder ingen match. Varje ny sekvens som kodas skickas som tupeln <i,c>där i är index i ordboken för den längsta matchande sekvens vi hittar och c är nästa tecken i indata som inte matchade. Antalet bitar som krävs är log S + log N Några olika alternativ finns: Släng bort ordboken och börja om. Fortsätt koda med ordboken, men skicka bara index och lägg inte till några nya ord. Som ovan, men bara så länge som kompressionen är bra. Om den blir för dålig, släng ordboken och börja om. I det tredje fallet brukar man lägga till en extra symbol i alfabetet som talar om för avkodaren att den ska slänga ordboken och börja om. Vid avkodningen kan avkodaren bygga en identisk ordbok, så man behöver inte skicka någon sidoinformation.

TSBK35 källkodning p. 75/89 TSBK35 källkodning p.76/89 LZW Andra universella kodningsmetoder Variant av LZ78 (Welch, 1984) Istället för att skicka en tupel <i,c>skickar man bara index i till ordboken. För att det ska fungera måste startordboken innehålla alla enstaka symboler i alfabetet. Hitta den längsta matchande sekvensen i ordboken och skicka indexet som ett kodord. Den matchande sekvensen plus nästa symbol läggs som ett nytt ord i ordboken. Adaptiv huffmankodning och adaptiv aritmetisk kodning. Vid adaptiv kodning startar man med en känd sannolikhetsmodell. Varje gång man kodar en symbol uppdaterar man sin sannolikhetsmodell. Avkodaren börjar med samma kända modell, och efter varje avkodad symbol uppdateras modellen. Man behöver inte skicka sidoinformation om sannolikheter eller kodträd, eftersom avkodaren kan återskapa samma information som kodaren har. Lossless JPEG TSBK35 källkodning p. 73/89 Lossless JPEG, forts. TSBK35 källkodning p.74/89 JPEG är normalt en kodningsmetod för bilder som ger distorsion, men det finns även distorsionsfri mod i standarden. Bildpunkterna kodas radvis uppifrån och ner. Bildpunkten värde I ij på position (i, j) predikteras från närliggande bildpunkters värde. Det finns 7 prediktorer att välja bland: 1. Î ij = I i 1,j 2. Î ij = I i,j 1 3. Î ij = I i 1,j 1 4. Î ij = I i,j 1 + I i 1,j I i 1,j 1 5. Î ij = I i,j 1 +(I i 1,j I i 1,j 1 )/2 6. Î ij = I i 1,j +(I i,j 1 I i 1,j 1 )/2 7. Î ij = (I i,j 1 + I i 1,j )/2 Skillnaden d ij = I ij Î ij kodas antingen med en adaptiv aritmetisk kodare, eller med en huffmankod. Huffmankodning sker inte direkt på skillnadsvärdena. Istället bildar man k ij = log( d ij +1) Man beräknar statistik och bygger ett huffmanträd för signalen k ij. Kodordet för en skillnad d ij består av huffmankodordet för k ij plus k ij stycken extra bitar för att exakt specificera d ij. k ij d ij extra bitar 0 0 1 1, 1 0, 1 2 3, 2, 2, 3 00, 01, 10, 11 3 7,..., 4, 4,...,7 000,...,011, 100,...,111...

TSBK35 källkodning p. 79/89 TSBK35 källkodning p.80/89 Testbild, gråskala Testbild, färg Originalbild, 768 512 bildpunkter, 8 bitar per bildpunkt Originalbild, 768 512 bildpunkter, 24 bitar per bildpunkt TSBK35 källkodning p. 77/89 TSBK35 källkodning p.78/89 Kodning med lossless JPEG JPEG-LS Antal bitar per bildpunkt vid kodning av de två testbilderna med de olika prediktorerna gråskala färg Prediktor 1 4.35 13.15 Prediktor 2 4.17 12.58 Prediktor 3 4.55 13.79 Prediktor 4 4.26 12.83 Prediktor 5 4.15 12.51 Prediktor 6 4.09 12.33 Prediktor 7 4.00 12.07 Standard från 1997 för att koda bilder distorsionsfritt och nästan distorsionsfritt (near lossless). Nästan distorsionsfritt innebär att man tillåter att bildpunktsvärdena i den avkodade bilden avviker lite från originalbilden. Bildpunkterna kodas radvis uppifrån och ner. När bildpunkten (i, j) ska kodas tittar man först på de omgivande bildpunkterna i position (i, j 1), (i 1,j 1), (i 1,j) och (i 1,j+1). Man bildar en kontext genom att först beräkna gradienterna D 1 = I i 1,j+1 I i 1,j D 2 = I i 1,j I i 1,j 1 D 3 = I i 1,j 1 I i,j 1

TSBK35 källkodning p. 83/89 TSBK35 källkodning p.84/89 JPEG-LS, forts. JPEG-LS, forts. Gradienterna D k kvantiseras sen till tre heltal Q k så att 4 Q k 4. Kvantiseringsgränserna kan väljas av användaren. De tre talen Q k används för att räkna fram ett tal q som ligger mellan 0 och 364. Detta tal är vår kontext. Prediktionen av I ij görs enligt: Om I i 1,j 1 max(i i,j 1,I i 1,j ) Îij =max(i i,j 1,I i 1,j ) Om I i 1,j 1 min(i i,j 1,I i 1,j ) Îij =min(i i,j 1,I i 1,j ) Annars: Î ij = I i,j 1 + I i 1,j I i 1,j 1 För varje kontext q håller vi reda på om vår prediktion har ett systematiskt fel, om så är fallet justeras prediktionen lite i rätt riktning. Skillnaden mellan det riktiga pixelvärdet och det predikterade värdet d ij = I ij Î ij kodas med en golombkod med parameter m =2 k q.för varje kontext q håller man reda på vilken golombkod som är optimal, och k q justeras hela tiden adaptivt under kodningsprocessen. Kodaren detekterar även om det uppträder långa skurar med samma värde i rad, i sådana fall går den över till att koda skurlängder istället. Kodar vi våra testbilder med JPEG-LS får vi en medeldatatakt på 3.54 bitar/bildpunkt för gråskalebilden och 10.61 bitar/bildpunkt för färgbilden. TSBK35 källkodning p. 81/89 GIF (Graphics Interchange Format) GIF, ingen interlace TSBK35 källkodning p.82/89 Två standarder: GIF87a och GIF89a. Man specificerar en virtuell skärm. På denna skärm läggs mindre bilder in. För varje liten bild skickas position (i den virtuella skärmen) och storlek. I det enklaste fallet har man bara en bild som är lika stor som den virtuella skärmen. Man använder färgtabeller om maximalt 256 färger. Varje delbild kan ha sin egen färgtabell, men kan även använda en global färgtabell. Färgtabellsindex för pixlarna kodas med LZW. Två extra symboler används i alfabetet: ClearCode, som markerar att vi ska kasta ordboken och börja om, och EndOfInformation, som markerar att kodströmmen är slut. Interlace: Först skickar man linje 0, 8, 16,...sen linje 4, 12, 20,...sen linje 2, 6, 10,...och sist linje 1, 3, 5,... I GIF89a har man lagt till saker som animering och transparens. En fjärdedel av informationen mottagen.

TSBK35 källkodning p. 87/89 TSBK35 källkodning p.88/89 GIF, interlace GIF, forts. För vår gråskaletestbild får vi en medeldatatakt om 7.07 bitar/bildpunkt (inte särskilt hög kompression). GIF passar bättre för syntetiska bilder med stora områden med samma färg. Vi kan inte göra en jämförelse med andra kodningsmetoder för färgbilden, eftersom vi måste reducera antalet färger till 256. En fjärdedel av informationen mottagen. För linjer som inte mottagits än kopierar man bildpunkter från linjen ovanför. PNG (Portable Network Graphics) TSBK35 källkodning p. 85/89 PNG, forts. TSBK35 källkodning p.86/89 Togs fram som en ersättare till GIF, bland annat p.g.a. problem med patent. Använder en variant av LZ77 som kallas Deflate för att koda bilden. Det är samma metod som används i zip och gzip. Stödjer 5 olika prediktorer (kallade filter): 0 Ingen prediktion Historiebufferten har storlek 32768. Matchlängderna kan vara mellan 3 och 258. Längder och enstaka symboler kodas med ett gemensamt alfabet, antingen med en fix huffmankod eller en dynamisk huffmankod. Även offset kodas med variabellängds kodord, med kortare kodord för lägre värden. Klarar färgupplösning upp till 48 bitar (16 bitar per färgkomponent). Alfakanal (generell transparens). Se även: ftp://ftp.uu.net/graphics/png/ http://www.ietf.org/rfc/rfc1950.txt http://www.ietf.org/rfc/rfc1951.txt http://www.ietf.org/rfc/rfc2083.txt 1 Î ij = I i,j 1 2 Îij = I i 1,j 3 Îij = (I i 1,j + I i,j 1 )/2 4 Paeth (välj den av I i 1,j,I i,j 1 och I i 1,j 1 som ligger närmast I i 1,j + I i,j 1 I i 1,j 1 ) Vilket filter som används kan väljas separat för varje linje i bilden. Kodar vi våra testbilder med PNG får vi en medeldatatakt på 3.97 bitar/bildpunkt för gråskalebilden och 11.36 bitar/bildpunkt för färgbilden.

Sammanfattning Metod gråskala färg Huffman 7.51 Huffman, differensdata 4.13 Golomb, differensdata, var. I 4.47 Golomb, differensdata, var. II 4.48 Lossless JPEG 4.00 12.07 JPEG-LS 3.54 10.60 GIF 7.07 PNG 3.97 11.36 OBS! Detta var bara två testbilder, för mer ingående jämförelser bör man pröva metoderna på ett stort antal bilder. TSBK35 källkodning p. 89/89