Documente Academic
Documente Profesional
Documente Cultură
DEPARTMENT
DEPARTMENT OF
OF COMPUTER
COMPUTER SCIENCE
SCIENCE
0
11
10
l = 1.2 bits/symbol
Redundanta= 0.384 b/sym (47%!)
Letter
Probability
Code
aa
0.6400
ab
0.0160
10101
ac
0.1440
11
ba
0.0160
101000
bb
0.0004
10100101
bc
0.0036
1010011
ca
0.1440
100
cb
0.0036
10100100
cc
0.0324
1011
l = 1.7228/2 = 0.8614
Red. = 0.0045
bits/symbol
Introducere
Scurta istorie
Shannon a mentionat pentru prima data folosirea cdf
Introducere
Codarea aritmetica elimina necesitatea codarii fiecarui simbol al alfabetului
sursei
In timpul codarii algoritmul genereaza un cod pentru intreg mesajul de intrare, lucru
In comparatie cu alte campuri din sfera codarii, codarea aritmetica este foarte
Introducere
La memorarea intervalului se pot memora capetele intervalului sau la fel de
Salvarea codului aritmetic (in reprezentare zecimala sau binara) intr-un fisier
Aspecte esentiale
In codarea aritmetica o sursa este reprezentata de un interval intre 0 si 1 pe
H (S )
H max ( X ) log( D)
Fie un mesaj ce contine M simboluri; dupa statistica sursei, simbolul
de M P ( s1 ) ori
de M P ( s N ) ori
P ( si ) M P ( s i )
i 1
k log R f log P ( si )
M P( si )
i 1
M P ( si ) log P ( si ) M H ( S )
i 1
k
H (S )
M
Exemplu
Fie, de exemplu, o sursa cu doua simboluri: X si Y, cu
11
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
12
Exemplu
Pentru codarea secventelor
de lungime 3 se poate
construi imaginea / tabelul de
codare alaturat:
13
Exemplu
2 2
4
n XX log log
3 3
9
2 1
2
n XY log log
3 3
9
1 2
2
nYX log log
3 3
9
1 1
1
nYY log log
3 3
9
XX
0,25 2 0.5 a 1 0
1,16 n XX 2
XY
2,16 n XY 3
2,16 nYX 3
0.5 2 1,0 a 2 1
code 01 2
0,5 2 1,0 a 1 1
YX
0,0 2 0,0 a 3 0
0,75 2 1,5 a 1 1
3,16 nYY 4
YY
0,9375 2 1,875 a 1 1
0,875 2 1,75 a 2 1
0,75 2 1,5 a 3 1
code 1111 2
0,5 2 1,0 a 4 1
14
Algoritmul de baza
1. Se considera intervalul curent [L,H) initializat cu [0,1)
2. Pentru fiecare simbol, ai, din fisier, se parcurg doi pasi:
1.
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
2.
Algoritmul de baza
Diviziunea
16
Exemplu
Fie sursa data prin
distributia
a
e
i
o
u
0
.
12
0
.
42
0
.
09
0
.
3
0
.
07
S :
Figura
alaturata
arata
modul de realizare a
partitiilor pentru mesajul
iou
17
Observatii
Lungimea intervalului final este egala cu produsul probabilitatilor simbolurilor individuale
final
Ns
p( s
k 1
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:
n [ log p ]
2
unde paranteza are semnificatia de parte intreaga, obtinuta prin rotunjire
Numarul de biti generati de codarea aritmetica este egal cu entropia, H (evident, daca nu se
considera rotunjirea)
Codarea aritmetica atinge compresia care este indicata de entropia sursei, de aceea este optimala
18
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 i
Sunt necesare probabilitatile cumulative
PC ( i )
pk
k 1
L' L Pc ( i 1 ) H L
H ' L Pc (i ) ( H L)
unde L si H sunt limitele intervalului curent - pentru primul pas se considera L=0 si
H=1
19
Observatii
Intersectia intervalelor obtinute este vida pentru simboluri diferite,
deci:
I( si ) I( s j ) daca si s j
Observatii
Pentru realizarea decodarii trebuie sa se cunoasca modelul
21
Exemplu
Se considera o sursa cu doua simboluri, cu distributia de
S :
0.4 0.5 0.1
Se va exemplifica codificarea/comprimarea
mesajului
bbbEOF
22
Exemplu
Simbol
mesaj
Actiune
a
L
0.000
1.00
initializare
0.000
0.400
0.900
subdivide
0.400
0.600
0.850
subdivide
0.600
0.700
0.700
0.820
subdivide
0.700
0.750
0.812
0.820
codifica
EOF
0.400
0.400
0.900
0.600
0.600
0.850
0.700
0.825
0.750
0.812
0.900
1.000
0.850
0.900
0.825
0.850
0.812
0.825
EOF
23
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
Decodarea
Pentru a decoda o secventa, trebuie aplicate operatiile
25
Algoritmul de decodare
Se compara media intervalului cu fiecare din intervalele initiale
H ' L Pc (i ) ( H L)
Exemplu
P=[0.5, 0.25,
0.125,
0.125];
interval =
0.27236938480000;
n_mesaj = 8.
Rezultatele:
Istoric (history) =
0.00000000000000
0.00000000000000
0.00000000000000
0.25000000000000
0.25000000000000
0.25000000000000
0.25000000000000
0.26562500000000
0.26562500000000
0.26562500000000
0.27148437500000
0.27148437500000
0.27148437500000
0.27221679687500
0.27221679687500
0.27221679687500
0.27230834960938
1.00000000000000
0.50000000000000
0.50000000000000
0.37500000000000
0.31250000000000
0.28125000000000
0.28125000000000
0.27343750000000
0.27343750000000
0.27343750000000
0.27246093750000
0.27246093750000
0.27246093750000
0.27233886718750
0.27233886718750
0.27233886718750
0.27232360839844
0
1.00000000000000
0
2.00000000000000
1.00000000000000
1.00000000000000
0
2.00000000000000
0
0
3.00000000000000
0
0
4.00000000000000
0
0
4.00000000000000
27
% 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
28
Ns
freq ( j )
j i 1
( H L 1) cum _ freq (i )
cum _ freq (0)
H L
( H L 1) cum _ freq (i 1)
1
cum _ freq (0)
[ H , L) [2 L 2 N 2 , 2 H 2 N 2 1)
Efectuarea acestei transformari este memorata prin incrementarea unui
numarator (waiting_counter)
Operatia se repata atat timp cat intervalul este prea scurt
Dupa salvarea mesajului comprimat, se trimite contunutul
numaratorului
Dupa trimiterea ultimului bit al numaratorului, se transmite bitul
invers de un numar de ori dat de continutul numaratorului de asteptare
32
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 biti comuni in stanga) and (H-L) >=
cum_freq(0).
END.
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.
33
Decompresia
Decodarea este exact inversul procesului de codare
Se utilizeaza o fereastra alunecatoare pe fisierul comprimat, de lungime N
Mai intai, se initializeaza fereastra cu primele N simboluri binare
Se calculeaza valoarea ei zecimala prin conversia succesiunii binare, din baza 2
in baza 10
Intervalul curent este initializat ci L=0 si
Simbolul este produs ca urmare a evaluarii expresiei
cum _ freq (i )
Decompresia
Daca reprezentarile binare ale capetelor intervalului au un
cu 1 pentru H
Fereastra de citire este deplasata cu (p) pozitii inspre dreapta si
variabila value este ajustata corespunzator
Algoritm
Decodare(fin)
cum_freq = ((value-L+1)*cum_freq(0)-1) / (H-L+1);
Define i=;
WHILE cum_freq(i)>cum_freq DO
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
IF common_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.
36
Concluzii
Codarea aritmetica are ca rezultat un sir de simboluri care permite obtinerea
Transformarea Burrows-Wheeler
Transformarea Burrows-Wheeler a fost introdus n 1994 de ctre cei doi
Algoritmul de compresie
Transformarea BWT consta din urmatoarele:
sirul de simboluri generate de o sursa de informatie S se mparte
Algoritmul de compresie
Fiind dat un ir de caractere de intrare S, de lungime n, codificatorul
Exemplu (1)
irul de caractere de intrare: this is the
41
Exemplu (1)
Rezultatul final: this-is-the == (sshtth-ii-e, I = 10)
42
Exemplu (2)
irul de caractere de intrare: gazeta_de_informatic
Permutarile circulare:
gazeta_de_informatic
azeta_de_informaticg
zeta_de_informaticga
eta_de_informaticgaz
ta_de_informaticgaze
a_de_informaticgazet
_de_informaticgazeta
de_informaticgazeta_
e_informaticgazeta_d
_informaticgazeta_de
informaticgazeta_de_
nformaticgazeta_de_i
formaticgazeta_de_in
ormaticgazeta_de_inf
rmaticgazeta_de_info
maticgazeta_de_infor
aticgazeta_de_inform
ticgazeta_de_informa
icgazeta_de_informat
cgazeta_de_informati
gazeta_de_informatic
43
Exemplu (2)
Sortarea lexicografica:
_de_informaticgazeta
_informaticgazeta_de
a_de_informaticgazet
aticgazeta_de_inform
azeta_de_informaticg
gazeta_de_informatic
cgazeta_de_informati
de_informaticgazeta_
e_informaticgazeta_d
eta_de_informaticgaz
formaticgazeta_de_in
gazeta_de_informatic
icgazeta_de_informat
informaticgazeta_de_
maticgazeta_de_infor
nformaticgazeta_de_i
ormaticgazeta_de_inf
rmaticgazeta_de_info
ta_de_informaticgaze
ticgazeta_de_informa
zeta_de_informaticga
Daca
luam ultimul simbol al fiecarei permutari dupa sortare se obtine sirul S' =
"aetmgci_dznt_rifoeaa, iar numarul de ordine al sirului S este 11, primul sir avnd numarul de ordine
0
Sirul S' astfel obtinut se transmite mpreuna cu numarul p = 11
44
Concluzii
Din punct de vedere al timpului de execuie, metoda Burrows-Wheeler
ct sunt mai puine iruri de caractere intr-o parte dintr-un fiier, cu att
este mai greu s se detecteze corelarea.
Simbolurile sunt grupate impreuna n funcie de contextul n care ele apar
prin intermediul sortrii
Contextul considerat este de o singur parte a fiecrui simbol
Concluzii
Capacitatea codurului este limitata de lungimele registrelor ce
Compresia RLE
De obicei, codificatorul presupune c imaginea de intrare
Algoritmul de compresie
Se initializeaza un contor i cu valoarea 1 si se retine primul simbol generat de
sursa S
Sirul generat de sursa de informatie se parcurge simbol cu simbol;
La fiecare pas, daca simbolul curent este identic cu cel retinut la pasul anterior:
atunci daca i este mai mic dect m':
m' este cea mai mica putere a lui 2 mai mare sau egala cu numarul total
Exemplu
Pentru sirul de 16 simboluri aabcdeeeeffffgah, se transmite sirul:
a2bcde4f4gah
Exemplu
n conditiile prezentate anterior, decodificarea sirului
a2bcde4f4gah
are loc astfel:
retine
a;
transmite a de 2 ori si retine b;
transmite b si retine c;
transmite c si retine d;
transmite d si retine e;
transmite e de 4 ori si retine f;
transmite f de 4 ori si retine g;
transmite g si retine a;
transmite a si retine h;
transmite h
51
Exemplu
Presupunnd c avem o imagine n tonuri de gri care ncepe cu seria de pixeli avnd
valorile:
12, 12, 12, 12, 12, 12, 12, 12, 12, 35, 76, 112, 67, 87, 87, 87, 5, 5, 5, 5, 5, 5, 1,...
Codificarea obinut va fi urmtoarea:
9, 12, 35, 76, 112, 67, 3, 87, 6, 5, 1,
unde valorile subliniate reprezint numrul de repetiii
Problema care apare este aceea a diferenierii dintre valorile de pixeli (de exemplu 12)
i valorile care reprezint numrul de repetiii (9)
Printre soluiile posibile se numr i urmtoarele:
dac imaginea este limitat la doar 128 de nuane de gri, putem folosi un bit din fiecare
byte pentru a indica dac valoarea respectiv este o intensitatea sau un numr de repetiii;
putem rezerva o valoare (spre exemplu 255) din cele de la 0 la 255 pentru a o folosi pentru
semnalizarea unei serii de pixeli
255, 9, 12, 35, 76, 112, 67, 255, 3, 87, 255, 6, 5, 1,...
53
Concluzii
Ordinul de complexitate al acestui algoritm este O(n), unde n este
considera a fi m', atunci n cel mai rau caz (cnd sirul de simboluri
care trebuie comprimat este format numai din subsiruri formate din
simboluri identice care au lungimea 2) dimensiunea sirului de
simboluri transmis este cu 50% mai mare dect dimensiunea sirului
original
54
Concluzii
Algoritmii entropici de compresie nu pot comprima siruri
55
Referinte
Alistair Moffat and Andrew Turpin, Compression and Coding Algorithms, Kluwer
and Indexing Documents and Images, Morgan Kaufmann, San Francisco, 1999
Eric Bodden, Malte Clasen, Joachim Kneis, Arithmetic Coding revealed, A guided tour
56