Ulike typer redundns INF 30 Digitl bildebehndling Kompresjon og koding Del II LZW-koding Aritmetisk koding JPEG-kompresjon v gråtonebilder JPEG-kompresjon v frgebilder Rekonstruksjonsfeil i bilder Efford: Kp..4.4 (grundigere enn i bok) F 4.04.07 INF 30 Psykovisuell redundns Det finnes informsjon vi ikke kn se. D kn vi sub-smple, eller redusere ntll bit per piksel. Interbilde redundns Det er en viss likhet mellom nbo-bilder i en tids-sekvens Vi koder noen bilder i sekvensen, og deretter bre differnser. Intersmpel redundns Nbo-piksler ligner på hverndre eller er like. Hver linje i bildet kn run-length trnsformeres. Kodings-redundns Gjennomsnittlig kodelengde minus et teoretisk minimum. Velg en metode som er grei å bruke, med liten redundns. F 4.04.07 INF 30 Universell koding Lempel-Ziv-koding Huffmn-koding bygger på t mn finner ntll forekomster v hvert symbol i teksten, og lger kodene fr dette. Kodene må lges fr gng til gng, og kodeboken må også oversendes. Er det mulig å finne en universell kode for hvor mnge gnger et symbol forekommer? Vi kn f.eks. se på forekomster v ulike bokstver i norsk eller engelsk tekst. e forekommer oftest, z, x og q er sjeldne Eller vi kn bygge opp kodestrenger etterhvert som vi ser gjenttte mønstere. Lempel-Ziv koding er et eksempel på universell koding v symboler (f.eks. en bitsekvens). Premierer mønstre i dtene, ser på smforekomster v symboler. Bygger opp en symbolstreng-liste både under kompresjon og dekompresjon. Denne listen skl ikke lgres eller sendes, for mottkeren kn bygge opp listen ved hjelp v den symbolstrengen hn mottr. Det eneste mn trenger er et stndrd lfbet (f.eks ASCII). F 4.04.07 INF 30 3 F 4.04.07 INF 30 4
Lempel-Ziv-koding Mottker kjenner bre lfbetet, og lgrer nye frser ved å tnest siste streng pluss første symbol 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 bruk for. Finnes i Unix compress siden 96. Ble en del v GIF-formtet i 97. Er en opsjon i TIFF-formtet. Finnes i Abobe Acrobt. Komprimerer typisk tekst-filer med c fktor. F 4.04.07 INF 30 5 Eksempel på Lempel-Ziv Ant t lfbetet er, b og c som tilordnes kodene, og 3. L dtene være bbcbbbbb ( tegn) sender: ny frse = sendt streng pluss neste usendte symbol mottker: ny frse = nest siste streng pluss første symbol i sist tilsendte streng Ser b b c b bb Sender 4 3 5 Senders liste =,b=,c=3 b=4 b=5 bc=6 cb=7 bb= bb=9 Mottr Vi mottr en kode som ikke finnes i listen. Kode ble lget som b+?, og nå sendes kode. Altså må vi h? = b => = b + b = bb. F 4.04.07 INF 30 6 4 3 5 Tolker b b c b Mottkers liste =, b=, c=3 b=4 b=5 bc=6 cb=7 Eksempel på Lempel-Ziv - II Ser b b c b bb bb Sender 4 3 5 0 0 Senders liste =,b=,c=3 b=4 b=5 bc=6 cb=7 bb= bb=9 =0 = b= Mottr bb= bb=9 =0 = b= Kode 0 ble lget idet = ble sendt, som 0 +?. Så sendes 0. D må vi h 0= + =. Istedenfor tegn er det sendt 0 koder. 5 v koder ble ikke brukt. F 4.04.07 INF 30 7 4 3 5 0 0 Tolker b b c b bb bb Mottkers liste =, b=, c=3 b=4 b=5 bc=6 cb=7 Aritmetisk koding Aritmetisk koding er en metode for tpsfri kompresjon. Det er en vribel lengde entropi-kode. Metoden produserer ikke kode-ord for enkelt-symboler. Metoden koder en sekvens v symboler 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 begrenset til et heltlls ntll biter per tegn i sekvensen. Produserer nær optiml kode for et gitt sett v symboler og snnsynligheter. Jo bedre smsvr det er mellom modellen og de virkelige forekomstene i sekvensen, desto nærmere optimlitet kommer mn. F 4.04.07 INF 30
Aritmetisk koding - Vi plsserer symbol-snnsynlighetene etter hverndre på tllinjen fr 0 til. Får et bestemt del-intervll mellom 0 og som tilsvrer hvert tegn. Hr vi to tegn etter hverndre, så blir 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 beskrive et hlvåpent delintervll v det hlvåpne enhetsintervllet [0, ), og kodeordet må inneholde kkurt tilstrekkelig mnge biter til å gi en entydig peker til det riktige delintervllet. Algoritme Algoritmen kn beskrives 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 bruker vi så mnge biter til å representere det endelige intervllet t det entydig skiller dette intervllet fr lle ndre mulige intervller. F 4.04.07 INF 30 9 F 4.04.07 INF 30 0 Sttisk modell Ant t vi hr følgende enkle sttiske snnsynlighets-modell: 60% snnsynlighet for symbolet A 0% snnsynlighet for symbolet B 0% snnsynlighet for symbolet C 0% snnsynlighet for symbol END-OF-DATA. Siden EOD ts med i modellen, får vi en intern terminering. Dette er gnske vnlig i prktisk dt-kompresjon. Koding Kodingen deler current intervl opp i sub-intervller Hvert sub-intervll hr en bredde som er proporsjonl med snnsynligheten til et gitt symbol i current context. Det intervllet som svrer til det neste symbolet i sekvensen blir 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, ). F 4.04.07 INF 30 F 4.04.07 INF 30
Eksempel på dekoding Ant t vi skl dekode tllet 0.53 Vi strter med intervllet [0,) som current intervl. Vi bruker den modellen vi hr, og deler opp i 4 sub-intervller Vårt tll 0.53 ligger i sub-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) bredde 60% v [0, 0.6) intervllet for B er [0.36, 0.4) bredde 0% v [0, 0.6) intervllet for C er [0.4, 0.54) bredde 0% v [0, 0.6) intervllet for EOD er [0.54, 0.6) bredde 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.5) intervllet for C er [0.5, 0.534) intervllet for EOD er [0.534, 0.540). Tllet.53 ligger i intervllet for EOD: => Dekodingen er ferdig. Representsjon v desimltll Hvor mnge biter 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 = c * - + c * - + c 3 * -3 + + c n * -n + Rekken v koeffisienter c c c 3 c 4 utgjør d bitmønsteret i den binære representsjonen v tllet. Det er dette vi mener når vi skriver desimltllet N som N=0. c c c 3 c 4... F 4.04.07 INF 30 3 F 4.04.07 INF 30 4 Desimltll som bit-sekvens For å konvertere et desimltll i titllsystemet til et binært tll kn vi bruke suksessive multipliksjoner med :. Vi multipliserer begge sider v ligningen nedenfor med : N = c * - + c * - + c 3 * -3 + + c n * -n + Heltllsdelen v resulttet er d lik c fordi N = c +R, der R = c * - + c 3 * - + + c n * -(n-) + Hvis resten er 0 er vi ferdige.. Multipliser resten R med. Heltllsdelen v resulttet er neste bit. 3. Hvis resten er 0 er vi ferdige. Ellers går vi til. Representsjon v intervll Vi kn bruke intervllet [0.534, 0.540) som eksempel. 0.539065 0 er et desimltll i dette intervllet. *0.539065 =.075 -> c =, rest =0.075 *0.075 = 0.565 -> c = 0, rest =0.565 *0.565 = 0.35 -> c 3 = 0, rest =0.35 *0.35 = 0.65 -> c 4 = 0, rest =0.65 *0.65 =.5 -> c 5 =, rest =0.5 *0.5 = 0.50 -> c 6 = 0, rest = 0.5 *0.5 =.0 -> c 7 =, rest = 0. Vi kn kode intervllet vårt med det binære desimltllet.0000 (ekvivlent med 0.539065 desimlt) med bre 7 biter. F 4.04.07 INF 30 5 F 4.04.07 INF 30 6
Problemer og løsninger Den stdige krympingen v current intervl krever ritmetikk med stdig økende presisjon etter hvert som teksten blir lengre. Metoden gir ingen output før hele sekvensen er behndlet. Løsning: Send den mest signifiknte biten strks den er entydig kjent, og så doble lengden på current intervl, slik t det bre inneholder den ukjente delen v det endelige intervllet. Det finnes flere prktiske implementsjoner v dette, lle er gnske regnetunge de ller fleste er belgt med ptenter. Sttistiske modeller Sttiske histogrm-bserte modeller er ikke optimle. Høyere ordens modeller endrer estimtet v snnsynligheten for et tegn (og dermed del-intervllet) bsert på foregående tegn (context). I en modell for engelsk tekst vil intervllbredden 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! F 4.04.07 INF 30 7 F 4.04.07 INF 30 JPEG-koding (tpsfri) Ikke-tpsfri (lossy) kompresjon JPEG (Joint Photogrphic Expert Group) er et v de vnligste bildeformtene med kompresjon. JPEG-stndrden hr vrinter både for tpsfri og ikke-tpsfri kompresjon. JPEG kn bruke enten Huffmn-koding eller ritmetisk koding. Prediktiv koding brukes 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 bestemmes fr bilde til bilde For å få høye kompresjonsrter, er det ofte nødvendig med ikke-tpsfri kompresjon. Ulempen er t mn ikke kn rekonstruere det originle bildet, 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. F 4.04.07 INF 30 9 F 4.04.07 INF 30 0
Lossy JPEG-kompresjon v bilde Bildet deles opp i blokker på x piksler, og hver blokk kodes seprt. Trekk fr fr lle pikselverdiene. Hver blokk trnsformeres med DCT (Diskret Cosinus Trnsform): F( u, v) MN N M = πu πv forξ = 0 c( x) c( y)cos ( x + ) cos ( y + ) f ( x, y), c( ξ ) = = 0 N M ellers x= 0 y Lossy JPEG-kompresjon Trnsformkoeffisientene skleres med en vektmtrise kvntiseres til heltll. DCT trnsform divideres med Avrundes til Informsjonen i de 64 pikslene smles i en liten del v de 64 koeffisientene Mest i øverste venstre hjørne F 4.04.07 INF 30 F 4.04.07 INF 30 Lossy JPEG-kompresjon 3 Aritmetisk koding v DC-koeff. Sikk-skk-scnning ordner koeffisientene i D-rekkefølge. 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 kodeboken sendes til mottker / lger. Gjents for lle blokker i lle knler. F 4.04.07 INF 30 3 DCT-koeffisientene fr lle blokkene legges etter hverndre. Disse er korrelerte og bør differnse-trnsformeres. Kjenner snnsynligheten for hvert symbol i lfbetet. 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 symbolsekvens gir et tll i et intervll!!! Bruker så mnge biter t vi får en entydig beskrivelse. F 4.04.07 INF 30 4
JPEG dekompresjon - JPEG dekompresjon - Huffmn-koden for en blokk er reversibel og gir løpelengdene. Løpelengdetrnsformen er reversibel, gir kvntiserte DCT-koeffisienter. Sikk-skk trnsformen er reversibel, og gir en heltllsmtrise. Denne mtrisen multipliseres med vektmtrisen. Dette er IKKE helt likt koeffisientene etter forlengs DCT-trnsformsjon. multipliseres med Dette gir Men de store trekkene er bevrt: De største tllene ligger i øvre venstre hjørne De fleste tllene i mtrisen er lik 0. F 4.04.07 INF 30 5 F 4.04.07 INF 30 6 JPEG dekompresjon 3 JPEG dekompresjon 4 Så gjør vi en invers DCT, og får en rekonstruert piksels bildeblokk. invers DCT trnsform Differnsene fr den originle blokken er små! - = 3 0 - - - - - 0 0 - - 0 0 5 3 3 3 3 3 3 3 0 0 3 4 4 4 4-3 -3-0 0 - - 3 0-4 3 3-3 0 0 - - Kompresjon / dekompresjon blokk for blokk gir blokk-effekter i bildet. F 4.04.07 INF 30 7 F 4.04.07 INF 30
JPEG-kompresjon v frgebilde Vi skifter frgerom slik t vi seprerer lysintensitet fr kromsi (perseptuell redundns, sprer plss). Bildet deles opp i blokker på x piksler, og hver blokk kodes seprt. JPEG dekompresjon v frgebilde Alle dekomprimerte x-blokker i hvert bildepln smles til et bilde. Bildeplnene smles til et YIQ frgebilde Vi skifter frgerom fr YIQ til RGB for fremvisning, CMYK for utskrift. Vi skifter frgerom for hvert bildepln for hvert bildepln smle bildeplnene Vi skifter frgerom Hver blokk trnsformeres med DCT. Forskjellige vektmtriser for intensitet og kromtisitet.... resten er som for gråtonebilder... Vi hr redusert oppløsning i Y og Q, men full oppløsning i RGB: Gir blokkeffekt i intensitet 6 6 piksels blokkeffekt i frgene i RGB F 4.04.07 INF 30 9 F 4.04.07 INF 30 30 Rekonstruksjons-feil i gråtonebilder DCT kn gi piksels blokk-rtefkter, sløring og dobbelt-konturer. Avhengig v vektmtrise ntll koeffisienter Rekonstruksjons-feil i frgebilder 4 biters RGB komprimert til.5- biter per piksel (bpp) 0.5 0.75 bpp gir god/meget god kvlitet 0.5 0.5 bpp gir noen feil Frgefeil i mkroblokk JPEG gir blokkeffekt JPEG 000 uten blokker: Høyere kompresjon Mye bedre kvlitet F 4.04.07 INF 30 3 F 4.04.07 INF 30 3
Digitl video Koding v digitle bildesekvenser eller digitl video er bsert på differnsekoding. Områder uten interbilde bevegelse kodes ikke flere gnger, kun koding i områder der endringer skjer. Med 50-60 bilder i sekundet er det mye å spre på dette. MPEG (Motion Picture Expert Group) stndrd for videokompresjon. MPEG historie: MPEG- video og udio (99) MPEG- Digitl TV og DVD (994) MPEG-4: Multimedi nvendelser (99) MPEG-7: Multimedi søking og filtering (00) MPEG-: Multimedi uvhengig v plttform. Oppsummering - kompresjon Hensikten med kompresjon er mer kompkt lgring eller rsk oversending v informsjon. Kompresjon er bsert på informsjonsteori. Antll bit. pr. smpel er sentrlt, og vrierer med kompresjonsmetodene og dtene. Sentrle metoder: Før koding: løpelengde-trnsform og differnsetrnsform. Huffmn-koding lg snnsynlighetstbell, send kokebok Universell koding (f.eks. Lempel Ziv) utnytter mønstre, sender ikke kokebok. Aritmetisk koding koder sekvenser til tll i et intervll. F 4.04.07 INF 30 33 F 4.04.07 INF 30 34