1 / 56

Transmisia datelor multimedia in retele de calculatoare Compresia fara pierdere de calitate II

UNIVERSITY POLITEHNICA of BUCHAREST DEPARTMENT OF COMPUTER SCIENCE. Transmisia datelor multimedia in retele de calculatoare Compresia fara pierdere de calitate II. Conf. Dr. Ing. Costin-Anton Boiangiu <Costin.Boiangiu@CS.PUB.RO>. Recapitulare : Coduri Huffman Extinse. Fie sursa :

dixon
Download Presentation

Transmisia datelor multimedia in retele de calculatoare Compresia fara pierdere de calitate II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UNIVERSITY POLITEHNICA of BUCHAREST DEPARTMENT OF COMPUTER SCIENCE Transmisia datelor multimedia in retele de calculatoareCompresia farapierdere de calitateII Conf. Dr. Ing. Costin-Anton Boiangiu <Costin.Boiangiu@CS.PUB.RO>

  2. Recapitulare:Coduri Huffman Extinse • Fie sursa: • A = {a, b, c}, P(a) = 0.8, P(b) = 0.02, P(c) = 0.18 • H = 0.816 bits/symbol • Codul Huffman este: a 0 b 11 c 10 • l = 1.2 bits/symbol • Redundanta= 0.384 b/sym (47%!) • Se poatemaibine?

  3. Recapitulare:Coduri Huffman Extinse • Idee • Se consideracodareasecventelor de catedouacaractere, spredeosebire de codareaindividuala a fiecaruicaracter l = 1.7228/2 = 0.8614 Red. = 0.0045bits/symbol

  4. Recapitulare:Coduri Huffman Extinse • Ideeapoatefiextinsa in continuare • Se consideratoatesecventele de forma mnavandlungimean • In teorie: • Considerandmaimultesecvente se poateinbunataticodificarea • In realitate: • Crestereaexponentiala a alfabetului face acestlucruinpractic • E.g., pentrulungimea 3 se genereazaurmatorulnumar de secvente ASCII.: 2563 = 224 = 16M • Este nevoiesa se generezecoduripentrutoatesecventele de lungimem • Majoritateavoraveafrecventa zero • Distributiilecompletnebalansatereprezinta o problemamajora; fie exemplul: • A = {a, b, c}, P(a) = 0.95, P(b) = 0.02, P(c) = 0.03 • H = 0.335 bits/symbol • l1 = 1.05, l2 = 0.611, … • Performantaalgoritmuluidevineacceptabiladoar la n = 8! • dar|alfabetul| = 38 = 6561 !!!

  5. Introducere • Scurtaistorie • Shannon a mentionatpentru prima data folosireacdf (Cumulative Density Function) • Peter Elias (coleg al lui Huffman)—a dezvoltat un algoritmrecursivfacut public abia in 1963 • Jelinek 1968 • Radacinimoderne: Pasco/Rissanen 1976

  6. Introducere • Codarea aritmetica elimina necesitatea codarii fiecarui simbol al alfabetului sursei • In timpul codarii algoritmul genereaza un cod pentru intreg mesajul de intrare, lucru ce este facut in mod secvential, simbol cu simbol • In comparatie cu alte campuri din sfera codarii, codarea aritmetica este foarte tanara (1970), matura si completa si eficienta in compresia fara pierdere de informatie • Codarea aritmetica lucreaza in timp liniar ci o folosire constanta a memoriei • Folosirea reprezentarii binare pe un numar fix de simboluri este suficienta pentru toate calculele • Raportul de compresie obtinut este mai bun decat in cazul folosirii codului Huffman si exista implementari hardware ale algoritmului de compresie, cum sunt cele din protocoalele G3 si G4 din Fax.

  7. Introducere • La memorarea intervalului se pot memora capetele intervalului sau – la fel de bine – numai mijlocul acestuia • Din cauza ca mesajele foarte mari vor conduce la intervale din ce in ce mai mici, apare problema reprezentarii intervalelor foarte mici pentru a asigura unicitatea codarii, si – deci – o decodare corecta • Problema este rezolvata prin folosirea scalarii • Salvarea codului aritmetic (in reprezentare zecimala sau binara) intr-un fisier presupune specificarea sfarsitului reprezentarii • Acest lucru se poate face intr-un fisier prin scrierea unui antet cu lungimea inregistrarii, pentru a putea fi refacuta la decodare • In cazul transmisiilor continue, cum este cazul fax-ului, se folosesc simboluri speciale si atunci in secventa de codat trebuie adaugat un simbol marcator sfarsit de secventa • El trebuie sa aiba probabilitatea minimala

  8. Aspecteesentiale • In codarea aritmetica o sursa este reprezentata de un interval intre 0 si 1 pe axa numerelor reale • Fiecare simbol al ansamblului micsoreaza acest interval • Pe masura ce intervalul devine mai mic, numarul de biti necesar pentru specificare este mai mare • Codarea aritmetica presupune in mod explicit un model probabilistic al sursei • Este o schema bazata pe cuvinte de cod ce utilizeaza probabilitatile mesajelor sursei pentru a ingusta intervalul utilizat in reprezentarea ansamblului • Un mesaj cu probabilitate mare ingusteaza intervalul mai putin decat un mesaj cu probabilitate mica, astfel incat probabilitatile mari contribuie mai putin la cresterea lungimii cuvintelor de cod • Metoda incepe cu o lista neordonata a mesajelor sursei si a probabilitatilor asociate • Numarul liniei este partitionat in subintervale folosind probabilitatile cumulate

  9. Cvasi-optimalitatea codarii aritmetice • Dupa teorema codarii a lui Shannon, numarul lungimea medie a cuvintelor de cod trebuie sa indeplineasca relatia • Fie un mesaj ce contine M simboluri; dupa statistica sursei, simbolul apare de P(si) ori • Latimea intervalului final, dupa considerarea tuturor simbolurilor, este:

  10. Cvasi-optimalitatea codarii aritmetice • Numarul de simboluri binare pentru codarea latimii intervalului final se calculeaza cu relatia de unde rezulta ca numarul mediu de simboluri binare pentru reprezentarea mesajului de lungime M este adica limita Shannon

  11. Exemplu • Fie, de exemplu, o sursa cu doua simboluri: X si Y, cu probabilitatile P(X) =2/3 si P(Y) = 1/3 • Daca se doreste codarea mesajelor de lungime 2 atunci se poate organiza urmatoarea imagine pentru codarea tuturor mesajelor in intervalul [0,1)

  12. Exemplu • Secventa XX este codata cu intervalul [0,4/9) si secventa YY este codata cu intervalul [8/9,1) • Pentru codarea intervalului poate fi transmis orice numar din intervalul considerat, evident pe un numar de biti corespunzator, ce este dat de marimea intervalului

  13. Exemplu • Pentru codarea secventelor de lungime 3 se poate construi imaginea/tabelul de codare alaturat:

  14. Exemplu • XX • XY • YX • YY

  15. Algoritmul de baza • Se considera intervalul curent [L,H) initializat cu [0,1) • Pentru fiecare simbol, ai, din fisier, se parcurg doi pasi: • Se imparte intervalul curent in subintervale, cate unul pentru fiecare simbol din alfabetul sursei; marimea subintervalului unui simbol din alfabet este proportional cu probabilitatea estimata, considerata in cadrul modelului • Se selecteaza subintervalul corespunzator simbolului care apare in fisierul de comprimat, si se considera ca fiind noul interval curent • Se scriu in fisierul comprimat suficiente simbolui binare pentru a putea identifica (reconstitui) intervalul curent final din multimea tuturor intervalelor finale, posibil a fi considerate

  16. Algoritmul de baza • Diviziunea intervalului curent este bazata pe probabilitatea simbolului de intrare ai, care apare in fisierul de comprimat:

  17. Exemplu • Fie sursa data prin distributia • Figuraalaturataaratamodul de realizare a partitiilorpentrumesajul „iou”

  18. Observatii • Lungimea intervalului final este egala cu produsul probabilitatilor simbolurilor individuale ce apar in fisierul/secventa de comprimat: unde Ns este numarul de simboluri din fisierul de intrare (cel care trebuie comprimat) • Se calculeaza numarul de biti care trebuie memorati in fisierul comprimat (cel de iesire) dupa relatia: unde paranteza are semnificatia de parte intreaga, obtinuta prin rotunjire • Numarulde biti generati de codarea aritmetica este egal cu entropia, H (evident, daca nu se considera rotunjirea) • Codareaaritmetica atinge compresia care este indicata de entropia sursei, de aceeaeste optimala

  19. Observatii • Trebuie introdus un simbol suplimentar in alfabetul sursei, pentru a indica sfarsitul de fisier • La pasul 2 al algoritmului se calculeaza in mod efectiv numai subintervalul corespunzator simbolului care apare in fisier, de exemplu ai • Sunt necesare probabilitatile cumulative • Fie k indicele alfabetului si i indicele simbolurilor mesajului/secventei; relatiile de calcul ale sub-intervalului nou sunt: unde L’ si H’ sunt limitele intervalului curent - pentru primul pas se considera L=0 si H=1

  20. Observatii • Intersectia intervalelor obtinute este vida pentru simboluri diferite, deci: • In mod curent, codarea aritmetica poate fi implementata sub forma a doua module, care separa modelul sursei de procesul de codare • Modelul sursei este un modul de program si este consultat atat de codor cat si de decodor, la fiecare pas al procesarii • Posibilitatea separarii modelului in doua sub-modele, unul pentru estimarea probabilitatilor si unul pentru codare, permite cuplarea codarii aritmetice cu orice metoda statica sau dinamica de estimare a probabilitatilor (sau frecventelor) mesajelor sursei

  21. Observatii • Pentru realizarea decodarii trebuie sa se cunoasca modelul sursei utilizate de codor (mesajele si intervalele asociate) si un singur numar din intervalul determinat de codor • Decodarea consta intr-o serie de comparatii a numarului i cu valorile reprezentand mesajele sursei

  22. Exemplu • Se considera o sursa cu doua simboluri, cu distributia de mai jos, in care se recunoaste introducerea unui simbol suplimentar EOF si normalizarea probabilitatilor la 1 • Se va exemplifica codificarea/comprimarea mesajului „bbbEOF”

  23. Exemplu

  24. Exemplu • Probabilitatea mesajului este: 0.5 x 0.5 x 0.5 = 0.125 • Numarul de biti = -log 2 (0.125) = 6.3219 -> 7 biti • Intervalul final = [0.81250000000000 0.82500000000000] • Mijlocul intervalului x = (0.8125 + 0.8250) / 2 = 0.8187 (0.8187)10 = (1 1 0 1 0 0 0 )2 • Codul mesajului = 1 1 0 1 0 0 0 • Marimea initiala a mesajului = 3 * 8 = 24 biti = 3 octeti •  Marimea finala = 7 biti = 1 octet. •  Raport de compresie > 3

  25. Decodarea • Pentru a decoda o secventa, trebuie aplicate operatiile efectuate la codare insa in ordine inversa • Se cunosc: • modelul sursei, prin alfabet si probabilitati; • secventa/mesajul codat sub forma de interval sau sub forma mediei intervalului, V; • numarul de simboluri primare din secventa codata

  26. Algoritmul de decodare • Se compara media intervalului cu fiecare din intervalele initiale (asa cum s-a facut la codare) si se determina simbolul caruia ii apartine intervalul gasit • Se cauta urmatorul simbol prin modificarea probabilitatii partitiei, asa cum s-a facut si la codare: unde i trebuie sa fie ales astfel incat sa fie indeplinita inegalitatea: deci ai este urmatorul simbol din secventa codata

  27. Exemplu • Datele de intrare sunt: •  S=['a','b','c','d']; • P=[0.5, 0.25, 0.125, 0.125]; • interval = 0.27236938480000; • n_mesaj = 8. • Rezultatele: decode = abaabcdd ???? • Istoric (history) = 0.00000000000000 1.00000000000000 0 0.00000000000000 0.50000000000000 1.00000000000000 0.00000000000000 0.50000000000000 0 0.25000000000000 0.37500000000000 2.00000000000000 0.25000000000000 0.31250000000000 1.00000000000000 0.25000000000000 0.28125000000000 1.00000000000000 0.25000000000000 0.28125000000000 0 0.26562500000000 0.27343750000000 2.00000000000000 0.26562500000000 0.27343750000000 0 0.26562500000000 0.27343750000000 0 0.27148437500000 0.27246093750000 3.00000000000000 0.27148437500000 0.27246093750000 0 0.27148437500000 0.27246093750000 0 0.27221679687500 0.27233886718750 4.00000000000000 0.27221679687500 0.27233886718750 0 0.27221679687500 0.27233886718750 0 0.27230834960938 0.27232360839844 4.00000000000000

  28. Exemplu (codulmatlab) % decodare aritmetica % se presupun cunoscute: % - numarul de simboluri din mesaj/secventa; % - modelul sursei; % - intervalul (sau mijlocul) intervalului; clc, clear; ver = 1; if ver, % 1 2 3 4 S=['a','b','c','d']; P=[0.5, 0.25, 0.125, 0.125]; %mesaj=['a','b','a','a','b','c','d','a'];%ind_mesaj = [1 2 1 1 2 3 4 1]; interval = 0.27236938480000; n_mesaj = 8; else % 1 2 3 4 5 6 7 S=['a','n','_','r','e','m','i']; P=[4/17, 1/17, 3/17, 3/17, 3/17, 2/17, 1/17]; %mesaj=['a','n','a','_','a','r','e','_','m','e','r','e','_','m','a','r','i']; %ind_mesaj = [1 2 1 3 1 4 5 3 6 5 4 5 3 6 1 4 7]; interval = 0.05640215726457; n_mesaj = 17; end; PC=cumsum(P); PC = [0 PC]; % initializare L=0; H=1; history = [ L H 0] ; ind_mesaj =[]; % decodare for k=1:n_mesaj, % indicele simbolului din secventa; i=1; % indicele simbolului din alfabet; L_new = L + PC(i) * (H-L); H_new = L + PC(i+1) * (H-L); while ~[(interval > L_new) & (interval < H_new)], i = i + 1; if i >= length(S), break; end; L_new = L + PC(i)*(H-L); H_new = L + PC(i+1)*(H-L); history = [history; L H 0]; end; L = L_new; H = H_new; ind_mesaj = [ind_mesaj i]; history = [history; L H i]; end % rezultate: decode = S(ind_mesaj) history

  29. Compresiaaritmetica cu scalare • Problemaimplemenatriicodariiaritmeticeeste data de preciziafinita a operatiilor cu numerereale • Solutia consta in inlocuireaintervalului [0,1) al numerelorreale cu intervalulnumerelorintregi, undeNeste un numarintreg, cu semnificatie de numarul de cifrebinare al registrelornumerice • Ideeaconsta in selectareaprefixuluicomun la capetelorintervalelor, L si H, si apoicompletareacapatuluidinstanga, L, cusimboluri 0 si al capatuluidreapta, H, cu 1 • Nu este nevoie de un model al sursei, ci numai de alfabetulsursei • Frecventelesimbolurilesunt construite dinamic, deci se poateconsideraapartenentametodei la clasametodelordinamice(adaptive)

  30. Compresiaaritmetica cu scalare • Intervaleleleasociatesimboluriloralfabetului se calculeazacuajutorulfrecventelorsimbolurilor, in moddinamic ; fiecarefrecventa a unuicaracter este initializatacu 1 si este incrementata de fiecare data candaparesimbolul in mesajul de comprimat • Fie frecventasimbolului in alfabet • Frecventacumulata a simbolurilor este undeNs este numarul de simboluridinalfabetulsursei • Rezulta ca este frecventacumulata a tuturorsimbolurilor • De retinut ca este lungimeaprefixuluiintrariiscanate • Simbolurilesuntmentinute in ordineadescrescatoare a frecventelorlor

  31. Compresiaaritmetica cu scalare • Cand un simbol este cititdinsursatext, intervalul curent [L,H) este ajustat la • La fiecareajustare a intervalului, se verificaconditia

  32. Compresiaaritmetica cu scalare • In cazcontrar, intervalul este expandatcurelatia • Efectuareaacesteitransformariestememorataprinincrementareaunuinumarator (waiting_counter) • Operatia se repataatattimp cat intervalul este preascurt • Dupa salvareamesajuluicomprimat, se trimitecontunutulnumaratorului • Dupa trimitereaultimului bit al numaratorului, se transmitebitulinvers de un numar de oridat de continutulnumaratorului de asteptare

  33. Algoritm Codare_simbol(ai)   L=L+(H-L+1)*cum_freq(i)/cum_freq(0) ;   H=L+(H-L+1)*cum_freq(i-1)/cum_freq(0)-1 ;   WC =0; // waiting_counter REPEAT IF (L and H au bit comun in stanga) THEN   code = code + bit_comun;   L=L*2;   H=2*H+1; ELSE IF (H-L)<cum_freq(0) THEN   L = L*(L-2N-2);   H = 2*(H-2N-2) + 1; Waiting_counter = ++1; UNTIL (L and H nu au biticomuni in stanga) and (H-L) >= cum_freq(0).  END. Procedura de codare se incheiecuscriereabitilor de asteptare (dacasunt) conformcodului  : Write(bit,fout); WHILE (waiting_counter>0) DO IF bit >0, THEN   Write 1 in fout;   Write 0 in fout; Waiting_counter = --1;   End while;   END.

  34. Decompresia • Decodareaeste exact inversulprocesului de codare • Se utilizeaza o fereastraalunecatoarepefisierulcomprimat, de lungimeN • Mai intai, se initializeazafereastracuprimeleNsimboluribinare • Se calculeazavaloareaeizecimalaprinconversiasuccesiuniibinare, din baza 2 in baza 10 • Intervalul curent este initializat ci l=0 si • Simbolul este produs ca urmare a evaluariiexpresiei undelsi hsuntajustatecuaceleasirelatiidintimpulprocesului de codare si icea mai mica valoareintreaga

  35. Decompresia • Dacareprezentarilebinare ale capetelorintervalului au un prefixcomun de lungimep, elesuntdeplasatecuppozitiisprestanga • Pozitiileramaselibere se completeazacuzerouripentrul si cu 1 pentruh • Fereastra de citire este deplasatacu (p) pozitiiinspredreapta si variabilavalue este ajustatacorespunzator • Se actualizeazatabelelefreq si cum_freqastfelincatsimbolurile sa fie mentinute in ordinedescrescatoare a frecventelor, exact ca la procesul de codare • Operatiile se repeta pana cand se producesimbolul END

  36. Algoritm Decodare(fin) cum_freq = ((value-l+1)*cum_freq(0)-1) / (h-l+1);   Define i=…; Whilecum_freq(i)>cum_freqDO i =i++; l = l + (h-l+1)*cum_freq(i)/cum_freq(0); h = l + (h-l+1)*cum_freq(i-1)/cum_freq(0) - 1; REPEAT IFcommon_left_bits(l,h), THEN l = 2*l; h = 2*h +1; Read_bit(fin);   value = 2*value + b; ELSE IF (h-l) < cum_freq(0), THEN l = 2*(l-2N-2)   H = 2*(h-2N-2) + 1 Read_bit(fin);   value = 2*(value – 2N-2) + b; UNTIL no common_left_bits(l,h) and (H-L) >= cum_freq(0); END.

  37. Concluzii • Codarea aritmetica are ca rezultat un sir de simboluri care permite obtinerea unor rate de compresie mult mai bune • De obicei este mai performanta decat codarea Huffman din acest punct de vedere • Codarea aritmetica a unui sir de simboluri de lungime l, S={s1, s2,…, sl} este obtinuta prin l impartiri iterative in sub-intervale, partitionari facute pe baza proprietatilor statistice ale setului de simboluri considerat, adica distributia de probabilitate si probabilitatile conditionate • Lungimea fiecarui sub-interval este egala cu probabilitatea sirului de simboluri care ii corespunde • Cuvantul de cod aritmetic pentru un sir de simboluri S este format din primii W biti din reprezentarea binara a valorii de mijloc a sub-intervalului corespunzator, I(S), unde W=[log21/|I(S)|]+1, iar |I(S)| este lungimea intervalului I(S)

  38. Transformarea Burrows-Wheeler • Transformarea Burrows-Wheeler a fostintrodusă în 1994 de către cei doi autori care îi dau şi numele, şi extinsă de către Nelson în 1996 • Foloseste repetiţiile de secvenţe de cuvinte pentru a îmbunătăţi compresia • Funcţionează similar cu metodele bazate pe dicţionare • Este o metodă de compresie fără pierderi de date • Avantaje: • de obicei, transformarea Burrows-Wheeler conferă rezultate mult mai bune decât tehnicile tradiţionale de compresie bazate pe dicţionare: (Lempel Ziv, WinZip, gzip, etc) • Dezavataje: • timpul de execuţie este mult mai lung decât în cazul algoritmilor enunţaţi anterior

  39. Algoritmul de compresie • Transformarea BWT consta din urmatoarele: • sirul de simboluri generate de o sursa de informatie S se împarte în subsiruri care au k simboluri fiecare, ultimul segment având (k modulo n) simboluri • pentrufiecaresubsir: • se genereazatoatepermutarilecirculare • se ordoneazalexicografic • se construieste un sir S' de simboluri format din ultimulsimbol al fiecareipermutari • în final, pentrufiecaresubsir, se transmitesirulcorespunzatorobtinutîmpreuna cu numarul de ordinep al subsiruluiobtinutdupasortare

  40. Algoritmul de compresie • Fiind dat un şir de caractere de intrare S, de lungime n, codificatorul construieşte o matrice n x n în care este păstrat pe primul rând şirul S, urmat pe celelalte rânduri de n – 1 copii ale sale, fiecare dintre ele rotită circular cu un caracter faţă de şirul precedent • Rândurile acestei matrice sunt sortate apoi din punct de vedere lexicografic, obţinându-se astfel o structura de date ordonată • Deoarece fiecare rând şi fiecare coloană a matricei astfel obţinute este de fapt o permutare a lui S, acesta va conţine toate cele n simboluri din şirul de intrare • Permutarea L care este selectată de către codificator este chiar ultima coloană din matricea sortată anterior • Singura informaţie necesară pentru a reconstrui eventual S pe baza lui L este indexul şirului de caractere iniţial din matricea sortată

  41. Exemplu (1) • Şirul de caractere de intrare: „this is the”

  42. Exemplu (1) • Rezultatul final: “this-is-the” == (“sshtth-ii-e”, I = 10)

  43. Exemplu (2) • Şirul de caractere de intrare: „gazeta_de_informatică” • Permutarilecirculare: gazeta_de_informatică nformaticăgazeta_de_i azeta_de_informaticăg formaticăgazeta_de_in zeta_de_informaticăga ormaticăgazeta_de_inf eta_de_informaticăgaz rmaticăgazeta_de_info ta_de_informaticăgaze maticăgazeta_de_infor a_de_informaticăgazet aticăgazeta_de_inform _de_informaticăgazeta ticăgazeta_de_informa de_informaticăgazeta_ icăgazeta_de_informat e_informaticăgazeta_d căgazeta_de_informati _informaticăgazeta_de ăgazeta_de_informatic informaticăgazeta_de_

  44. Exemplu (2) • Sortarealexicografica: _de_informaticăgazeta gazeta_de_informatică _informaticăgazeta_deicăgazeta_de_informat a_de_informaticăgazetinformaticăgazeta_de_ aticăgazeta_de_informmaticăgazeta_de_infor azeta_de_informaticăg nformaticăgazeta_de_i ăgazeta_de_informaticormaticăgazeta_de_inf căgazeta_de_informati rmaticăgazeta_de_info de_informaticăgazeta_ta_de_informaticăgaze e_informaticăgazeta_d ticăgazeta_de_informa eta_de_informaticăgaz zeta_de_informaticăga formaticăgazeta_de_in • Daca luam ultimul simbol al fiecarei permutari dupa sortare se obtine sirul S' = "aetmgci_dznăt_rifoeaa“,iar numarul de ordine al sirului S este 11, primul sir având numarul de ordine 0 • Sirul S' astfel obtinut se transmite împreuna cu numarul p = 11

  45. Concluzii • Din punct de vedere al timpului de execuţie, metoda Burrows-Wheeler este destul de neperformantă, mai ales datorită pasului de sortare • Imbunatatire: fişierul de intrare poatefi împărţit în mai multe bucăţi pentru a eficientiza execuţia (compresia va fi insa afectată de celemaimulteoridatorită faptului că utilizarea unei bucăti de fişier mai mică va duce la apariţia mai puţinor repetiţii de şiruri de caractere) • Transformarea Burrows-Wheeler elimină corelarea temporală deoarece cu cât sunt mai puţine şiruri de caractere intr-o parte dintr-un fişier, cu atât este mai greu să se detecteze corelarea. • Simbolurile suntgrupateimpreuna în funcţie de contextul în care ele aparprin intermediul sortării • Contextul considerat este de o singură parte a fiecărui simbol • Aplicatii : Zzip (Debin, 2002) pentru Windows şi bzip2 pentru UNIX

  46. Concluzii • Capacitatea codurului este limitata de lungimele registrelor ce calculeaza valorile probabilitatilor • Dezavantajul este inlaturat prin aplicarea unor tehnici de scalare si rotunjire a capetelor de interval, conform algoritmului lui Jelinek • In vederea efectuarii operatiei de decodare sunt posibile doua solutii: • sa se cunoasca numarul de simboluri din mesajul initial, deci sa se scrie intr-un antet acest numar; • inserarea unui caracter EOF in mesajul de codat;in momentul in care, la decodare, se ajunge in intervalul aferent lui EOF se decide oprirea decodarii

  47. Compresia RLE (run-length encoding) • Se bazează pe presupunerea conform căreia dacă selectăm un pixel din imagine la întâmplare, există o şansă destul de mare ca vecinii acestuia să aibă aceeaşi culoare • Ca urmare, codificatorul funcţionează prin parcurgerea imaginii rând cu rând, căutând serii consecutive de pixeli de aceeaşi culoare • Exemplu: dacaimaginea este alb-negru şi conţine pe un rând 17 pixeli albi, urmaţi de 1 pixel negru, urmat de 55 pixeli albi, etc. se va reţine la ieşire doar seria de numere 17, 1, 55, etc.

  48. Compresia RLE • De obicei, codificatorul presupune că imaginea de intrare începe cu un pixel alb (ceea ce este adevărat in marea majoritate a cazurilor) • Dacă această condiţie nu este îndeplinită, fluxul de numere de la ieşire ar trebui să înceapă cu un segment de lungime 0 • Rezoluţia imaginii trebuie returnată la începutul fluxului de ieşire • Dimensiunea compresiei obţinute depinde de obicei de complexitatea imaginii: • cu cât imaginea conţine mai multe detalii, cu atât compresia va avea o performanţă mai redusă

  49. Algoritmul de compresie • Se initializeaza un contor i cu valoarea 1 si se retine primul simbolgenerat de sursa S • Sirulgenerat de sursa de informatie se parcurgesimbol cu simbol; • La fiecare pas, dacasimbolulcurentesteidentic cu celretinut la pasul anterior: • atunci daca i este mai mic decât m': • atunciincrementeazavaloareacontoruluiisi se trece la pasulurmator; • altfeltransmite la iesiresimbolulretinutîmpreuna cu valoarea i si initializeaza i cu 1 • altfel, daca valoarea i este egala cu 1: • atunci transmite simbolul retinut si retine simbolul noucitit; • altfel transmite la iesire simbolul retinut si valoarea i, retinenoulsimbolcititsiinitializeazapei cu valoarea 1 • m' este cea mai mica putere a lui 2 mai mare sauegala cu numarul total de simboluripe care le poate genera o sursa de informatie S

  50. Exemplu • Pentrusirul de 16 simboluriaabcdeeeeffffgah, se transmitesirul: a 2 b c d e 4 f 4 g a h • Lungimea noului sir este 12, fata de 16 cât are sirul initial • Pentru a decodifica acest sir, se citeste primul simbol si se retine, iar apoi se parcurge secvential sirul de simboluri • La fiecare pas, dacasimboluleste un numar, atunci se transmitesimbolulretinut de câteoriindicanumarulcititsi se retine un nousimbol • încazcontrar se transmitesimbolulretinutsi se citeste un nousimbol • Dupaparcurgereasirului de simboluri se transmiteultimulsimbolcitit, dacaacesta nu reprezinta un numar

More Related