TSBK35 fö 1 p.3 TSBK35 fö 1 p.4 Kurslitteratur Kompression av ljud och bild Harald Nautsch harna@isy.liu.se http://www.icg.isy.liu.se/courses/tsbk35/ ISY Bildkodning, Linköpings universitet Khalid Sayood, Introduction to Data Compression Övningshäfte. Köps via Bokakademin Elektroniska böcker, se kurssidorna. Formelsamling, labkompendium, föreläsningsslides, lösningsförslag till Sayood, gamla tentor, et c. finns på kurssidorna. Föreläsningar, preliminärt program TSBK35 fö 1 p.1 Laborationer TSBK35 fö 1 p.2 1. Inledning. Källmodeller, källkodning, huffmankodning. 2. Entropi, golombkoder, skurlängdskodning. Faxkodning 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. Delbandsskodning. JPEG-2000 10. Ljudkodning. Psykoakustik. mp3, AAC, Dolby Digital, Ogg Vorbis, ATRAC 11. Videokodning. H.26x, MPEG, DV 12. Talkodning, fraktalkodning. CELP, GSM 1. Distorsionsfri komprimering av stillbilder och musik. Görs i grupper om 2-3 personer. Redovisas med en liten rapport. 2. Kodning av musik. Görs i grupper om 2-3 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.
TSBK35 fö 1 p.7 TSBK35 fö 1 p.8 Lämpliga förkunskaper Vad är datakompression? Analys Linjär algebra (matriser, vektorer) Sannolikhetslära 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 fö 1 p.5 TSBK35 fö 1 p.6 Förekommande metoder Godhetsmått Exempel på distorsionsfri komprimering: 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 Ljud: MPEG-1 layer 3 (mp3), AC-3 (Dolby Digital), ATRAC (MiniDisc), Ogg Vorbis, AAC Tal: CELP, GSM 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) Ex. Vår bild ovan: 16384 8 256 256 =2bitar/bildpunkt För video- och ljudsignaler anger man ofta medeldatatakten i bitar/s.
TSBK35 fö 1 p.11 TSBK35 fö 1 p.12 Godhetsmått, forts Vad är originalet? 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. 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.) Egenskaper att utnyttja TSBK35 fö 1 p.9 Diskreta källor TSBK35 fö 1 p.10 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. 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.
TSBK35 fö 1 p.15 TSBK35 fö 1 p.16 Stokastiska källmodeller Stokastiska källmodeller, forts. 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. 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. Betingade sannolikheter: Källans utsignal i två tidpunkter t och s 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 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 ) P (x t,x s )=P (x t ) P (x s x t ) Minneskällor TSBK35 fö 1 p.13 Markovkällor TSBK35 fö 1 p.14 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 ) 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.
TSBK35 fö 1 p.19 TSBK35 fö 1 p.20 Verklig källa som stokastisk process. 1917 års bibel som markovkälla 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 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 TSBK35 fö 1 p.17 Källkodning TSBK35 fö 1 p.18 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 Koda sekvensen abbacddcd med våra fyra 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
Egenskaper hos koder TSBK35 fö 1 p.23 Exempel på koder TSBK35 fö 1 p.24 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. 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 TSBK35 fö 1 p.21 Är en given kod unikt avkodbar eller ej? Prestanda för koder TSBK35 fö 1 p.22 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. 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, kodordsmedellängd TSBK35 fö 1 p.27 Entropin som nedre gräns TSBK35 fö 1 p.28 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: Det finns en lägre gräns för hur bra en unikt avkodbar kod kan bli: 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). 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, forts. TSBK35 fö 1 p.25 Optimala koder TSBK35 fö 1 p.26 Bevis för l H(X t ) 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 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. Ofta kan man även konstruera koder där uppsättningen av kodordslängder skiljer sig åt, men som har samma medelkodordslängd. där vi utnyttjat ln x x 1 samt Kraft-McMillans olikhet
TSBK35 fö 1 p.31 Övre gräns för optimala koder Övre gräns, forts. 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 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 Vad är kodordsmedellängden? 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 ). Huffmankodning TSBK35 fö 1 p.29 TSBK35 fö 1 p.30 Enkel metod för att konstruera optimala koder. 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.