Post on 19-Feb-2021
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 1
Przetwarzanie i transmisja danych multimedialnych
Wykład 3
Kodowanie Shannona–Fano i Huffmana
Przemysław Sękalski
sekalski@dmcs.pl
Politechnika ŁódzkaKatedra Mikroelektroniki i Technik Informatycznych
DMCS
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 2
Zawartość wykładu
1. Wprowadzenie do kompresji i transmisji danych 2. Podstawy kompresji3. Kodowanie Shannona–Fano i Huffmana4. Kodowanie arytmetyczne5. Algorytmy słownikowe6. Algorytm predykcji przez częściowe dopasowanie (PPM)7. Transformata Burrowsa–Wheelera (BWT) 8. Wybrane algorytmy specjalizowane9. Dynamiczny koder Markowa (DMC) i algorytm kontekstowych
drzew waŜonych (CTW) 10.Bezstratna kompresja obrazów11.Stratna kompresja obrazów12.Stratna kompresja dźwięku13.Kompresja wideo
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 3
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 4
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 5
Podstawowe twierdzenie Shannonao 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
– 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))
1( ) ( )avg
LH S H S
k k≤ ≤ +
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 6
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
1
2 1in
l
i
−
=
≤∑
Jak wskazać słowa kodowe i przypisać je symbolom ??
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 7
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 8
Algorytm kodowania Shannona-Fano
1. Określenie prawdopodobieństwa wystąpienia wszystkich symboli (waga symboli)
2. Sortowanie listy symboli według prawdopodobieństwa3. Ustalenie posortowanej listy jako zbiór główny4. Podział grupy symboli na dwie części o moŜliwie równej
sumie wadze symboli5. 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 symbolu7. 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 9
Algorytm kodowania Shannona-Fano
4f
40 znakówsuma
8e
10d
3c
8b
7a
Ilość wystąpieńsymbol
PrzykładMamy kod:
abcafdadcecedabadbbeffbbfaeaeeebddddebdd1234567890123456789012345678901234567890
1. Określenie prawdopodobie ństwa wyst ąpienia wszystkich symboli
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 10
Algorytm kodowania Shannona-Fano
3c
4f
7a
8e
8b
10d
Ilośćwystąpień
symbol
2. Sortowanie listy symboli według prawdopodobie ństwa
W przypadku dwóch takich samych wag kolejność jest nieistotna
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 11
8
e
347810
cfabd
2218
10
148
10
810
10
0
7
1
7
10
34
Algorytm kodowania Shannona-Fano
Zbiór główny
Pierwszy podział
Drugi podział
Trzeci podział
Czwarty podział
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 12
Algorytm kodowania Shannona-Fano
Symbol koda 110b 01c 1111d 00e 10f 1110
8
e
347810
cfabd
8
e
347810
cfabd
2218
10
2218
10
148
10
148
10
810
10
810
10
0
7
0
7
1
7
1
7
10
34
10
34
7. Przypisanie kolejnym symbolom z listy słów kodowy ch
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 13
Algorytm kodowania Shannona-Fano
cf
a
bd e
0 1
0 1 0 1
0 1
0 1
korzeń
liście
Binarne drzewo kodowe
Uwaga: MoŜe istniećwiele drzew kodowych i wiele podziałów
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 14
Algorytm kodowania Shannona-Fano
cfab
d e
0 1
0 1 0 1
0 10 1
Przykład innego drzewa kodu.
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 15
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 przypisany mu symbol, w przeciwnym razie kontynuuj (ii)
iv. Powtarzaj (i) aŜ do wyczerpania symboli wejściowych cfab
d e
0 1
0 1 0 1
0 10 1
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 16
Określenie efektywności
10210199,2540suma
12316413,293,320,14f
24316218,582,320,28e
20220220,002,000,2510d
9312411,213,740,0753c
16216218,582,320,28b
21321317,602,510,1757a
Ilość
bitów
Długo
ść
słowa
kodowego
(2 drzewo)
Ilość
bitów
Długo
ść
słowa
kodowego
(1 drzewo)
Ni *I(a
i )
Inform. w
łasnaI(a
i )=-log2 p
i[bit/sym
bol]
Praw
dopodob. p
i
Ilość
wystąpie
ń
Ni
Sym
bola
i
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 17
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 18
Zastosowanie
Zastosowanie np:
– WinZIP
– CABarc (pliki .cab)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 19
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 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.
2. Sortuj listę wolnych wierzchołków w porządku nierosnącym3. 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 21
a(7) b(8) c(3) d(10) e(8) f(4)
a(7) b(8)c(3) d(10)e(8)f(4)
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
Kodowanie Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 22
a(7) b(8)c(3) d(10)e(8)f(4)
7
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.
0 1
5. Przypisz gał ęziom słowa kodowe „0” i „1”
4. Usuń z listy wierzchołków dwa ju Ŝ uŜyte i wstaw w ich miejsce nowy wierzchołek rodzica.
a(7) b(8) d(10)e(8)
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 23
a(7) b(8)
c(3)
d(10)e(8)
f(4)
7
2. Sortuj list ę wolnych wierzchołków w porz ądku nierosn ącym
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 24
a(7) b(8)
c(3)
d(10)e(8)
f(4)
7
14
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.
Kodowanie Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 25
a(7)
b(8)
c(3)
d(10)e(8)
f(4)
7
14
Kodowanie Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 26
a(7)
b(8)
c(3)
d(10)e(8)
f(4)
7
14
16
Kodowanie Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 27
a(7) b(8)
c(3)
d(10)
e(8)
f(4)
7
14 16
Kodowanie Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 28
a(7) b(8)
c(3)
d(10)
e(8)
f(4)
7
14 16
24
Kodowanie Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 29
a(7)
b(8)
c(3)
d(10)e(8)
f(4)
7
14
16 24
Kodowanie Huffmana
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 30
a(7)
b(8)
c(3)
d(10)e(8)
f(4)
7
14
16 24
40
Kodowanie Huffmana
Drzewo Huffmana
0 1
0 1
0 10 1
0 1
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 31
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 32
Porównanie algorytmów
Shannona-Fano
• budowanie drzewa kodowego od góry do dołu,
• prostota
Huffmana
• budowanie drzewa kodowego od dołu do góry
• 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 33
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 34
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 1iii. Jeśli na nowa waga wierzchołka jest większa od istniejących na
liście przenieś wierzchołek wraz z podrzewemiv. 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 35
Adaptacyjna modyfikacja drzewa Huffmana
a(7)
b(8)
c(3)
d(10)e(8)
f(4)
7
14
16 24
40
1 2
3 4
5 6 7 8
9 10
11
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 36
Adaptacyjna modyfikacja drzewa Huffmana
a(7)
b(8)
c(3)
d(10)e(8)
f(4)
7
14
16 24
40
1 2
3 4
5 6 7 8
9 10
11Przychodzi symbol: Ci jest kodowany jako 1100
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 37
Adaptacyjna modyfikacja drzewa Huffmana
a(7)
b(8)
c(4)
d(10)e(8)
f(4)
8
15
16 25
41
1 2
43
5 6 7 8
9 10
11Przychodzi symbol: Ci jest kodowany jako 1110
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 38
Adaptacyjna modyfikacja drzewa Huffmana
Przychodzi symbol: Ci jest kodowany jako 011
a(7) b(8)c(5)
d(10)e(8)
f(4)
9 15
17 25
42
1 2 43
5 6 7 8
9 10
11
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 39
Adaptacyjna modyfikacja drzewa Huffmana
Przychodzi symbol: Ci jest kodowany jako 011
a(7) b(8)c(6)
d(10)e(8)
f(4)
10 15
18 25
43
1 2 43
5 6 7 8
9 10
11
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 40
Adaptacyjna modyfikacja drzewa Huffmana
Przychodzi symbol: Ci jest kodowany jako 101
a(7) b(8)c(7)
d(10)e(8)
f(4)
11 15
18 26
44
1 2 43
5 6 7 8
9 10
11
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 41
• 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 42
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 43
Kod Golomba
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 44
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 kodembinarnym 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 45
Kod Golomba
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 46
Tworzenie kodów Golomba
0
10
110
1110
00
010
11010
1010
011 100
1011 1100
11011
m =1 m =3
Za pomocą drzewa łatwo stworzyć kod Golomba
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 47
Kod Golomba
Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych , wykład 3 , 2006 48
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 kodembinarnym 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 49
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 50
Dziękuję za uwagę