Skurlängdskodning
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 avskurar.
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
aaaabbbbbbbccbbbbaaaa som
(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.
Datakompression f ¨o 4 – p. 1
Faxkodning
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 linje 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 linje kan antingen kodas separat eller med hjälp av föregående linje.
Datakompression f ¨o 4 – p. 2
Faxkodning, forts.
När man kodar en linje 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 rsom
r = 64 · m + t , t = 0, . . . , 63ochm = 1, . . . , 27
Man inför även en extra symbol som talar om att linjen är slut (EOL), dvs att resten av linjen har samma färg.
Den första skuren på en linje antas vara vit.
Alfabetet med olikam,toch EOL kodas med fixa trädkoder, en vardera för vita respektive svarta skurar.
Denna typ av kodning kallas MH (modified huffman).
Faxkodning, forts.
Två linjer efter varandra är förmodligen ganska lika varandra. Detta kan utnyttjas vid kodningen.
Några definitioner:
a0 Den sista bildpunkten på en linje som är känd för både sändare och mottagare, dvs aktuell position på linjen. När man börjar är det en tänkt vit bildpunkt till vänster om linjens första punkt.
a1 Första bildpunkt till höger oma0 med motsatt färg. Känd endast av sändaren.
a2 Första bildpunkt till höger oma1 med motsatt färg. Känd endast av sändaren.
b1 Första bildpunkt till höger oma0på linjen ovanför som har motsatt färg. Känd av både sändare och mottagare.
b2 Första bildpunkt till höger omb1som har motsatt färg. Känd av både sändare och mottagare.
Faxkodning, forts.
Vid kodningen får man tre fall
1. Om bådeb1ochb2ligger mellana0ocha1 så skickas kodordet 0001.
Alla bildpunkter fram till punkten underb2 har samma färg. Denna punkt blir vår nyaa0. Nyab1 ochb2tas fram.
2. a1 ligger föreb2och avståndet mellanb1ocha1är högst 3. Avståndet a1− b1, {−3, −2, −1, 0, 1, 2, 3}kodas med
{0000010, 000010, 010, 1, 011, 000011, 00000011}. a1blir nya0. 3. I övriga fall skickas 001 och skurlängderna fråna0tilla1och fråna1
tilla2kodas med den endimensionella koden.
Datakompression f ¨o 4 – p. 5
Faxkodning, forts.
I grupp 3 använder man båda metoderna och kodar med jämna
mellanrum en linje rent endimensionellt, för att eventuella överföringsfel 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).
Datakompression f ¨o 4 – p. 6
Systematiska koder
Vid kodning av vågformsdata, såsom ljud eller bilder, har man ofta fördelningar där alfabetet är heltalA = {0, 1, 2, 3, . . .}(eller
A = {. . . , −2, −1, 0, 1, 2, . . .}) och där sannolikheterna avtar monotont med ökande värden.
I stället för att räkna statistik och konstruera trädkoder kan man då ofta användasystematiska koder, där kodorden enkelt kan fås fram direkt ur symbolerna.
Datakompression f ¨o 4 – p. 7
Den unära koden (Umbra-koden)
Kodordet för ett heltalnbestår avnettor följt av en nolla (OBS inkonsistens i Sayood, s. 61)
Symbol kodord
0 0
1 10
2 110
3 1110
4 11110
... ...
Den unära koden når entropigränsen för den dyadiska fördelningen p(i) = 2−(i+1)
Datakompression f ¨o 4 – p. 8
Eliaskoden
Tag den binära representationen av taleti, repetera varje bit och invertera den sista biten
Symbol binärt kodord
0 0 01 (alt. 0)
1 1 10
2 10 1101
3 11 1110
4 100 110001
5 101 110010
6 110 111101
7 111 111110
... ...
För att bli optimal måste man låta kodordet för 0 vara 0, annars får man ett outnyttjat kodord (00).
Datakompression f ¨o 4 – p. 9
Eliaskoden, forts.
Den modifierade eliaskoden uppnår entropigränsen för fördelningen (
p(0) = 0.5
p(i) = 2−2(1+blog ic)
dvs för en fördelning som avtar ungefär som1/i2
Datakompression f ¨o 4 – p. 10
Golombkoder
A = {0, 1, 2, . . .}
Välj parameterm
Representera heltaletnmedq = bmncochr = n − qm. Kodaqmed en unär kod.
Ommär en jämn tvåpotens, kodarbinärt medlog mbitar.
Omminte är en jämn tvåpotens:
0 ≤ r < 2dlog me− m Kodarbinärt medblog mcbitar 2dlog me− m ≤ r ≤ m − 1 Kodar + 2dlog me− m
binärt meddlog mebitar
Exempel på golombkoder
Symbol m = 1 m = 2 m = 3 m = 4
0 0 0 0 0 0 0 00
1 10 0 1 0 10 0 01
2 110 10 0 0 11 0 10
3 1110 10 1 10 0 0 11
4 11110 110 0 10 10 10 00
5 111110 110 1 10 11 10 01
6 1111110 1110 0 110 0 10 10 ... ... ... ... ... Golombkoder är optimala för fördelningar av typen
p(i) = qi· (1 − q) ; 0 < q < 1 om man väljerm = d−log q1 e
Exp-golombkoder
Symbol k = 0 k = 1 k = 2
0 0 0 0 0 00
1 10 0 0 1 0 01
2 10 1 10 00 0 10
3 110 00 10 01 0 11
4 110 01 10 10 10 000
5 110 10 10 11 10 001
6 110 11 110 000 10 010
7 1110 000 110 001 10 011 8 1110 001 110 010 10 100 9 1110 010 110 011 10 101 10 1110 011 110 100 10 110
... ... ... ...
Exp-golombkoder används bl.a. i H.264
Datakompression f ¨o 4 – p. 13
Tunstallkoder
En tunstallkod är en kod där alla kodorden har ett fixt antal bitar, men där antalet källsymboler som kodas med varje kodord är variabelt.
Bestäm kodordslängdenn(maximalt2nkodord).
Elementen i kodboken är strängar av symboler ur alfabetet.
Börja med en kodbok som består av deLsymbolerna i alfabetet.
I varje steg, tag bort det mest sannolika elementet i kodboken och ersätt det med deLsträngar som fås då man konkatenerar elementet med var och en av deLsymbolerna. Beräkna sannolikheter för de nya elementen.
Datakompression f ¨o 4 – p. 14
Tunstallkodning, forts.
Vid varje steg utökar vi kodboken medL − 1element, så vi kan göra detta kggr därkär det största heltal sådant att
L + k(L − 1) ≤ 2n Ge varje element i kodboken ett kodord mednbitar.
Elementen i kodboken är löv i ettL-närt träd, så vi kan beräkna
medeldjupetd¯(symboler/kodord) i detta träd. Eftersom varje kodord harn bitar blir datataktenR
R = n
d¯ [bitar/symbol]
Tunstallkoder är oftast något sämre än huffmankoder. De funkar bra när alfabetet är litet, men är väldigt opraktiska när man har ett stort alfabet.
Datakompression f ¨o 4 – p. 15
Testbild Goldhill
512 × 512bildpunkter, 8 bitar/bildpunkt
Datakompression f ¨o 4 – p. 16
Enkel huffmankodning
Histogram för Goldhill:
0 50 100 150 200 250
0 500 1000 1500 2000 2500 3000
Huffmankodning ger en medeldatatakt på 7.50 bitar/bildpunkt Längsta kodord 16 bitar, kortaste kodord 7 bitar.
Vi har inte utnyttjat något av det beroende som finns mellan bildpunkter
Datakompression f ¨o 4 – p. 17
Huffmankodning av skillnader
Istället för att koda bildpunkterna direkt, kodar vi skillnaden i pixelvärde mellan en bildpunkt och den ovanför. Minsta skillnaden är -112, största skillnaden 185.
Histogram för skillnader:
−1500 −100 −50 0 50 100 150 200
2000 4000 6000 8000 10000 12000 14000 16000 18000
Huffmankodning av skillnaderna ger en medeldatatakt på 5.34 bitar/bildpunkt.
Längsta kodord 18 bitar, kortaste kodord 4 bitar.
Datakompression f ¨o 4 – p. 18
Golombkodning I
Vi måste först modifiera värdena så att vi bara har icke-negativa värden, vilket vi t.ex. kan göra med avbildningen
F (x) =
( 2x ; x ≥ 0
−2x − 1 ; x < 0
dvs de negativa talen avbildas på udda positiva tal och de positiva talen avbildas på jämna positiva tal.
F−1(x) =
( x
2 ; xjämn
−x+12 ; xudda
Golombkodning I, forts.
Histogram för modifierade skillnader
−500 0 50 100 150 200 250 300 350 400
2000 4000 6000 8000 10000 12000 14000 16000 18000
Den bästa golombkoden är den med parameterm = 10, vilken ger en medeldatatakt på 5.38 bitar/bildpunkt.
Golombkodning II
Alternativt kan vi koda absolutvärdet av skillnaderna med en golombkod och skicka en extra teckenbit för varje nollskilt värde
Histogram för absolutvärdet av skillnaderna
−500 0 50 100 150 200
0.5 1 1.5 2 2.5 3 3.5x 104
Den bästa golombkoden är den med parameterm = 5, vilken ger en medeldatatakt på 5.42 bitar/bildpunkt.
Datakompression f ¨o 4 – p. 21
Lossless JPEG
JPEG är normalt en bildkodningsmetod som ger distorsion, men det finns även distorsionsfri mod i standarden.
Bildpunkterna kodas radvis uppifrån och ner.
BildpunktenIijpå position(i, j)predikteras från närliggande bildpunkter.
Det finns 7 val av prediktor:
1.Iˆij= Ii−1,j
2.Iˆij= Ii,j−1
3.Iˆij= Ii−1,j−1
4.Iˆij= Ii,j−1+ Ii−1,j− Ii−1,j−1
5.Iˆij= Ii,j−1+ b(Ii−1,j− Ii−1,j−1)/2c 6.Iˆij= Ii−1,j+ b(Ii,j−1− Ii−1,j−1)/2c 7.Iˆij= b(Ii,j−1+ Ii−1,j)/2c
Datakompression f ¨o 4 – p. 22
Lossless JPEG, forts.
Skillnadendij= Iij− ˆIijkodas antingen med en adaptiv aritmetisk kodare, eller med en huffmankod.
Huffmankodning sker inte direkt på skillnadsvärdena. Istället bildar man
kij= dlog(|dij| + 1)e
Man beräknar statistik och bygger ett huffmanträd för signalenkij. Kodordet för en skillnaddijbestår av huffmankodordet förkij pluskij
stycken extra bitar för att exakt specificeradij.
kij dij 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
... ... ...
Datakompression f ¨o 4 – p. 23
Lossless JPEG, forts.
Kodning av Goldhill med lossless JPEG:
Prediktor 1 5.39 bitar/bildpunkt Prediktor 2 5.42 bitar/bildpunkt Prediktor 3 5.80 bitar/bildpunkt Prediktor 4 5.27 bitar/bildpunkt Prediktor 5 5.16 bitar/bildpunkt Prediktor 6 5.15 bitar/bildpunkt Prediktor 7 5.13 bitar/bildpunkt
För olika bilder kommer olika prediktorer vara bäst. Standarden stöder även att man kodar olika delar i bilden med olika prediktorer.
Datakompression f ¨o 4 – p. 24
JPEG-LS
Standard 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 enkontext genom att först beräkna gradienterna
D1 = Ii−1,j+1− Ii−1,j
D2 = Ii−1,j− Ii−1,j−1
D3 = Ii−1,j−1− Ii,j−1
Datakompression f ¨o 4 – p. 25
JPEG-LS, forts.
GradienternaDkkvantiseras sen till tre heltalQkså att−4 ≤ Qk≤ 4. Kvantiseringsgränserna kan väljas av användaren. VarjeQkkan ta 9 olika värden, vilket innebär att vi har 729 möjliga kombinationer. Kombinationer med inverterade tecken räknas som samma kontekt vilket alltså slutligen ger oss 365 olika kontexter.
Prediktionen avIijgörs enligt:
OmIi−1,j−1≥ max(Ii,j−1, Ii−1,j) ⇒ ˆIij= max(Ii,j−1, Ii−1,j) OmIi−1,j−1≤ min(Ii,j−1, Ii−1,j) ⇒ ˆIij= min(Ii,j−1, Ii−1,j) Annars:Iˆij= Ii,j−1+ Ii−1,j− Ii−1,j−1
För varje kontextqhåller vi reda på om vår prediktion har ett systematiskt fel, om så är fallet justeras prediktionen lite i rätt riktning.
Datakompression f ¨o 4 – p. 26
JPEG-LS, forts.
Skillnaden mellan det riktiga pixelvärdet och det predikterade värdet dij= Iij− ˆIijkodas med en golombkod med parameterm = 2kq. För varje kontextqhåller man reda på vilken golombkod som är optimal, och kqjusteras 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 Goldhill med JPEG-LS får vi en medeldatatakt på 4.71 bitar/bildpunkt.