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

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

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

FLAC (Free Lossless Audio Coding)

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

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.

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

Adaptiv aritmetisk kodning

Kompression av ljud och bild

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

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

Shannon-Fano-Elias-kodning

Burrows-Wheelers transform

TSBK04 Datakompression. Övningsuppgifter

TSBK04 Datakompression Övningsuppgifter

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

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

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

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

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

Föreläsning 17 - Komprimering

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

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

Föreläsning 7: Bild- och videokodning

Föreläsning 1: Bild- och ljudkodning

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

Torstens Digitalbildguide

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

Övning 6 - Tillämpad datalogi 2012

TSBK35 Kompression av ljud och bild

Förlustfri datakompression

Lab 3 Kodningsmetoder

Övning 6. Komprimering, kryptering, dokumentering & testning

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

F3 Datarepresentation teckenkodning och datakompression

Tildatenta Lösningsskiss

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

Kodning med distorsion

INT 3 F3. En texts läsbarhet. Teckensnitt. Medieteknik Del1. Färger, teckensnitt och bildformat

Pixelgrafik. Utdrag ur Adobe Photoshops handbok. Om bitmappsbilder (pixelbilder) Om vektorgrafik (kallas ibland objektgrafik)

Databaser - Design och programmering. Minnesteknik. Minnesteknik, forts. Hårddisk. Primärminne (kretsteknik) Fysisk design av databasen

Bildlagring och - komprimering

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

Databaser Design och programmering Minnesteknik Minnesteknik, forts Utvecklingen Hårddisk Hårddisk, forts

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.

Synsinnet. Komprimeringsexempel. Förlustkomprimering - Bakgrund. Image Coding. Common Image Formats GIF

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Materialspecifikation för alla Portalens mässajter

Föreläsning 7. Felrättande koder

Digital bildhantering

Magnus Nielsen, IDA, Linköpings universitet

Synsinnet. Komprimeringsexempel. Förlustkomprimering - Bakgrund. Common Image Formats. Image Coding GIF. GIF (Graphis Interchange Format)

Bilder. Bilder och bildformat

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

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

Databaser Design och programmering. Fysisk design av databasen att ta hänsyn till implementationsaspekter: minnesteknik filstrukturer indexering

Tentamen i Digitalteknik, EIT020

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Datateknik GR (A), Flash, Photoshop och Datakunskap, 7,5 hp

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

1 Kursmaterialets uppläggning Kursmaterialets utformning Installation av övningsfiler... 6

SeniorNet Huddinge

Tentamen Datastrukturer D DAT 035/INN960

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

Analys/syntes-kodning

DIGITAL BILDBEHANDLING GRUNDKURS. Sammanställd av

Datateknik GR (A), Flashapplikationer och Photoshop, 7,5 hp

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

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

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

Föreläsning 3.1: Datastrukturer, en översikt

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Föreläsning 12. Söndra och härska

De olika exportmetoderna för rasterfiler inne i ArcMap är BMP, TIFF, GIF och PNG.

Histogram över kanter i bilder

Laboration 4: Digitala bilder

Tentamen i Grundläggande Programvaruutveckling, TDA548

Vinjetter TDDC91 Datastrukturer och algoritmer

Exportera karta juni 2010

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Giriga algoritmer och dynamisk programmering

Minnesteknik. Minnen lämpliga för databaser. Minnesteknik, forts. Databaser design och programmering. temporärt/flyktig Snabbt Dyrt

Träd och koder. Anders Björner KTH

Att skapa en bakgrundsbild och använda den i HIPP

Programmeringsuppgift Game of Life

Fillagring och indexering

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Asymptotisk analys innebär att... man försöker uppskatta vad som händer för stora indatamängder.

Tommy Färnqvist, IDA, Linköpings universitet

N = {i}: noder (hörn) Graf: G = (N, B) Definitioner. Väg: Sekvens av angränsande bågar. Cykel: Väg som startar och slutar i samma nod.

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Tentamen Datastrukturer för D2 DAT 035

Uppgift 1 ( Betyg 3 uppgift )

Fredag 10 juni 2016 kl 8 12

Föreläsning 5: Grafer Del 1

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

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.

Kodning av ansiktstextur med oberoende komponenter

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

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

Transkript:

Datakompression fö 6 p.1 Ordbokskodning Enkel variant av kodning med variabelt antal insymboler och fixlängds kodord. (Jfr tunstallkodning) Man skapar en ordbok som innehåller 2 b olika sekvenser av symboler från alfabetet och kodar med kodord av längd b. Statiska ordböcker kan fungera bra om man bara kodar sekvenser med välkänd statistik, annars vill man ha någon metod för att adaptivt bygga upp sin ordbok.

Datakompression fö 6 p.2 Exempel, minnesfri binär källa A = {x, y}, p(x) =0.9, p(y) =0.1. Låt b =3. Låt ordboken bestå av de två enstaka symbolerna, plus de 6 mest sannolika sekvenserna av längd 4. Denna kod har datatakten Sekvens kodord x 000 y 001 xxxx 010 xxxy 011 xxyx 100 xyxx 101 yxxx 110 xxyy 111 R = 3 0.9558 + 12 0.0442 4 =0.84945

Datakompression fö 6 p.3 Lempel-Zivkodning Koda symbolsekvenser genom referenser till vad som hänt tidigare i sekvensen. Det finns 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).

Datakompression fö 6 p.4 Lempel-Zivkodning, forts. Kodaren och avkodaren behöver inte känna till källans statistik. Prestanda kommer asymptotiskt att gå mot entropigränsen. En sådan kodningsmetod kallas universell. Lempel-Zivkodning i dess olika varianter är de mest använda metoderna för filkomprimering och -arkivering, t.ex. zip, gzip, ARJ och compress. Bildkomprimeringsstandarderna GIF och PNG använder Lempel-Ziv. Standarden V.42bis för komprimering av modemtrafik använder Lempel-Ziv.

Datakompression fö 6 p.5 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), 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. Kodordet är en trippel <o,l,c>där o är en pekare till var i search buffer sekvensen börjar (offset), l är längden av sekvensen, och c är nästa symbol som inte matchade. Denna trippel kodas 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.

Datakompression fö 6 p.6 Förbättringar av LZ77 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å < 1,o,l>eller < 0,c>. Denna variant av LZ77 brukar kallas LZSS (Storer och Szymanski, 1982). Beroende på buffertstorlekarna kan det även löna sig att koda korta sekvenser som ett antal enstaka symboler istället för en match. 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 (t.ex. huffmankoder).

Datakompression fö 6 p.7 Buffertstorlekar I princip får man bättre kompression ju större historiebuffert man använder. Av praktiska skäl så brukar man nöja sig med buffertstorlekar runt 2 15 2 16. Det är inte så vanligt med väldigt långa matchlängder, så man kan oftast nöja sig med att låta den maximala matchlängden vara ett eller par hundra symboler. Exempel: LZSS-kodning av 500000 tecken från bibeln.txt, buffertstorlek 32768. Histogram för matchlängder: 12000 10000 8000 6000 4000 2000 0 0 20 40 60 80 100 120 140

Datakompression fö 6 p.8 DEFLATE Deflate är en variant av LZ77 som använder huffmankodning. Det är den metod som används i zip, gzip och PNG. Indata som kodas är bytes. Datat kodas i block av godtycklig storlek (undantaget okomprimerade block som kan vara max 65536 bytes). Blocket kan kodas antingen okomprimerat eller med hjälp av LZ och huffmankodning. Matchlängderna kan vara mellan 3 och 258. Offset kan vara mellan 1 och 32768. Huffmankodningen är antingen fix (fördefinierade kodord) eller dynamisk (kodorden skickas som sidoinformation). Två huffmankoder används: en kod för enstaka symboler (literals) och matchlängder och en kod för offset.

Datakompression fö 6 p.9 Symboler och längder Huffmankoden för symboler och längder använder alfabetet {0, 1,...,285} där värden 0-255 tolkas som symboler, värdet 256 markerar blockslut och värden 257-285 används för att koda längder tillsammans med extra bitar: extra extra extra bitar längd bitar längd bitar längd 257 0 3 267 1 15,16 277 4 67-82 258 0 4 268 1 17,18 278 4 83-98 259 0 5 269 2 19-22 279 4 99-114 260 0 6 270 2 23-26 280 4 115-130 261 0 7 271 2 27-30 281 5 131-162 262 0 8 272 2 31-34 282 5 163-194 263 0 9 273 3 35-42 283 5 195-226 264 0 10 274 3 43-50 284 5 227-257 265 1 11,12 275 3 51-58 285 0 258 266 1 13,14 276 3 59-66

Datakompression fö 6 p.10 Offset Huffmankoden för offset använder alfabetet {0,...,29}. Extrabitar används för att specificera offset 5-32768 extra extra extra bitar offset bitar offset bitar offset 0 0 1 10 4 33-48 20 9 1025-1536 1 0 2 11 4 49-64 21 9 1537-2048 2 0 3 12 5 65-96 22 10 2049-3072 3 0 4 13 5 97-128 23 10 3073-4096 4 1 5,6 14 6 129-192 24 11 4097-6144 5 1 7,8 15 6 193-256 25 11 6145-8192 6 2 9-12 16 7 257-384 26 12 8193-12288 7 2 13-16 17 7 385-512 27 12 12289-16384 8 3 17-24 18 8 513-768 28 13 16385-24576 9 3 25-32 19 8 769-1024 29 13 24577-32768

Datakompression fö 6 p.11 Fixa huffmankoder Kodord för symbol/längd-alfabetet: värde antal bitar kodord 0-143 8 00110000-10111111 144-255 9 110010000-111111111 256-279 7 0000000-0010111 280-287 8 11000000-11000111 Det reducerade offsetalfabetet kodas med en fembitars fixlängdskod. Exempelvis kodas alltså en match av längd 116 på offset 12 med kodorden 11000000 0001 och 00110 11.

Datakompression fö 6 p.12 Dynamiska huffmankoder Kodordslängderna för de olika huffmankoderna skickas som extra information. För att få ytterligare kompression skurlängdskodas sekvensen av kodordslängder först och huffmankodas sen (!). Kodordslängderna för denna huffmankod skickas som som trebitars fixlängdskodord. Algoritmen för att konstruera kodorden från kodordslängderna är specificerad i standarden.

Datakompression fö 6 p.13 Kodning Det som är standardiserat är syntax för den kodade sekvensen och hur den ska avkodas, däremot är det inte hårt specificerat hur en kodare ska fungera. Det finns en rekommendation om hur man kan konstruera en kodare: Sökningen efter matchande sekvenser görs inte med uttömmande sökning i hela historiebufferten, utan med hjälp av hashning. Ett hashvärde räknas fram från de tre första symbolerna som ska kodas härnäst. I hashtabellen håller man reda på de offset där sekvenser med samma hashvärde startar (förhoppningsvis sekvenser där de tre första symbolerna stämmer överens, men det kan man inte garantera). De offset som har samma hashvärde söks igenom för att hitta den längsta matchningen, med början från den senaste adderade. Hittas ingen match kodas den första symbolen som en enstaka symbol. Man begränsar även sökdjupet för att få en snabbare kodning, på bekostnad av kompressionen. T.ex. styr komprimeringsparametern i gzip hur noga man söker.

Datakompression fö 6 p.14 Dokument Se även: ftp://ftp.uu.net/pub/archiving/zip/ 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/rfc1952.txt http://www.ietf.org/rfc/rfc2083.txt

Datakompression fö 6 p.15 LZ78 Lempel och Ziv 1978. En ordbok av unika sekvenser byggs upp. Storleken på ordboken är 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 Avkodaren kan bygga en identisk ordbok.

Datakompression fö 6 p.16 LZ78, forts. Vad gör man när ordboken blir full? Det finns några olika alternativ: 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 detta fall kan man behöva lägga till en extra symbol i alfabetet som talar om för avkodaren när man ska börja om.

Datakompression fö 6 p.17 LZW LZW är en 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.

Datakompression fö 6 p.18 GIF (Graphics Interchange Format) Två standarder: GIF87a och GIF89a. Man specificerar en virtuell skärm. På denna skärm läggs rektangulära bilder in. För varje liten bild skickas position och storlek. 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.

Datakompression fö 6 p.19 PNG (Portable Network Graphics) Togs fram delvis som ersättare till GIF eftersom LZW var patenterad (patenten har nyligen gått ut). Använder deflate som komprimeringsmetod. Färgdjup upp till 3 16 bitar. Alfakanal (generell transparens). Möjlighet att utnyttja beroende mellan bildpunkter (gör en prediktion från omgivande bildpunkter och koda skillnanden mellan prediktionen och det riktiga värde), vilket gör det enklara att koda naturliga bilder.

Datakompression fö 6 p.20 PNG, forts. Stödjer 5 olika prediktorer (kallade filter): 0 Ingen prediktion 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 )

Datakompression fö 6 p.21 Testbild Goldhill Vi kodar testbilden Goldhill och jämför med tidigare resultat: GIF PNG 7.81 bitar/bildpunkt 4.89 bitar/bildpunkt JPEG-LS Lossless JPEG 4.71 bitar/bildpunkt 5.13 bitar/bildpunkt GIF fungerar inte särskilt bra på naturliga bilder, eftersom den har svårt att utnyttja den typ av beroende som finns där.