Kompresja Kodowanie arytmetyczne

Transkrypt

Kompresja Kodowanie arytmetyczne
Kompresja
Kodowanie arytmetyczne
Dariusz Sobczuk
Kodowanie arytmetyczne
(lata 1960-te)
Pierwsze prace w tym kierunku sięgają
początków lat 60-tych XX wieku
Pierwszy algorytm Eliasa nie został
opublikowany (opisywany jest tylko w później
wydanych książkach)
Niezależne odkrycie kodowania
arytmetycznego latach 1976–1980 przez
różnych autorów
Aktualnie patent posiada IBM
kompresja danych
2
Kodowanie arytmetyczne Pomysł
W metodach entropijnych chodzi o zaokrąglanie
rozkładu prawdopodobieństw symboli Ps,
powodowane koniecznością zapisania poszczególnych
słów kodowych na całkowitej liczbie bitów
Najbardziej dokładne przybliżenie rozkładu Ps można
uzyskać poprzez przypisanie jednego słowa
kodowego całej sekwencji danych źródłowych
Dokładność wyznaczania wartości
prawdopodobieństwa wystąpienia całego ciągu jest
ograniczona sposobem ustalenia jego wartości dla
poszczególnych symboli
kompresja danych
3
Kodowanie arytmetyczne –
Pomysł cd
Chcemy wyznaczyć P(swe) i zapisać je za pomocą
bitowego ciągu kodowego
Jednak dotychczasowy zapis As={a1,...,an} i
Ps={p1,...,pn} tak, że Ps: ai → P(ai) nie jest
przydatny, gdyż prawdopodobieństwa wystąpienia
dwóch symboli mogą być jednakowe
Zamiast prawdopodobieństw można użyć
dystrybuantę dyskretnego układu zmiennej losowej
⎧ i
⎫
FPS = ⎨∑ p j : i = 1,..., n ⎬ = {p1 , p1 + p 2 ,..., p1 + ... + p n }
⎩ j =1
⎭
kompresja danych
4
Kodowanie arytmetyczne –
Pomysł cd
Opis za pomocą dystrybuanty pozwala na
jednoznaczne odwzorowanie symboli alfabetu As w
rozłączne podprzedziały w postaci
πs : ai∈As → [F(ai-1), F(ai)) ⊂ [0,1)
Zakładając F(a0) = 0 i F(an) =1 można dla dowolnego
przedziału zapisać
π[d,g): ai∈As→ [d+F(ai-1)·(g-d), d+F(ai)·(g-d)) ⊂ [d,g)
Opierając się na powyższych założeniach można
podziały robić rekurencyjnie
kompresja danych
5
Kodowanie arytmetyczne Kodowanie
Pierwszy symbol pojawiający się w
kodowanym ciągu s1= ak, ak∈As powoduje
zawężenie przedziału kodu do π(1) = πs(ak) =
[F(ak-1), F(ak) ⊂ [0,1).
Drugi symbol ciągu wejściowego powoduje
zawężenie przedziału π(1) w proporcjach,
które wynikają z linii prawdopodobieństwa do
π(2) itd.
Mamy więc zasadę zwężania kodu π(i) ⊂ π(i-1)
kompresja danych
6
Kodowanie arytmetyczne –
Kodowanie cd
Kod arytmetyczny K=A0: As → [0,1]) z jedną linią
prawdopodobieństwa Πs = {[F(ai-1), F(ai)), i=1,...n}
na podstawie kodu wejściowego si=ak modyfikuje
aktualny przedział w następujący sposób:
A0(πs(ak), π(i-1)) = π(i)
gdzie π(i) =[D(i),G(i)) oraz:
D(i)= D(i-1) + R(i-1)F(ak-1),
G(i)= D(i-1) + R(i-1)F(ak), dla i=1,2,...
Długość przedziału kodowego:
R(i-1)= |π(i-1)| = G(i-1)- D(i-1)
kompresja danych
7
Kodowanie arytmetyczne Dekodowanie
Ponieważ π(t) ⊂ π(1) , to pozwala określić do jakiego
przedziału Πs trafia Lt , co pozwala zdekodować
pierwszy symbol s1= ak ⇔ Lt ∈ [F(ak-1), F(ak))
Dalej przeskalowujemy liczby zgodnie ze wzorem:
Li-1 = (Li - F(ak-1))/(F(ak) - F(ak-1)) i rzutując na linie
prawdpodobieństw otrzymujemy symbol
si= ak ⇔ Lt ∈ [F(ak-1), F(ak))
Dodatkowo jest potrzebna liczba ciągu wejściowego,
bo inaczej kodowanie się zapętli. Po osiągnięciu tej
liczby dekodowanie kończy się
kompresja danych
8
Kodowanie arytmetyczne Przykład
Kodujemy słowo „ARYTMETYKA”
a1=„A”; P(a1)=0.2; πs(a1)=[0, 0.2)
a2=„E”; P(a2)=0.1; πs(a2)=[0.2, 0.3)
a3=„K”; P(a3)=0.1; πs(a3)=[0.3, 0.4)
a4=„M”; P(a4)=0.1; πs(a4)=[0.4, 0.5)
a5=„R”; P(a5)=0.1; πs(a5)=[0.5, 0.6)
a6=„T”; P(a6)=0.2; πs(a6)=[0.6, 0.8)
a7=„Y”; P(a7)=0.2; πs(a7)=[0.8, 1.0)
kompresja danych
9
Kod. arytmetyczne – Przykład cd
i
si= ak
D(i)
G(i)
R(i)
0
INI
0
1
1
1
„A”
0.0
0.2
0.2
2
„R”
0.1
0.12
0.02
3
„Y”
0.116
0.12
0.004
4
„T”
0.1184
0.1192
0.0008
5
„M”
0.11872
0.1188
0.00008
6
„E”
0.118736
0.118744
0.000008
7
„T”
0.1187408
0.1187424
0.0000016
8
„Y”
0.11874208
0.1187424
0.00000032
9
„K”
0.118742176
0.118742208
0.000000032
10
„A”
0.118742176
0.1187421824
0.0000000064
kompresja danych
10
Kod. Arytmetyczne - Przykład cd.
si= ak
F(ak-1)
F(ak)
ΔF(ak)
0.118742176
„A”
0.0
0.2
0.2
2
0.59371088
„R”
0.5
0.6
0.1
3
0.9371088
„Y”
0.8
1.0
0.2
4
0.685544
„T”
0.6
0.8
0.2
5
0.42772
„M”
0.4
0.5
0.1
6
0.2772
„E”
0.2
0.3
0.1
7
0.72
„T”
0.6
0.8
0.2
8
0.86
„Y”
0.8
1.0
0.2
9
0.3
„K”
0.3
0.4
0.1
10
0
„A”
0.0
0.2
0.2
...
0
„A”
0.0
0.2
0.2
i
Liczba kodowa Li
1
kompresja danych
11
Kod. Arytmetyczne - Przykład cd.
si= ak
F(ak-1)
F(ak)
ΔF(ak)
0.11874218
„A”
0.0
0.2
0.2
2
0.5937109
„R”
0.5
0.6
0.1
3
0.937109
„Y”
0.8
1.0
0.2
4
0.685546
„T”
0.6
0.8
0.2
5
0.427725
„M”
0.4
0.5
0.1
6
0.27725
„E”
0.2
0.3
0.1
7
0.725
„T”
0.6
0.8
0.2
8
0.8625
„Y”
0.8
1.0
0.2
9
0.3125
„K”
0.3
0.4
0.1
10
0.125
„A”
0.0
0.2
0.2
...
0.625
„T”
0.6
0.8
0.2
i
Liczba kodowa Li
1
kompresja danych
12
Częstość występowania symboli
w badanej sekwencji tekstowej
Jakżeż ja się uspokoję –
Pełne strachu oczy moje,
Pełne grozy myśli moje,
Pełne trwogi serce moje,
Pełne drżenia piersi moje –
Jakżeż ja się uspokoję...
Symbol
a
c
d
e
ę
g
h
i
j
k
l
ł
m
n
o
L. wyst.
6
3
1
18
4
2
1
7
10
4
1
4
5
5
11
kompresja danych
Symbol
p
r
s
ś
t
u
w
y
z
ż
,
.
–
<spacja>
<nw>
L. wyst.
7
6
7
1
2
3
1
3
2
5
3
3
2
20
6
13
Kodowanie arytmetyczne
przykładowa sekwencja
0
0,0392 0,2288
0,2745
i
a
0,3399 0,3660 0,9608
k
j
0,2745 0,2784 0,2788
a
0,3399
<nw>
0,27545 0,27546
0,274510,27461 0,27521
a
<nw>
0,3373
c
1,0000
j
k
kompresja danych
0,27697
0,27707
<nw>
14
Kodowanie arytmetyczne – cechy
W teorii wymagane są operacje na liczbach
o bardzo dużej precyzji (rzędu milionów cyfr)
Dzięki takiemu podejściu możliwe jest
uzyskanie kodu o średniej długości
odpowiadającej entropii (kod całej
wiadomości będzie dłuższy o nie więcej niż 2
bity od kodu wynikającego z entropii)
Operacje na liczbach o takiej precyzji są
bardzo czasochłonne
kompresja danych
15
Kodowanie arytmetyczne –
podejście praktyczne
Przedziały stają się bardzo małe, a co za tym idzie
pierwsze cyfry obu końców są identyczne
Wykorzystując to implementuje się kodowanie
arytmetyczne na liczbach o niewielkiej liczbie cyfr
znaczących (typowo na liczbach 32-bitowych)
Znacząco większa prędkość działania takiej
implementacji
Nieznaczne pogorszenie współczynnika kompresji
kompresja danych
16
Koder binarny
Koder binarny jest szczególnym przypadkiem
realizacji kodu arytmetycznego dla
dwuelementowego alfabetu As={0,1}
Binarne kodowanie adaptacyjne jest
najbardziej efektywną, entropijną metodą
kodowania przy kompresji obrazów (JBIG,
JBIG2, MPEG-4, JPEG, JPEG200)
Większość realizacji kodowania
arytmetycznego dotyczy alfabetu binarnego
kompresja danych
17
Algorytm kodowania binarnego
Przy alfabecie As={a1,a2} podział linii
prawdopodobieństw Πs zależy od jednej wartości
F(a1)=P(a1)=p1. Mamy wówczas dwa podprzedziały
[0, p1) oraz [p1,1).
Aktualna postać przedziału kodowego π(i) =[D(i),G(i)) o
długości R(i)= |π(i)| = G(i)- D(i) zależy od wartości
liczby R1(i-1)= R(i-1) p1.
kompresja danych
18
Algorytm kodowania binarnego cd
Algorytm kodowania:
Jeśli kodujemy si= a1 to π(i) =[D(i-1), D(i-1)+ R1(i-1))
Jeśli kodujemy si= a2 to π(i) =[D(i-1) )+R1(i-1), G(i-1))
W pierwszym przypadku modyfikowana jest
tylko górna granica.
W drugim przypadku modyfikowana jest tylko
dolna granica.
kompresja danych
19
Algorytm kodowania binarnego cd
Algorytm dekodowania:
Jeśli L - D(i-1)< R1(i-1), to dekodujemy si= a1 oraz
π(i) =[D(i-1), D(i-1)+ R1(i-1))
Jeśli L - D(i-1)≥ R1(i-1), to dekodujemy si= a2 oraz
π(i) =[D(i-1) )+R1(i-1), G(i-1))
Wartość przedziału kodowego w praktyce
można ustalić za pomocą zmiennych DÓŁ i
GÓRA
kompresja danych
20
Kodowanie Huffmana
a kodowanie arytmetyczne
Kodowanie Huffmana:
kod optymalny w klasie
kodów o długościach
będącymi liczbami
całkowitymi
stosunkowo łatwy
do obliczania
współczynnik kompresji
zwykle niewiele gorszy
od teoretycznego
optimum
brak ograniczeń
patentowych
Kodowanie arytmetyczne:
kompresja danych
kod optymalny
stosunkowo trudny
do obliczania
niewysoka wydajność
wynikająca z konieczności
wykonywania operacji
arytmetycznych
bardzo dobry współczynnik
kompresji (zbieżny
do entropii)
ograniczenia patentowe
21
Paradygmat modelowanie–
kodowanie
Modelowanie
sekwencja
wejściowa
Kodowanie
uaktualnienie
modelu
dane
skompresowane
kompresja danych
Modelowanie
Dekodowanie
uaktualnienie
modelu
sekwencja
wyjściowa
22
Kodowanie adaptacyjne
Kod budowany na podstawie częstości
wystąpień symboli w dotychczas
zakodowanym fragmencie
Zalety:
brak konieczności przekazywania do dekodera
informacji o prawd. występowania symboli
dobry współczynnik kompresji
Wady:
niska prędkość działania (konieczność modyfikacji
kodu po zakodowaniu każdego symbolu)
kompresja danych
23
Adaptacyjne kodowanie
Huffmana
Model początkowy zakłada, że
prawdopodobieństwo wystąpienia każdego
symbolu alfabetu jest jednakowe
Kod Huffmana konstruowany jest dla takiego
modelu
Po zakodowaniu każdego symbolu kod
Huffmana jest przebudowywany, aby
symbole, które w przeszłości występowały
częściej otrzymały krótsze kody
kompresja danych
24
Adaptacyjne kodowanie
Huffmana – cechy
Zalety:
Wady:
brak konieczności
przesyłania
do dekodera
informacji
o modelu
dobry współczynnik
kompresji
kompresja danych
wolne uaktualnianie
drzewa Huffmana
po zakodowaniu
każdego symbolu
25
Adaptacyjne kodowanie
arytmetyczne
Model początkowy zakłada jednakowe
prawdopodobieństwo występowania każdego
symbolu alfabetu
Przedział [0, 1) dzielony jest na podprzedziały
równej długości
Po zakodowaniu każdego symbolu
modyfikowane jest prawdopodobieństwo jego
występowania, aby zwiększyć względną
długość podprzedziału mu odpowiadającego
kompresja danych
26
Adaptacyjne kodowanie
arytmetyczne – cechy
Wady:
Zalety:
brak konieczności
przesyłania
do dekodera
informacji
o modelu
dobry współczynnik
kompresji
kompresja danych
konieczność
przechowywania
statystyk występowania
symboli w specjalnych
strukturach danych
umożliwiających szybki
dostęp i aktualizację
wolniejsze niż kodowanie
statyczne
27
Czym jest tak naprawdę
kodowanie?
Algorytmy kodowania służą do przydzielenia
symbolom kodów w taki sposób aby średnia
długość kodu w kodowanej sekwencji była jak
najmniejsza
Algorytmy te bazują na rozkładzie
prawdopodobieństwa występowania symboli,
który jest dostarczany przez algorytm
modelowania
kompresja danych
28
Plan kolejnego wykładu
Algorytmy kompresji bezstratnej ogólnego
przeznaczenia:
metody Ziva–Lempela (LZ)
metody predykcji przez częściowe dopasowanie
(PPM)
metody oparta na transformacie Burrowsa–
Wheelera (BWT)
Porównanie wydajności algorytmów
kompresja danych
29

Podobne dokumenty