Ulike typer redundns INF 230 Digitl ildeehndling Kompresjon og koding Del II LZW-koding Aritmetisk koding JPEG-kompresjon v gråtoneilder JPEG-kompresjon v frgeilder Rekonstruksjonsfeil i ilder Tpsfri prediktiv koding F2 22.04.0 INF 230 Psykovisuell redundns Det finnes informsjon vi ikke kn se. D kn vi su-smple, eller redusere ntll it per piksel. Interilde redundns Det er en viss likhet mellom no-ilder i en tids-sekvens Vi koder noen ilder i sekvensen, og deretter re differnser. Intersmpel redundns No-piksler ligner på hverndre eller er like. Hver linje i ildet kn run-length trnsformeres. Kodings-redundns Gjennomsnittlig kodelengde minus et teoretisk minimum. Velg en metode som er grei å ruke, med liten redundns. F2 22.04.0 INF 230 2 Universell koding Lempel-Ziv-koding Huffmn-koding ygger på t mn finner ntll forekomster v hvert symol i teksten, og lger kodene fr dette. Kodene må lges fr gng til gng, og kodeoken må også oversendes. Er det mulig å finne en universell kode for hvor mnge gnger et symol forekommer? Vi kn f.eks. se på forekomster v ulike okstver i norsk eller engelsk tekst. e forekommer oftest, z, x og q er sjeldne Eller vi kn ygge opp kodestrenger etterhvert som vi ser gjenttte mønstere. Lempel-Ziv koding er et eksempel på universell koding v symoler (f.eks. en itsekvens). Premierer mønstre i dtene, ser på smforekomster v symoler. Bygger opp en symolstreng-liste åde under kompresjon og dekompresjon. Denne listen skl ikke lgres eller sendes, for mottkeren kn ygge opp listen ved hjelp v den symolstrengen hn mottr. Det eneste mn trenger er et stndrd lfet (f.eks ASCII). F2 22.04.0 INF 230 3 F2 22.04.0 INF 230 4
Lempel-Ziv-koding Mottker kjenner re lfetet, og lgrer nye frser ved å tnest siste streng pluss første symol i sist tilsendte streng, inntil listen er full (det er en prktisk grense her!). En ulempe er t mn v og til lger kodeord som mn ikke får ruk for. Finnes i Unix compress siden 96. Ble en del v GIF-formtet i 97. Er en opsjon i TIFF-formtet. Finnes i Aoe Acrot. Komprimerer typisk tekst-filer med c fktor 2. F2 22.04.0 INF 230 5 Eksempel på Lempel-Ziv Ant t lfetet er, og c som tilordnes kodene, 2 og 3. L dtene være c ( tegn) sender: ny frse = sendt streng pluss neste usendte symol mottker: ny frse = nest siste streng pluss første symol i sist tilsendte streng Ser c Sender 2 4 3 5 Senders liste =,=2,c=3 =4 =5 c=6 c=7 = =9 Mottr Vi mottr en kode som ikke finnes i listen. Kode le lget som +?, og nå sendes kode. Altså må vi h? = => = + =. F2 22.04.0 INF 230 6 2 4 3 5 Tolker c Mottkers liste =, =2, c=3 =4 =5 c=6 c=7 Eksempel på Lempel-Ziv - II Ser c Sender 2 4 3 5 0 0 Senders liste =,=2,c=3 =4 =5 c=6 c=7 = =9 =0 = =2 Mottr = =9 =0 = =2 Kode 0 le lget idet = le sendt, som 0 +?. Så sendes 0. D må vi h 0= + =. Istedenfor tegn er det sendt 0 koder. 5 v 2 koder le ikke rukt. F2 22.04.0 INF 230 7 2 4 3 5 0 0 Tolker c Mottkers liste =, =2, c=3 =4 =5 c=6 c=7 Et eksempel fr ok Dt : (6 piksler med gråtoner =39 og =26) sender: ny frse = sendt streng pluss neste usendte symol mottker: ny frse = nest siste streng pluss første symol i sist tilsendte streng ser sender 39 39 26 26 256 25 260 259 257 26 liste =256 =257 =25 =259 =260 =26 =262 =263 =264 mottr 39 39 26 26 256 25 260 259 257 26 Listen utvides fr til 9 iter Kompresjonsrte C= (6x)/(0x9) =.42 tolker liste 256= 257= 25= 259= 260= 26= 262= 263= 264= F2 22.04.0 INF 230
Aritmetisk koding Aritmetisk koding er en metode for tpsfri kompresjon. Det er en vriel lengde entropi-kode. Metoden produserer ikke kode-ord for enkelt-symoler. Metoden koder en sekvens v symoler til et tll n (0.0 n <.0). Dermed kn mn få en mer optiml koding enn med Huffmn-koding, fordi mn ikke lenger er egrenset til et heltlls ntll iter per tegn i sekvensen. Produserer nær optiml kode for et gitt sett v symoler og snnsynligheter. Jo edre smsvr det er mellom modellen og de virkelige forekomstene i sekvensen, desto nærmere optimlitet kommer mn. Aritmetisk koding - 2 Vi plsserer symol-snnsynlighetene etter hverndre på tllinjen fr 0 til. Får et estemt del-intervll mellom 0 og som tilsvrer hvert tegn. Hr vi to tegn etter hverndre, så lir det delintervllet som representerer dette tegnpret et delintervll v intervllet til det første tegnet, osv. Et kodeord for en lengre sekvens v tegn vil d eskrive et hlvåpent delintervll v det hlvåpne enhetsintervllet [0, ), og kodeordet må inneholde kkurt tilstrekkelig mnge iter til å gi en entydig peker til det riktige delintervllet. F2 22.04.0 INF 230 9 F2 22.04.0 INF 230 0 Algoritme Algoritmen kn eskrives i pros : Vi strter med et current intervl = [0,). For hvert nytt tegn gjør vi to ting: Vi deler opp current intervl i nye delintervller, der størrelsen på hvert delintervll er proporsjonl med snnsynligheten for vedkommende tegn. Vi velger det delintervllet v current intervl som svrer til det tegnet vi fktisk hr truffet på, og gjør dette til vårt nye current intervl. Til slutt ruker vi så mnge iter til å representere det endelige intervllet t det entydig skiller dette intervllet fr lle ndre mulige intervller. Sttisk modell Ant t vi hr følgende enkle sttiske snnsynlighets-modell: 60% snnsynlighet for symolet A 20% snnsynlighet for symolet B 0% snnsynlighet for symolet C 0% snnsynlighet for symol END-OF-DATA. Siden EOD ts med i modellen, får vi en intern terminering. Dette er gnske vnlig i prktisk dt-kompresjon. F2 22.04.0 INF 230 F2 22.04.0 INF 230 2
Koding Kodingen deler current intervl opp i su-intervller Hvert su-intervll hr en redde som er proporsjonl med snnsynligheten til et gitt symol i current context. Det intervllet som svrer til det neste symolet i sekvensen lir current intervl i neste steg. Eksempel: for den 4-tegns modellen vi hr: intervllet for A er [0.0, 0.6) intervllet for B er [0.6, 0.) intervllet for C er [0., 0.9) intervllet for EOD er [0.9, ). Et kodings-eksempel Ant t vi hr et lfet {,,c} med snnsynligheter {0.6,0.2,0.2}. Hvilket intervll mellom 0 og vil entydig representere teksten c? ligger i intervllet [0, 0.6). Current intervl hr nå en redde på 0.6. c ligger i intervllet [0+0.6*0., 0+0.6*) = [0.4, 0.6). Intervllredden er nå 0.2. c ligger i intervllet [0.4+0.2*0, 0.4+0.2*0.6) = [0.4, 0.552). Intervllredden er 0.072. c ligger i intervllet [0.4+0.072*0.6, 0.4+0.072*0.) = [0.5232, 0.5376). Intervllredden er 0.044. c er i [0.5232+0.044*0, 0.5232+0.044*0.6) = [0.5232, 0.534). Intervllredden er nå 0.0064 (= produktet 0.6*0.2*0.6*0.2*0.6). Et tll i intervllet, f.eks. 0.534, vil entydig representere teksten c, forutstt t mottkeren hr den smme modellen. F2 22.04.0 INF 230 3 F2 22.04.0 INF 230 4 Eksempel på dekoding Ant t vi skl dekode tllet 0.53 Vi strter med intervllet [0,) som current intervl. Vi ruker modellen med EOD, og deler opp i 4 su-intervller Vårt tll 0.53 ligger i su-intervllet for A, [0, 0.6): => Første tegn er A. Så deler vi opp intervllet [0, 0.6) for å finne neste tegn: intervllet for A er [0, 0.36) redde 60% v [0, 0.6) intervllet for B er [0.36, 0.4) redde 20% v [0, 0.6) intervllet for C er [0.4, 0.54) redde 0% v [0, 0.6) intervllet for EOD er [0.54, 0.6) redde 0% of [0, 0.6) Vårt tll.53 er i intervllet [0.4, 0.54): => Neste tegn må være C. Vi deler opp intervllet [0.4, 0.54): intervllet for A er [0.4, 0.56) intervllet for B er [0.56, 0.52) intervllet for C er [0.52, 0.534) intervllet for EOD er [0.534, 0.540). Tllet.53 ligger i intervllet for EOD: => Dekodingen er ferdig. Representsjon v desimltll Vi sender ikke desimltll, men et itmønster. Hvor mnge iter trenger vi for å gi en entydig representsjon v et intervll? Vi kn skrive tllet N i intervllet [0,) som en veiet sum v negtive toerpotenser N 0 = c *2 - + c 2 *2-2 + c 3 *2-3 + + c n *2 -n + Rekken v koeffisienter c c 2 c 3 c 4 utgjør d itmønsteret i den inære representsjonen v tllet. Det er dette vi mener når vi skriver desimltllet N som N=0.c c 2 c 3 c 4... 2 F2 22.04.0 INF 230 5 F2 22.04.0 INF 230 6
Desimltll som it-sekvens For å konvertere et desimltll i titllsystemet til et inært tll kn vi ruke suksessive multipliksjoner med 2 :. Vi multipliserer egge sider v ligningen nedenfor med 2: N 0 = c *2 - + c 2 *2-2 + c 3 *2-3 + + c n *2 -n + Heltllsdelen v resulttet er d lik c fordi 2N = c +R, der R = c 2 *2 - + c 3 *2-2 + + c n *2 -(n-) + Hvis resten er 0 er vi ferdige. 2. Multipliser resten R med 2. Heltllsdelen v resulttet er neste it. 3. Hvis resten er 0 er vi ferdige. Ellers går vi til 2. Representsjon v intervll - I Vi kn ruke intervllet [0.534, 0.540) som eksempel. 0.5390625 0 er et desimltll i dette intervllet. 2*0.5390625 =.0725 -> c =, rest =0.0725 2*0.0725 = 0.5625 -> c 2 = 0, rest =0.5625 2*0.5625 = 0.325 -> c 3 = 0, rest =0.325 2*0.325 = 0.625 -> c 4 = 0, rest =0.625 2*0.625 =.25 -> c 5 =, rest =0.25 2*0.25 = 0.50 -> c 6 = 0, rest = 0.5 2*0.5 =.0 -> c 7 =, rest = 0. Vi kn kode intervllet vårt med det inære desimltllet.0000 (ekvivlent med 0.5390625 desimlt) med re 7 iter. F2 22.04.0 INF 230 7 F2 22.04.0 INF 230 Representsjon v intervll - II Finn kortest mulig N=0.c c 2 c 3... innenfor [0.6, 0.7). Husk t i totll-systemet gjelder følgende : c k *2 -k + + c n *2 -n < c k- *2 -(k-) Ergo: N = 0. => 0.5 N < N = 0.0 => 0.5 N < 0.75 N = 0.00 => 0.5 N < 0.625 N = 0.0 => 0.625 N < 0.75 N = 0.00 => 0.625 N < 0.675 Vi kn kode intervllet vårt med det inære desimltllet.00 (ekvivlent med 0.625 desimlt) med re 4 iter. Prolemer og løsninger Den stdige krympingen v current intervl krever ritmetikk med stdig økende presisjon etter hvert som teksten lir lengre. Metoden gir ingen output før hele sekvensen er ehndlet. Løsning: Send den mest signifiknte iten strks den er entydig kjent, og så dole lengden på current intervl, slik t det re inneholder den ukjente delen v det endelige intervllet. Det finnes flere prktiske implementsjoner v dette, lle er gnske regnetunge de ller fleste er elgt med ptenter. F2 22.04.0 INF 230 9 F2 22.04.0 INF 230 20
Sttistiske modeller Sttiske histogrm-serte modeller er ikke optimle. Høyere ordens modeller endrer estimtet v snnsynligheten for et tegn (og dermed del-intervllet) sert på foregående tegn (context). I en modell for engelsk tekst vil intervllredden for u øke hvis u kommer etter Q eller q. Modellen kn også være dptiv, slik t den kontinuerlig endres ved en tilpsning til den fktiske dtstrømmen. Dekoderen må h den smme modellen som koderen! JPEG-koding (tpsfri) JPEG (Joint Photogrphic Expert Group) er et v de vnligste ildeformtene med kompresjon. JPEG-stndrden hr vrinter åde for tpsfri og ikke-tpsfri kompresjon. JPEG kn ruke enten Huffmn-koding eller ritmetisk koding. Prediktiv koding rukes for å predikere t neste piksel hr lignende verdi som forrige piksel å predikere t en piksel hr lignende verdi som pikselen på linjen over å predikere t neste piksel på linjen hr lignende verdi som de tre nærmest pikslene Typen koding estemmes fr ilde til ilde F2 22.04.0 INF 230 2 F2 22.04.0 INF 230 22 Ikke-tpsfri (lossy) kompresjon For å få høye kompresjonsrter, er det ofte nødvendig med ikke-tpsfri kompresjon. Ulempen er t mn ikke kn rekonstruere det originle ildet, fordi et informsjonstp hr skjedd. Enkle metoder for ikke-tpsfri kompresjon er rekvntisering til færre ntll gråtoner, eller resmpling til dårligere romlig oppløsning. Andre enkle metoder er filtering der f.eks. 3 3 piksler ersttter med ett nytt piksel som er enten middelverdien eller medinverdien v de opprinnelige pikselverdiene. F2 22.04.0 INF 230 23 Lossy JPEG-kompresjon v ilde Bildet deles opp i lokker på x piksler, og hver lokk kodes seprt. Trekk fr 2 fr lle pikselverdiene. Hver lokk trnsformeres med DCT (Diskret Cosinus Trnsform): F( u, v) 2 MN N M = πu πv forξ = 0 c( x) c( y)cos ( 2x + ) cos ( 2 y + ) f ( x, y), c( ξ ) = 2 = 0 2N 2M ellers x= 0 y DCT trnsform Informsjonen i de 64 pikslene smles i en liten del v de 64 koeffisientene Mest i øverste venstre hjørne F2 22.04.0 INF 230 24
Lossy JPEG-kompresjon 2 Trnsformkoeffisientene skleres med en vektmtrise kvntiseres til heltll. Lossy JPEG-kompresjon 3 Sikk-skk-scnning ordner koeffisientene i D-rekkefølge. divideres med Avrundes til F2 22.04.0 INF 230 25 Koeffisientene vil d stort sett vt i verdi utover i rekk Mnge koeffisienter er rundet v til null. Løpelengde-trnsform v koeffisientene Huffmn-koding v løpelengdene. Huffmn-koden og kodeoken sendes til mottker / lger. Gjents for lle lokker i lle knler. F2 22.04.0 INF 230 26 Aritmetisk koding v DC-koeff. JPEG dekompresjon - DC-koeffisientene fr lle lokkene legges etter hverndre. Disse er korrelerte og ør differnse-trnsformeres. Kjenner snnsynligheten for hvert symol i lfetet. Deler opp intervllet [0,) etter snnsynlighetene Velger intervllet som svrer til første tegn Deler intervllet i del-intervller Velger del-intervllet som svrer til ndre tegn Osv. En symolsekvens gir et tll i et intervll!!! Bruker så mnge iter t vi får en entydig eskrivelse. Huffmn-koden for en lokk er reversiel og gir løpelengdene. Løpelengdetrnsformen er reversiel, gir kvntiserte DCT-koeffisienter. Sikk-skk trnsformen er reversiel, og gir en heltllsmtrise. Denne mtrisen multipliseres med vektmtrisen. multipliseres med Dette gir F2 22.04.0 INF 230 27 F2 22.04.0 INF 230 2
JPEG dekompresjon - 2 JPEG dekompresjon 3 Dette er IKKE helt likt koeffisientene etter forlengs DCT-trnsformsjon. Så gjør vi en invers DCT, og får en rekonstruert piksels ildelokk. Men de store trekkene er evrt: De største tllene ligger i øvre venstre hjørne De fleste tllene i mtrisen er lik 0. invers DCT trnsform F2 22.04.0 INF 230 29 F2 22.04.0 INF 230 30 JPEG dekompresjon 4 Differnsene fr den originle lokken er små! - = 3 0 - -2 - -2-0 0 - - 0 2 2 0 5 3 3 3 3 3 3 3 0 0 2 3 4 4 4 4-3 -3-0 2 0 - -2 2 3 2 0 2 2-4 2 3 3-3 0 0-2 - 2 2 JPEG-kompresjon v frgeilde Vi skifter frgerom slik t vi seprerer lysintensitet fr kromsi (perseptuell redundns, sprer plss). Bildet deles opp i lokker på x piksler, og hver lokk kodes seprt. Vi skifter frgerom for hvert ildepln Kompresjon / dekompresjon lokk for lokk gir lokk-effekter i ildet. Hver lokk trnsformeres med DCT. Forskjellige vektmtriser for intensitet og kromtisitet.... resten er som for gråtoneilder... F2 22.04.0 INF 230 3 F2 22.04.0 INF 230 32
JPEG dekompresjon v frgeilde Alle dekomprimerte x-lokker i hvert ildepln smles til et ilde. Bildeplnene smles til et YIQ frgeilde Vi skifter frgerom fr YIQ til RGB for fremvisning, CMYK for utskrift. Rekonstruksjons-feil i gråtoneilder DCT kn gi piksels lokk-rtefkter, sløring og doelt-konturer. Avhengig v vektmtrise ntll koeffisienter for hvert ildepln smle ildeplnene Vi skifter frgerom Vi hr redusert oppløsning i Y og Q, men full oppløsning i RGB: Gir lokkeffekt i intensitet 6 6 piksels lokkeffekt i frgene i RGB F2 22.04.0 INF 230 33 F2 22.04.0 INF 230 34 Blokk-rtefkter Blokk-rtefktene øker med kompresjonsrten. Sklering v vekt-mtrisen Vi hr rukt vektmtrisen Z: Øverst: kompresjonsrte = 25 Nederst: kompresjonsrte = 52 Sklerer vi Z med, 2, 4, 6, 32 får vi C = 2, 9, 30 49, 5, 2 F2 22.04.0 INF 230 35 F2 22.04.0 INF 230 36
Rekonstruksjons-feil i frgeilder 24 iters RGB komprimert til.5-2 iter per piksel (pp) 0.5 0.75 pp gir god/meget god kvlitet 0.25 0.5 pp gir noen feil Frgefeil i mkrolokk JPEG gir lokkeffekt JPEG 2000 uten lokker: Høyere kompresjon Mye edre kvlitet Hvorfor DCT? Den implisitte N-punkts periodisiteten i Fouriertrnsformen vil introdusere høye frekvenser, og gir krftige lokk-rtefkter. DCT hr en implisitt 2N-punkts periodisitet, og unngår denne effekten. F2 22.04.0 INF 230 37 F2 22.04.0 INF 230 3 Blokkstørrelse Kompresjon og kompleksitet øker med lokkstørrelsen, men rekonstruksjonsfeilen vtr. Eksperiment: Del opp ildet i nxn piksels lokker Trnsformer Behold 25% v koeffisientene Gjør invers trnsform og eregn rms-feil Blokk-rtefkter vtr med økende lokkstørrelse. Tpsfri prediktiv koding Istedenfor å kode pikselverdiene f(x,y) kn vi kode e(x,y) = f(x,y) - g(x,y) der g er predikert fr m noer. En -D lineær prediktor v orden m: En første-ordens lineær prediktor: g( x, y) = round [ α f ( x, y) ] Hvilken trnsform er dette? Lik-lengde koding krever ekstr it Bruker entropi-koding Mx kompresjon er gitt ved: Biter per piksel i originl Entropien til prediksjonsfeilen Her lir mx C 2. m g( x, y) = round αi f ( x i, y) i= F2 22.04.0 INF 230 39 F2 22.04.0 INF 230 40
Tpsfri koding v ildesekvenser Prediksjon kn utvides til tids-sekvenser: Enklest mulig: første ordens lineær: Differnse-entropien er lv: H=2.59 Mx kompresjon: C /2.59 3 Bevegelses-deteksjon og evegelses-kompenssjon innenfor 6x6 mkro-lokker er nødvendig for å få høy kompresjon. m g( x, y, t) = round αi f ( x, y, t i) i= [ α f ( x, y, ) ] g( x, y, t) = round t Digitl video Koding v digitle ildesekvenser eller digitl video er sert på differnsekoding. Områder uten interilde evegelse kodes ikke flere gnger, kun koding i områder der endringer skjer. Med 50-60 ilder i sekundet er det mye å spre på dette. MPEG (Motion Picture Expert Group) stndrd for videokompresjon. MPEG historie: MPEG- video og udio (992) MPEG-2 Digitl TV og DVD (994) MPEG-4: Multimedi nvendelser (99) MPEG-7: Multimedi søking og filtering (200) MPEG-2: Multimedi uvhengig v plttform. F2 22.04.0 INF 230 4 F2 22.04.0 INF 230 42 Oppsummering - kompresjon Hensikten med kompresjon er mer kompkt lgring eller rsk oversending v informsjon. Kompresjon er sert på informsjonsteori. Antll it. pr. smpel er sentrlt, og vrierer med kompresjonsmetodene og dtene. Sentrle metoder: Før koding: løpelengde-trnsform og differnsetrnsform. Prediktiv koding: differnse i rom eller tid. Huffmn-koding lg snnsynlighetstell, send kokeok Universell koding (f.eks. Lempel Ziv) utnytter mønstre, sender ikke kokeok. Aritmetisk koding koder sekvenser til tll i et intervll. F2 22.04.0 INF 230 43