3. Kodowanie Shannona–Fano i Huffmana

Transkrypt

3. Kodowanie Shannona–Fano i Huffmana
Przetwarzanie i transmisja danych multimedialnych
Wykład 3
Kodowanie Shannona–Fano i Huffmana
Przemysław Sękalski
[email protected]
Politechnika Łódzka
Katedra Mikroelektroniki i Technik Informatycznych
DMCS
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
1
Zawartość wykładu
1.
2.
3.
4.
5.
6.
7.
8.
9.
Wprowadzenie do kompresji i transmisji danych
Podstawy kompresji
Kodowanie Shannona–Fano i Huffmana
Kodowanie arytmetyczne
Algorytmy słownikowe
Algorytm predykcji przez częściowe dopasowanie (PPM)
Transformata Burrowsa–Wheelera (BWT)
Wybrane algorytmy specjalizowane
Dynamiczny koder Markowa (DMC) i algorytm kontekstowych
drzew waŜonych (CTW)
10. Bezstratna kompresja obrazów
11. Stratna kompresja obrazów
12. Stratna kompresja dźwięku
13. Kompresja wideo
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
2
Plan wykładu
• Wprowadzenie
• Algorytmy statyczne i semistatyczne:
– Koder Shannona-Fano
– Koder Huffmana
• Algorytmy adaptacyjne
– Adaptacyjny koder Huffmana
– Kodowanie Golomba
– Kodowanie Golomba-Rice’a
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
3
Podział algorytmów bezstratnych
– algorytmy statyczne i semi-statyczne
• algorytmy dwuprzebiegowe
– przebieg 1: analiza stałego ciągu, budowa modelu
– przebieg 2: kodowanie
• problemy:
– dwuprzebiegowy
– wymaga transmisji i modelu i zakodowanego ciągu
– algorytm adaptacyjny
• algorytm jednoprzebiegowy, on-line
• aktualizacja modelu wykonywana kaŜdorazowo po
zakodowaniu danego symbolu
• problemy
– złoŜoność aktualizacji modelu (zasoby sprzętowe)
– Zero Frequency Problem
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
4
Podstawowe twierdzenie Shannona
o kodowaniu bezszumowym
Dla bezpamięciowego źródła S o entropii H(S) moŜliwe
jest przypisanie ciągom k symboli źródła, słów kodu
przedrostkowego tak, Ŝe spełnione jest
Lavg
1
H (S ) ≤
≤ H (S ) +
k
k
– W najlepszym przypadku moŜna uzyskać średnią długość kodu
(w przeliczeniu na pojedynczy symbol) równą entropii źródła
– optymalna długość słowa kodowego dla danego symbolu o
prawdopodobieństwie pi równa jest autoinformacji dla tego
symbolu (–log (pi))
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
5
Kod przedrostkowy
• Jak zbudować kod przedrostkowy:
– Znając rozkład prawdopodobieństwa P={p1, p2, …, pi}
– Znając optymalną długość słów kodowych.
MoŜna obliczyć optymalną długość słowa kodowego poprzez
policzenie autoinformacji
->
Ii= -log2pi
– Wiedząc, Ŝe aby kod był jednoznacznie dekodowalny musi
spełniać nierówność Krafta-MacMillana
n
− li
2
∑ ≤1
i =1
Jak wskazać słowa kodowe i przypisać je symbolom ??
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
6
Algorytm kodowania Shannona-Fano
Algorytm Shannona-Fano generuje kod przedrostkowy
dla Ŝądanego rozkładu prawdopodobieństwa symboli
alfabetu
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
7
Algorytm kodowania Shannona-Fano
1. Określenie prawdopodobieństwa wystąpienia wszystkich
symboli (waga symboli)
2. Sortowanie listy symboli według prawdopodobieństwa
3. Ustalenie posortowanej listy jako zbiór główny
4. Podział grupy symboli na dwie części o moŜliwie równej
sumie wadze symboli
5. Przyporządkowanie symbolom z jednej grupy binarne „0”,
zaś symbolom z drugiej grupy binarne „1”
6. Powtórz dla kaŜdej podgrupy od punktu 4, aŜ do uzyskania
podgrupy złoŜonej z jednego symbolu
7. Przypisz kolejnym symbolom z listy słowa kodowe,
składające się z bitów kolejno przyporządkowanym grupom,
do których trafiał symbol w kolejnych podziałach.
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
8
Algorytm kodowania Shannona-Fano
Przykład
Mamy kod:
abcafdadcecedabadbbeffbbfaeaeeebddddebdd
1234567890123456789012345678901234567890
1. Określenie prawdopodobieństwa wystąpienia wszystkich symboli
symbol
Ilość wystąpień
a
7
b
8
c
3
d
10
e
8
f
4
suma
40 znaków
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
9
Algorytm kodowania Shannona-Fano
2. Sortowanie listy symboli według prawdopodobieństwa
symbol
Ilość
wystąpień
d
10
b
8
e
8
a
7
f
4
c
3
W przypadku dwóch takich samych wag kolejność jest nieistotna
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
10
Algorytm kodowania Shannona-Fano
d
b
e
a
f
c
10
8
8
7
4
3
18
22
0
1
Zbiór główny
Pierwszy podział
10
8
8
14
0
1
0
1
Drugi podział
7
7
0
1
Trzeci podział
4
3
0
1
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
Czwarty podział
11
Algorytm kodowania Shannona-Fano
7. Przypisanie kolejnym symbolom z listy słów kodowych
d
b
e
a
f
c
10
8
8
7
4
3
18
22
0
1
10
8
8
14
0
1
0
1
7
7
0
1
4
3
0
1
Symbol
a
b
c
d
e
f
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
kod
110
01
1111
00
10
1110
12
Algorytm kodowania Shannona-Fano
korzeń
Binarne drzewo kodowe
0
0
d
1
1
e
0
1
b
0
Uwaga: MoŜe istnieć
wiele drzew kodowych
i wiele podziałów
1
a
liście
0
1
f
c
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
13
Algorytm kodowania Shannona-Fano
Przykład innego drzewa kodu.
0
0
d
1
1
0
1
e
0
b
1
0
1
a
f
c
Krótsze słowo kodowe, ale czy lepszy kod ???
O tym za chwilę, najpierw odczytajmy to co zakodowane….
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
14
Algorytm dekodowania Shannona-Fano
1. Pobierz ze zbioru danych zakodowanych wartości wag
poszczególnych symboli
2. Zbuduj drzewo binarne (toŜsame z tym uŜytym przy
kodowaniu)
3. Odczytaj symbole korzystając z algorytmu:
i. Ustaw korzeń drzewa jako aktualny węzeł
ii. Pobierz bit z wejścia. Jeśli zero idź w lewo,
jeśli jeden idź w prawo do syna aktualnego
węzła
iii. Jeśli aktualny węzeł to liść – odczytaj
0
przypisany mu symbol,
d
w przeciwnym razie kontynuuj (ii)
iv. Powtarzaj (i) aŜ do wyczerpania
symboli wejściowych
0
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
1
1
0
1
e
0
b
1
0
1
a
f
c
15
Określenie efektywności
Długość słowa
kodowego
(1 drzewo)
3
21
3
21
b
8
0,2
2,32
18,58
2
16
2
16
c
3
0,075
3,74
11,21
4
12
3
9
d
10
0,25
2,00
20,00
2
20
2
20
e
8
0,2
2,32
18,58
2
16
3
24
f
4
0,1
3,32
13,29
4
16
3
12
suma
40
101
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
Ilość bitów
99,25
Długość słowa
kodowego
(2 drzewo)
17,60
Ilość bitów
Inform. własna
I(ai)=-log2pi
[bit/symbol]
2,51
Ni*I(ai)
Prawdopodob.
pi
0,175
Ilość
wystąpień
Ni
7
Symbol
ai
a
102
16
Zalety i wady algorytmu Shannona-Fano
• Uzyskany kod jest zawsze nadmiarowy (101 bitów
niezbędnych do zakodowania 100 bitów informacji – 99,25).
Przyczyną jest fakt, Ŝe nie da się stworzyć słowa o niepełnej liczbie
bitów (wada wszystkich kodów)
• Wagi podgrup nie są równe. Nie jest rozpatrywane z ilu
elementów składa się podgrupa.
• MoŜe wystąpić kilka rodzajów podziału. Wymagane
przesłanie do dekodera większej liczby informacji.
• Prostota kodowania i dekodowania
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
17
Zastosowanie
Zastosowanie np:
– WinZIP
– CABarc (pliki .cab)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
18
Algorytm Huffmana
Algorytm Huffmana generuje kod przedrostkowy dla
Ŝądanego rozkładu prawdopodobieństwa symboli alfabetu
podobnie jak algorytm Shannona-Fano.
Kodowanie Huffmana pozwala otrzymać
optymalne drzewo binarne kodu symboli.
NajdłuŜsze słowo naleŜy do symbolu najrzadziej występującego.
Drzewo jest binarne i lokalnie pełne (na najgłębszym poziomie znajduje się 2
liście o najmniejszej wadze)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
19
Kodowanie Huffmana
1. Określ wagi wszystkich symboli alfabetu. Symbole wraz z
wagami przypisz liściom i oznacz je jako wolne wierzchołki.
Zapisz listę wierzchołków.
2. Sortuj listę wolnych wierzchołków w porządku nierosnącym
3. Weź dwa pierwsze wolne wierzchołki (najmniejsze wagi) i
połącz je tworząc większe poddrzewo. Wagę nowego
wierzchołka ustal jako sumę wag dzieci.
4. Usuń z listy wierzchołków dwa juŜ uŜyte i wstaw w ich
miejsce nowy wierzchołek rodzica.
5. Przypisz gałęziom słowa kodowe „0” i „1” (np. lewo, prawo)
6. Wróć do punktu 2, aŜ pozostanie jeden wierzchołek – korzeń
7. Odczytaj ze struktury drzewa słowa kodowe kolejnych liści
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
20
Kodowanie Huffmana
1. Określ wagi wszystkich symboli alfabetu. Symbole wraz z
wagami przypisz liściom i oznacz je jako wolne wierzchołki.
Zapisz listę wierzchołków.
a(7)
b(8)
c(3)
d(10)
e(8)
f(4)
2. Sortuj listę wolnych wierzchołków w porządku nierosnącym
c(3)
f(4)
a(7)
b(8)
e(8)
d(10)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
21
3. Weź dwa pierwsze wolne wierzchołki (najmniejsze wagi) i połącz je
tworząc większe poddrzewo. Wagę nowego wierzchołka ustal jako
sumę wag dzieci.
4. Usuń z listy wierzchołków dwa juŜ uŜyte i wstaw w ich miejsce nowy
wierzchołek rodzica.
5. Przypisz gałęziom słowa kodowe „0” i „1”
7
a(7)
0
1
c(3)
f(4)
a(7)
b(8)
b(8)
e(8)
e(8)
d(10)
d(10)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
22
2. Sortuj listę wolnych wierzchołków w porządku nierosnącym
7
c(3)
a(7)
b(8)
e(8)
d(10)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
23
Kodowanie Huffmana
3. Weź dwa pierwsze wolne wierzchołki (najmniejsze wagi) i połącz je
tworząc większe poddrzewo. Wagę nowego wierzchołka ustal jako
sumę wag dzieci.
14
7
c(3)
a(7)
b(8)
e(8)
d(10)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
24
Kodowanie Huffmana
b(8)
e(8)
d(10)
14
7
c(3)
a(7)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
25
Kodowanie Huffmana
16
b(8)
e(8)
d(10)
14
7
c(3)
a(7)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
26
Kodowanie Huffmana
d(10)
14
7
c(3)
16
a(7)
b(8)
e(8)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
27
Kodowanie Huffmana
24
d(10)
14
7
c(3)
16
a(7)
b(8)
e(8)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
28
Kodowanie Huffmana
16
b(8)
24
e(8)
d(10)
14
7
c(3)
a(7)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
29
Kodowanie Huffmana
40
Drzewo Huffmana
0
1
16
24
0
1
b(8)
e(8)
0
1
d(10)
14
0
1
7
a(7)
0
1
c(3)
f(4)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
30
Dekodowanie algorytmu Huffmana
Proces dekodowania jest analogiczny jak przy dekodowaniu
algorytmu Shannona-Fano, z tym Ŝe drzewo budowane jest
według zasady Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
31
Porównanie algorytmów
Shannona-Fano
Huffmana
• budowanie drzewa kodowego
od góry do dołu,
• budowanie drzewa kodowego
od dołu do góry
• prostota
• prostota
• efektywność zawsze większa
niŜ S-F
Wada: Oba algorytmy moŜna zastąpić algorytmem kodowania
serii RLE w przypadku, gdy symbole powtarzają się po
sobie (dotyczy wszelkich algorytmów statycznych,
które są dedykowane do modeli źródeł bez pamięci)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
32
Koder adaptacyjny
• Podstawową zaletą kodera statycznego Huffmana jest
konstruowanie zmiennej długości słów kodowych, efektywnie
odzwierciedlających zróŜnicowane wagi symboli. Im większe
zróŜnicowanie tym lepsza efektywność kodowania
• W przypadku, gdy wagi nie odbiegają od siebie, to słowa
kodowe będą tej samej lub podobnej długości (róŜnica o 1 bit)
np. 8 symboli reprezentowanych jako kod dwójkowy (3bitowy) o podobnych
wagach będzie po zakodowaniu posiadały słowa równieŜ 3 bitowe.
Dodatkowo naleŜy przesłać informację o wagach, aby zbudować drzewo do
dekodowania.
• Korzystnie jest budować estymaty lokalnej statystyki danych i
wykorzystywać tą informację do zmiany struktury drzewa
-> adaptować drzewo
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
33
Adaptacyjna modyfikacja drzewa Huffmana
1. Przyjąć drzewo a priori, przy czym:
i.
Wierzchołki są uszeregowane w porządku niemalejących wag
na kolejnych poziomach, licząc od dołu drzewa do korzenia,
zaś na kaŜdym poziomie – od lewej do prawej
ii. KaŜdemu wierzchołkowi przypisywany jest numer porządkowy
v wskazujący pozycję na uszeregowanej liście
2. Modyfikacja drzewa po wystąpieniu symbolu s:
i.
Ustal numer v liścia oraz jego wagę wv. Jeśli nie ma dodaj nowy
liść dodając go jako brata do tego o najmniejszej wadze.
Przenumeruj wierzchołki
ii. zwiększ wagę wierzchołka v o 1
iii. Jeśli na nowa waga wierzchołka jest większa od istniejących na
liście przenieś wierzchołek wraz z podrzewem
iv. Podstaw za wierzchołek v wierzchołek rodzica i skocz do 2ii
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
34
Adaptacyjna modyfikacja drzewa Huffmana
40
11
16
24
9
b(8)
5
e(8)
6
10
d(10)
14
7
8
7
a(7)
3
c(3)
4
f(4)
1
2
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
35
Adaptacyjna modyfikacja drzewa Huffmana
40
Przychodzi symbol: C
i jest kodowany jako 1100
11
16
24
9
b(8)
5
e(8)
6
10
d(10)
14
7
8
7
a(7)
3
c(3)
4
f(4)
1
2
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
36
Adaptacyjna modyfikacja drzewa Huffmana
41
Przychodzi symbol: C
i jest kodowany jako 1110
11
16
25
9
b(8)
5
e(8)
6
10
d(10)
15
7
8
a(7)
8
3
4
c(4)
f(4)
1
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
2
37
Adaptacyjna modyfikacja drzewa Huffmana
Przychodzi symbol: C
i jest kodowany jako 011
42
11
17
25
9
e(8)
10
d(10)
7
9
5
6
f(4)
c(5)
1
15
8
a(7)
2
b(8)
3
4
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
38
Adaptacyjna modyfikacja drzewa Huffmana
Przychodzi symbol: C
i jest kodowany jako 011
43
11
18
25
9
e(8)
10
d(10)
7
10
5
6
f(4)
c(6)
1
15
8
a(7)
2
b(8)
3
4
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
39
Adaptacyjna modyfikacja drzewa Huffmana
Przychodzi symbol: C
i jest kodowany jako 101
44
11
18
26
10
9
e(8)
11
d(10)
5
6
15
7
f(4)
8
c(7)
1
a(7)
2
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
b(8)
3
4
40
• Przedstawiony algorytm został wynaleziony niezaleŜnie przez
Fallera i Gallagera
• ... następnie udoskonalony przez Cormacka i Horspoola oraz
niezaleŜnie przez Knutha
• ... następnie udoskonalony przez Vittera
• MoŜna załoŜyć, Ŝe na początku nie ma Ŝadnego drzewa, a
kolejne symbole dopiero zaczynają je tworzyć.
• Spotykane jest załoŜenie, Ŝe na początku są dwa symbole
(„nowy” oraz EndOfFile)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
41
Kody Golomba
Kody Golomba to parametryczna rodzina kodów
przeznaczona do kodowania nieujemnych liczb
całkowitych, nieskończona (parametrem kodu jest
całkowite m, m > 0)
– zawiera kody optymalne dla wykładniczego rozkładu
prawdopodobieństwa symboli
– słowa kodowe łatwe w generacji i dekodowaniu
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
42
Kod Golomba
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
43
Kod Golomba
Tworzenie słowa kodowego
– NaleŜy wybrać najpierw parametr m, np.: 4
– kodujemy liczbę x kodem Golomba z parametrem m=4
np.
7 kodem Golomba z parametrem 4
prefiks słowa:
 x/m 
zakodowane unarnie (kod α Eliasa)
 7/4  = 1
10
sufiks:
x mod m
zakodowane zmodyfikowanym kodem
binarnym dla przedziału [0, m – 1]
7 mod 4 = 3
11
10 11
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
44
Kod Golomba
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
45
Tworzenie kodów Golomba
Za pomocą drzewa łatwo stworzyć kod Golomba
0
10
00
010
110
1110
011 100
1010
1011 1100
11010
m =1
11011
m =3
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
46
Kod Golomba
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
47
Kod Golomba-Rice’a
• Jak zmniejszyć prefiks?
• ZałóŜmy, Ŝe zamiast kodować parametr m zakodujemy k, przy czym
m = 2k
• Jest to kod Golomba-Rice’a
– kodujemy liczbę x kodem Golomba-Rice’a z parametrem k
prefiks słowa:
 x/ 2 k 
zakodowane unarnie (kod α Eliasa)
zauwaŜmy, Ŝe x >> k
sufiks:
x mod 2 k
zakodowane zmodyfikowanym kodem
binarnym dla przedziału [0, m – 1]
k najmniej znaczących bitów x
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
48
Podsumowanie
• Kodowanie Huffmana stanowi kanon kompresji
• Wykorzystywane w:
- kodowaniu faksów
- standardzie kompresji JPEG, MPEG-1, MPEG-2
• Kodowanie Golomba i Golomba-Rice’a są szczególnymi
przypadkami kodowania Huffmana
• Kodowanie Golomba i Golomba-Rice’a są stosowane w
bezstratnej i prawie bezstratnej kompresji obrazów JPEG-LS
• MoŜna wybierać dowolny kod,
• MoŜna kody łączyć, np. kod Huffmana wraz z RLE (JPEG)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
49
Dziękuję za uwagę
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006
50

Podobne dokumenty