Løsning av øvingsoppgaver, INF230, 2005,. Vi har gitt følgende bilde: kompresjon og koding 0 2 2 2 3 3 3 2 3 3 3 0 2 2 2 3 3 2 2 2 3 2 3 4 4 2 2 3 2 2 3 4 4 2 2 2 3 3 3 4 3 4 a. Finn Huffman-kodingen av dette bildet. Hvor mange bits blir det per piksel I gjennomsnitt etter koding hvis vi ser bort fra at vi trenger plass til å lagre kodeboken? Vi har følgende forekomster, først i rekkefølge etter symbolverdiene, deretter sortert. Slår sammen først 0 og 4, så dette med, så 3 og 2 sammen, så dette med resten, som vist i grafen nedenfor: 0 0: 2 2: 8 0 : 2 3: 6 2: 8 : 2 0 3: 6 4: 6 0 4: 6 0: 2 b. Ved differansetransform tar vi differansen mellom et piksel og dets nabo til venstre. Siden pikslene lengst til venstre i bildet ikke har noen venstre nabo, beholder vi pikselverdien her. Finn differanse-transformen av bildet ovenfor. Etter differansetransform vil bildet se slik ut: - 0 0 0 0 0 0-0 2 0 0-0 - 0 0 0 2-0 - - 0 2-0 0 2 0 0 0 0 - Merk: vi ikke har laget frekvenstabell bare brukt histogrammet. Huffman-kodene blir da (her er det flere mulige riktige løsninger!): 2: 00 3: 0 : 0 4: 0 0: Og det gjennomsnittlige antall bits pr piksel etter koding blir ((8+6+2)*2+8*3)/54 = (92+24)/54 = 6/54 =2.5 bits per piksel.
c. Finn så Huffman-koden for det differansetransformerte bildet, slik at du kan beregne det gjennomsnittlige antall bits per piksel for det differansetransformerte bildet. Vi har følgende forekomster, først i rekkefølge etter symbolverdiene, deretter sortert. Slår sammen først - og 2, så dette med, så dette med 0, som vist i grafen nedenfor: 2: 4 0: 2 : 20 : 20 0 0: 2 -: 9 0 0 -: 9 2: 4 Huffman-kodene blir da (her er det igjen flere mulige riktige løsninger!): 0: : 00 -: 00 2: 0 d. Entropien til bildet vi startet med er 2.06. Hvorfor ble det gjennomsnittlige antall biter per piksel større enn entropien i deloppgave a, men mindre enn 2.06 i deloppgave c? Entropien beregnet fra histogrammet til bildet er en nedre grense for hvor kompakt bildet kan kodes, hvis vi bare ser på ett piksel av gangen. Denne grensen er bare mulig å oppnå hvis alle sannsynlighetene i det normaliserte histogrammet er av typen /2k, der k er et heltall. Dette kravet er ikke oppfylt i det opprinnelige bildet. Derfor er ikke Huffman-transformen optimal, og vi får et gjennomsnittlig antall bits som er litt større enn entropien. I deloppgave c ser vi ikke bare på ett piksel av gangen, men på differansen mellom to og to piksler. Da kan vi kode mer kompakt enn det som er gitt av entropien for enkelt-piksler. Og det gjennomsnittlige antall bits pr piksel etter differansetransform og Huffman-koding blir (2+20*2+3*3)/54 = (2+40+39)/54 = 00/54 =.85 bits per piksel. Altså færre bits pr symbol ved å gjøre differansekoding først og så Huffman, enn med bare Huffman.
e. Hvis det bildet du fikk oppgitt i starten av oppgaven var det andre bildet i en bildesekvens, og det første var 2 2 2 3 3 3 2 2 2 3 3 3 2 2 2 3 3 3 2 2 2 3 3 3 4 4 4 2 2 2 3 3 3 4 4 4 2 2 2 3 3 3 4 4 4 Hvilke to bilder ville du da komprimere, og hvor mange biter vil du i gjennomsnitt trenge per piksel for hvert av de to bildene? Man ville først komprimere det bildet som kommer først (det rett ovenfor). Her er det forholdsvis greit å finne histogrammet og Huffman-koden: 2: ; 3: 00; : 00; 4: 0 : 9 2: 8 2: 8 3: 8 0 3: 8 : 9 0 0 4: 9 4: 9 Det gjennomsnittlige antall bits pr piksel blir (8*+8*2+9*3+9*3)/54 = 08/54 =2 bits per piksel. Og så ville man kode differansebildet, dvs det sist mottatte bildet minus det forrige, piksel for piksel. Det ser slik ut: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Dette er et binært bilde som bare trenger bit per piksel. 2. Anta at det er G=2 8 forskjellige gråtone-nivåer i hvert sample, og at når vi sorterer dem etter hvor ofte de forekommer i et bilde, så finner vi i et spesielt tilfellet at sannsynlighetene er ½, ¼, /8, /6,, /28, /256, /256. a) Hvor mange slike bilder kan vi overføre i parallell på en 64 kbits/s linje med Huffman-koding av amplitudene? Hint : Entropien er gitt ved G H = p i log2 ( p i ) i= 0 Dessuten: Og til slutt: log(teller/nevner) = log(teller) log(nevner) log 2(2 n ) = n Hint 2: Summen ½+2/4+3/8 +4/6+5/32 + konvergerer raskt mot 2. Her er det ikke nødvendig å finne Huffman-koden. Vi har terpet at en Huffman-koding der alle sannsynlighetene kan skrives som brøker der telleren er og nevneren er en toer-potens er optimal i den forstand at det gjennomsnittlige antall bits per sample er lik entropien til signalet. Entropien er her gitt ved H = - (½ log 2 (/2) +/4 log 2 (/4) + /8 log 2 (/8) + ) (se Hint ) = ½ + 2/4 + 3/8 + = 2 (som angitt i Hint 2 ovenfor). Det gjennomsnittlige antall bits per sampel blir altså bare 2 bits/sampel. Men for å kunne svare på spørsmålet må vi vite hvor mange sampler vi får fra hvert bilde pr tidsenhet. La oss si at samplingsfrekvensen er 8 khz. Da er antall bilder vi kan overføre i parallell: 64 000 bits/s /( 8 000 sampler/s * 2 bits/sampel) =4.
b) Et ark med tekst og enkle strektegninger skal sendes pr digital fax over en modemlinje med kapasitet på 4 800 biter/sekund. Vi bruker en standard fax med 728 fotosensorer per linje og 075 linjer per side. Faxmaskinen gjør en terskling av bildet av siden. Hvor lang tid tar det å overføre en side uten kompresjon? Etter terskling trenger vi selvsagt bit per piksel for å representere 0 og. bit/piksel * 728 piksler/linje * 075 linjer/side = 857 600 bits/side. 857 600 bits/side / 4 800 bits/sekund = 387 sekunder = 6 min 27 s. c) Anta at vi hadde kunnet gjøre tekstgjenkjenning på den delen av arket som inneholder tekst, og representert symboler og mellomrom med 7 bits ASCII. Anta at det maksimalt er 60 tegn pr linje og 50 linjer pr side. Anta også at vi kunne beskrevet strektegningene som maksimalt 500 rektangler per side, og at sidene på rektanglene er parallelle med kantene på siden. Gi et worst case estimat av hvor mange biter du vil trenge for å beskrive innholdet på siden med en oppløsning som svarer til faxens oppløsning, og hvor lang tid det vil ta å overføre dette over modemlinjen. For å representere et rektangel og dets plassering trengs følgende: en koordinat for et punkt på rektanglet, f eks øverste venstre hjørne rektanglets bredde og rektanglets høyde Kordinatene for øvre venstre hjørne til et rektangel vil ligge mellom (0,0) og (728,075). Det betyr at begge koordinatene krever biter (2048). Det samme gjelder høyde og bredde. Til sammen blir dette 4 * biter = 44 biter. Da blir regnestykket slik: 500 rektangler: 44 biter/rektangel* 500 rektangler = 22 000 biter 50*60 tegn: 3 000 tegn * 7 biter/tegn = 2 000 biter Worst case er altså at vi trenger 22 000 biter pr side. Med en overføringskapasitet på 4 800 bits/sekund tar dette t = 22 000 biter / 4 800 biter/s = 4,6 sekunder.
d) Vi vil gjerne undersøke hvor mye det er å spare på å separere ASCII-tegn fra alt annet i en fax, og sende 7 bits ASCII kode for hvert tegn, mens resten sendes ukomprimert uansett hva det er. Hvis halvparten av hver side i gjennomsnitt er ASCII-tegn, hvor mye sparer vi da i forhold til ordinær fax? (7 biter/tegn * 3000/2 tegn + bit/pixel *728*075/2 piksler)/(728*075) = (0 500 + 928 800) / 857 600 = 0,5056 Vi sparer altså 00%-50.56% = 49.43%. e) Utsnittet på 25 * 0 piksler av et binært bilde nedenfor kan representeres med 250 biter. Ser vi på runlengthrepresentasjonen av det samme utsnittet, finner vi at det består av 82 runs med lengder mellom og 8 piksler. Hvis vi bruker 3 biter på hver, blir dette 246 biter. Imidlertid er det mulig å gjøre dette litt mer kompakt ved å Huffman-kode de 82 løpelengdene. Ved løpelengdetransformasjon av binære bilder trenger vi ikke å lagre tallpar (gråtone, løpelengde) slik som for gråtonebilder. Vi trenger bare løpelengdene, for det er bare to mulige intensitetsverdier. Løpelengdene finnes i tabellen til høyre. 7 3 2 4 2 5 2 2 8 2 4 2 5 2 2 8 2 5 2 3 2 2 7 4 5 2 2 2 6 3 2 6 3 3 2 7 2 6 3 3 2 6 2 2 2 4 2 2 2 2 6 6 3 3 3 2 5 2 4 2 2 5 2 2 5 2 4 2 2 5 2 Finn Huffmann-koden til løpelengdene i tabellen til høyre over, og finn det totale antall biter etter koding av løpelengdene. Nedenfor har vi løpelengde, lengden på hvert kodeord, kodeordet, og antall forekomster av hver løpelengde. Og helt til høyre kodetreet. 2 36 3 00 0 3 3 0 0 0 5 3 0000 8 0 4 4 000 6 0 6 4 000 6 0 7 5 000 3 0 0 8 5 00 2 Og det totale antall bits etter koding blir 36*+2*3+20*4+5*5=936+63+80+25=204 biter.
3. Fargesystemet NTSC brukes for fjernsynsoverføring i USA. I dette systemet er farge separert fra luminans, slik at det samme signalet kan brukes både på farge- og gråtoneskjermer. Overgangen fra RGB er gitt ved enkle uttrykk der man bare kan sette inn RGB-verdier og få ut NTSC s YIQ-verdier. Luminans-komponenten (Y) er gitt ved Y= 0.299*R + 0.587*G +0.4*B Hue-komponenten (I) er gitt ved I = 0.596*R 0.274*G 0.322*B Metnings-komponenten (Q) er gitt ved Q = 0.2*R 0.523*B + 0.32*B a) Hva er NTSC luminansverdien (Y) for RGB svart (0,0,0) og RGB hvit (,,)? Summen av luminans-koeffisientene er 0.299+0.587+0.4 =.000. Derfor: RGB svart (0,0,0) gir NTSC Y=0. RGB hvit (,,) gir NTSC Y=. b) Hva blir NTSC farge-komponentene I og Q for en vilkårlig RGB gråtone? For en vilkårlig RGB gråtone g mellom 0 og har vi at R=G=B, slik at vi kan skrive denne gråtonen som (g,g,g) i RGB. Koeffisientene i begge ligningene summeres til 0. I NTSC får vi derfor alltid I = Q = 0 når R=G=B: I = g * ( 0.596 0.274 0.322) = g * 0 = 0 Q = g * (0.2 0.523 + 0.32) = g * 0 = 0. c) NTSC ble utviklet for å kunne sende farge-tv på et eksisterende nett for gråtone-tv uten å øke båndbredden. Båndbredden til I og Q er mye mindre enn for Y. Dette er typisk for mange systemer der enten geometrisk oppløsning er redusert i fargekomponentene, eller man spanderer færre biter på fargekomponentene, eller begge deler. Anta at vi har et 52*52 RGB bilde med 3*8 biter per piksel. Hvor stor kompresjonsrate oppnår vi ved å konvertere dette til YIQ og bruke 52*52 piksler med 64 mulige verdier på Y, 256*256 piksler med 28 mulige verdier på I, og 28*28 piksler og 6 mulige verdier per piksel på Q? I det opprinnelige bildet har vi 52*52*3*8 biter. Etter konvertering har vi 6 biter for Y i hvert piksel, 7 biter for I for ¼ så mange piksler, og 4 biter for Q for /6 så mange piksler. Kompresjonsraten er CR = i/c, der i er antall biter i det opprinnelige bildet, og c er antall biter i det komprimerte datasettet. I vårt tilfelle får vi CR = (52 * 52 *24)/ 52*52 (6 + ½*/2*7 + ¼*/4*4) = 24 / (6+7/4 +/4) = 24 * 4 / 32 = 3. Slik er det! Takk for oppmerksomheten!