Kompresja danych – kodowanie Huffmana

advertisement
Kompresja danych –
kodowanie Huffmana
Dariusz Sobczuk
Plan wykładu
Kodowanie metodą Shannona-Fano
Kodowanie metodą Huffmana
Elementarny kod Golomba
Kod Golomba
Kod Rice’a
kompresja danych
2
Efektywny kod symboli
Słowa kodowe przyporządkowane są pojedynczym
symbolom i mają różną liczbę bitów (warunek
efektywnego kodu symboli)
Słowa symboli o większym prawdopodobieństwie
wystąpienia na wejściu są krótsze (długość słów
proporcjonalna do il. Informacji związanej z danymi
wydarzeniami)
Kod jest przedrostkowy, czyli jednoznacznie
dekodowalny (można korzystać za struktury drzewa
binarnego)
kompresja danych
3
Kodowanie Shannona–Fano (1948–1949)
Pierwsza propozycja budowy kodu
efektywnego o minimalnej redundancji
Algorytm konstrukcji kodu nie gwarantuje,
że zawsze zostanie uzyskany kod o
minimalnej redundancji
kompresja danych
4
Kod Shannona-Fano
1.
2.
3.
4.
5.
Określ wagi (il wystąpień) poszczególnych symboli
Posortuj listę symboli w nierosnącym porządku
wag, i ustal ją jako grupę początkową
Podziel grupę symboli na dwie części o możliwie
równej sumie wag z zachowaniem porządku listy
Przyporządkuj symbolom grupy z większą wagą 0,
a symbolom z mniejszą wagą 1
Rekursywnie powtórz kroki 3 i 4, aż grupa
początkowa podzielona zostanie na
jednoelementowe grupy
kompresja danych
5
Przykład kodowania metodą S-F
Dany alfabet As={a,b,c,d,e} z wagami odpowiednio
w(a)=6, w(b)=12, w(c)=4, w(d)=5, w(e)=4
Posortowanie
b,a,d,c,e wagi 12,6,5,4,4
Pierwszy podział
wagi 12,6 | 5,4,4 kod 0,0,1,1,1
Następne 12 | 6 || 5 | 4,4 kod 00,01,10,11,11
Końcowy kod 00,01,10,110,111
kompresja danych
6
Binarne drzewo dla metody S-F
0
0
b
1
1
0
a
1
d
0
c
kompresja danych
1
e
7
Efektywność metody S-F
Entropia H dla tego przypadku wynosi
H = 2.176
Średnia bitowa
L = 2.258
Nie jest to wartość optymalna, nawet w tej
klasie koderów
Pomimo to używana jest w takich koderach
jak WinZip, oraz Cabarc firmy Microsoft
kompresja danych
8
Optymalne drzewo binarne
kodu symboli
Własności takiego drzewa to:
Liść symbolu o najmniejszej wadze ma najdłuższe
słowo, czyli leży najgłębiej w drzewie
drzewo jest binarne i lokalnie pełne, a więc liść
leżący na najgłębszym poziomie ma brata, którym
jest liść o drugiej w kolejności najmniejszej wadze
Własność tę posiada drzewo Huffmana, które
jest optymalne w swojej klasie kodów symboli
kompresja danych
9
Kodowanie Huffmana (1952)
Shannon opowiada na wykładzie o
problemach związanych z konstrukcją kodu o
minimalnej redundancji
Huffman, student Shannona po niedługim
czasie proponuje właściwe rozwiązanie, dzięki
czemu... zostaje zwolniony ze zdawania
egzaminu
kompresja danych
10
Kod Huffmana – założenia
Symbolom o większym prawdopodobieństwie
wystąpienia odpowiadają kody krótsze niż
symbolom o mniejszym prawdopodobieństwie
wystąpienia
Dwóm najrzadziej występujące symbolom
odpowiadają kody tej samej długości
Niemożliwe skrócenie kodu dla żadnego
symbolu
kompresja danych
11
Kod Huffmana
1.
2.
3.
4.
5.
Określ wagi dla symboli, tworząc zbiór wolnych
wierzchołków
Sortuj listę wierzchołków wolnych nierosnąco
Dwa wolne wierzchołki z najmniejszymi wagami i
połącz z tworzonym węzłem rodzica. Wagę rodzica
ustal jako sumę wag dzieci. Zastąp te wierzchołki
wierzchołkiem rodzica nadając dzieciom etykiety
odpowiednio 0 i 1
Powtarzaj krok 3 , aż zostanie wolny korzeń drzewa
Odczytaj ze struktury drzewa słowa kodowe liści
kompresja danych
12
Przykład drzewa Huffmana
porównanie
0
0
12
1
1
19
b
0
0
1
b
8
11
1
0
a
1
d
0
0
1
6
a
d
5
0
4
c
Drzewo Huffmana
1
4
c
1
e
e
Shanona-Fano
kompresja danych
13
Kodowanie Huffmana
porównanie
Weźmy ten sam przykład co dla S-F
Otrzymujemy inne drzewo kodowe
Entropia H dla tego wynosi H = 2.176
Średnia bitowa dla S-F 2.258
Średnia bitowa dla Huffmana 2.226
Dla kodowania Huffmana jest to
wartość optymalna w klasie koderów
symboli
kompresja danych
14
Przykładowy sekwencja
poddawana kompresji
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ę...
kompresja danych
15
Drzewo Huffmana
dla badanego tekstu
153
65
88
36
18
29
8
15
4
2
48
25
7
2
10
3
40
20
12
4
8
14
6
23
6
13
12
10
5
1 1 1 1 4 5 5 18 1 2 2 2 4 4 7 7 3 3 3 3 6 7 6 6 11 2 3 5 10 20
d h l ś ł m n e w g t z ę k p s u y ,
. N i
W
kompresja danych
a r o – c ż j
S
P
16
Kod Huffmana dla badanego
tekstu
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
Kod
10100
110001
0000000
001
01010
010001
0000001
10011
1101
01011
0000010
00001
00010
00011
1011
Symbol
p
r
s
ś
t
u
w
y
z
ż
,
.
–
<spacja>
<nw>
kompresja danych
L. wyst.
7
6
7
1
2
3
1
3
2
5
3
3
2
20
6
Kod
0110
10101
0111
0000011
010010
100000
010000
100001
010011
11001
100010
100011
110000
111
10010
17
Kod Huffmana – cechy
Nieskomplikowany sposób budowy drzewa
Huffmana
Kod jest optymalny, tzn. nie istnieje sposób
kodowania przyporządkowujący symbolom
kody o innych długościach, dla którego
średnia długość kodu byłaby mniejsza
kompresja danych
18
Kod Huffmana – przykład tekstu
Zastosowanie kodu Huffmana dla
testowej wiadomości powoduje
otrzymanie średniej długości kodu na
symbol 4,48 bit (przy entropii 4,45 bit
na symbol)
kompresja danych
19
Czy kod Huffmana
to już koniec?
Kodowanie Huffmana jest optymalne w klasie
algorytmów przypisujących symbolom kody
o długości wyrażonej w całkowitej liczbie
bitów
Możliwe jest skonstruowanie kodu, który
średnio będzie przypisywał kody o
długościach będących ułamkami bitów
kompresja danych
20
Kod dwójkowy
o prawie stałej długości
W kodzie dwójkowym o prawie stałej wartości Bn’ dla
n-elementowego alfabetu As={a0,...,an-1} pierwszym
r symbolom przypisywane są słowa k=[log2n] bitowe
postaci Bn’(ai)=Bk(i) a pozostałym słowa o długości
(k+1) bitów postaci Bn’(ai)=Bk+1(r+i), r=2k+1 – n
Dla źródeł o alfabecie zawierającym n=2i, i=1,2,...
symboli Bn’=Bi a r=0, kod staje się kodem o stałej
długości
kompresja danych
21
Przypomnienie: kod unarny
Symbol
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Kod
0
10
110
1110
11110
111110
1111110
11111110
111111110
1111111110
11111111110
111111111110
1111111111110
11111111111110
111111111111110
1111111111111110
Symbol
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
kompresja danych
Kod
1
01
001
0001
00001
000001
0000001
00000001
000000001
0000000001
00000000001
000000000001
0000000000001
00000000000001
000000000000001
0000000000000001
22
Elementarny kod Golomba
Niech dla parametru m (rząd kodu), EGm oznacza
kod o zmienno-zmiennej wartości zdefiniowany przez
alfabet As={1,01,...,0i1,...,0m-11,0m} (ciąg prawie jak
przy kodowaniu unarnym), gdzie 0i oznacza ciąg 0 o
długości i. Kod EGm przypisuje rozszerzonemu
symbolowi am= 0m wartość ζm= 0, podczas gdy
symbole ai=0i1 są kodowane za pomocą przedrostka
1 z dołączoną reprezentacją i w kodzie dwójkowym
prawie stałej wartości Bn’.
Warto zwrócić uwagę, że kod jest korzystny w
przypadku często pojawiających się wartości 0m
kompresja danych
23
Słowa elementarnego
kodu Golomba
Alfabet
Bit ciągi alfabetu
dla m=8
Słowa
kodowe
Bit ciągi alfabetu dla
m=9
Słowa
kodowe
a0
1
1000
1
1000
a1
01
1001
01
1001
a2
001
1010
001
1010
a3
0001
1011
0001
1011
a4
00001
1100
00001
1100
a5
000001
1101
000001
1101
a6
0000001
1110
0000001
1110
a7
0000001
1111
0000001
11110
a8
0000000
0
00000001
11111
a9
--
--
00000000
0
kompresja danych
24
Kod Golomba
Kod Golomba to kod symboli o nieskończonym
alfabecie źródła z rzędem kodu m oznaczany Gm.
Alfabet , składający się w wersji podstawowej z
kolejnych liczb całkowitych nieujemnych, dzielony
jest na rozłączne przedziały o stałej długości
określonej przez rząd kodu
AS={(0,1,...,m-1),(m,m+1,...,2m-1),...} lub
AS = {π 0( m ) , π 1( m ) ,....}
kompresja danych
25
Kod Golomba cd
Formułując słowo kodowe ζi należy wskazać numer
przedziału u do którego trafia symbol i, a potem
miejsce i od początku tego przedziału d.
Długość przedziału m powinna się korelować z
geometrycznym rozkładem prawdopodobieństwa
źródła (gdzie pi+1= ρ·pi)
Szybsze opadanie charakterystyki (mniejsze ρ)
wymaga krótszych przedziałów, wolniejsze dłuższych
Odpowiedni dobór wartości m do szacowanej
wartości ρ decyduje o efektywności kodu
kompresja danych
26
Kod Golomba cd
Słowo Golomba składa się z dwóch części:
przedrostka będącego numerem przedziału
symbolu zapisanego w kodzie unarnym, o
potencjalnie nieograniczonej liczbie symboli
przyrostka wskazującego odległość od początku
przedziału wyrażoną słowem kodu dwójkowego
prawie stałej długości
Kod Golomba dla m=1 jest kodem unarnym
kompresja danych
27
Kod Golomba - różne rzędy
i
m=1
m=2
m=3
0
0
0|0
0|0
1
10
0|1
0|10
2
110
10|0
0|11
3
1110
10|1
4
11110
110|0
10|10
5
111110
110|1
10|11
6
1111110
1110|0
110|0
7
11111110
1110|1
110|10
8
111111110
11110|0
110|11
..
...
...
...
kompresja danych
10|0
28
Przykład tworzenia kodu Golomba
Wyznaczymy słowo kodowe dla m=3
oraz i=13
[i/m]=[13/3]=4; U(4)=11110
Przyrostek słowa zapisany w kodzie
dwójkowym prawie stałej długości dla
wartości d= (i mod m) =1; B’(1)=10
Daje to słowo kodowe G(13)=1111010
kompresja danych
29
Wyznaczanie rzędu kodu Golomba
Rząd kodu Golomba powinien określać
długość serii powtórzeń bardziej
prawdopodobnych symboli źródła
Warunek Golomba określa rząd jako:
⎡ log(1 + ρ ) ⎤
m=⎢
−1 ⎥
log
ρ
⎢
⎥
kompresja danych
30
Kod Rice’a
Szczególny przypadek kodu Golomba,
dla m=2k nazwany jest kodem Rice’a Rk
k mniej znaczących bitów zostaje
zapisana jako przyrostek słowa
kodowego
bardziej znaczące bity po przesunięciu o
k pozycji w prawo zostaje zapisane w
kodzie unarnym
kompresja danych
31
Kod Rice’a - różne rzędy
i
k=1
k=2
k=3
0
0|0
0|00
0|000
1
0|1
0|01
0|001
2
10|0
0|10
0|010
3
10|1
0|11
0|011
4
110|0
10|00
0|100
5
110|1
10|01
0|101
6
1110|0
10|10
0|110
7
1110|1
10|11
0|111
8
11110|0
110|00
10|000
..
...
...
...
kompresja danych
32
Przykład kodowania Rice’a
Słowo kodu R2 dla i=6
Dwójkową reprezentację i=110 dzielimy
na dwie części 1|10
Starszą część zapisujemy w postaci
kodu unarnego U(1)=10
Dołączamy przyrostek 10
Otrzymujemy R2(6)=1010
kompresja danych
33
Kod Rice’a realizacja
Kody Rice’a definiowane są jako dynamiczne kody
Goloba
Źródłowy ciąg dzielony jest na bloki o stałych lub
zmiennych rozmiarach. W każdym bloku ustalony
zostaje najkorzystniejszy kod Rice’a
Do każdego bloku trzeba dołączyć identyfikator
określonej postaci kodu Rice’a
Kod Rice’a z adaptacyjnie dobieraną wartością k dla
każdej kodowanej wartości wykorzystano w
standardzie JPEG-LS
kompresja danych
34
Plan następnego wykładu
Kodowanie arytmetyczne
Kodowanie adaptacyjne
Dla kodowania arytmetycznego
Dla kodowania Huffmana
Porównanie różnych kodowań
adaptacyjnych
kompresja danych
35
Download