Przetwarzanie i transmisja danych multimedialnych Wykład 3 Kodowanie Shannona Fano i Huffmana Przemysław Sękalski sekalski@dmcs.pl 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. Wprowadzenie do kompresji i transmisji danych 2. Podstawy kompresji 3. Kodowanie Shannona Fano i Huffmana 4. Kodowanie arytmetyczne 5. Algorytmy słownikowe 6. Algorytm predykcji przez częściowe dopasowanie (PPM) 7. Transformata Burrowsa Wheelera (BWT) 8. Wybrane algorytmy specjalizowane 9. 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 L avg H ( S) H ( S) + 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 p i równa jest autoinformacji dla tego symbolu ( log (p i )) 1 k 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={p 1, p 2,, p i } Znając optymalną długość słów kodowych. MoŜna obliczyć optymalną długość słowa kodowego poprzez policzenie autoinformacji -> I i = -log 2 p i Wiedząc, Ŝe aby kod był jednoznacznie dekodowalny musi spełniać nierówność Krafta-MacMillana n i= 1 li 2 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 a b c d e f suma Ilość wystąpień 7 8 3 10 8 4 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 d b e a f c Ilość wystąpień 10 8 8 7 4 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 10 b 8 e 8 a 7 f 4 c 3 Zbiór główny 18 0 22 1 Pierwszy podział 10 0 8 1 8 0 14 1 Drugi podział 7 0 7 1 Trzeci podział 4 0 3 1 Czwarty podział Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 11
Algorytm kodowania Shannona-Fano 7. Przypisanie kolejnym symbolom z listy słów kodowych d b e a f c Symbol kod 10 18 0 8 8 7 22 1 4 3 a 110 b 01 10 0 8 1 8 0 7 0 14 1 7 1 c 1111 d 00 e 10 4 0 3 1 f 1110 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 12
Algorytm kodowania Shannona-Fano Binarne drzewo kodowe 0 1 korzeń 0 1 0 1 d e b 0 1 a 0 1 Uwaga: MoŜe istnieć wiele drzew kodowych i wiele podziałów liście 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 1 0 1 0 1 d e 0 1 0 1 b 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 przypisany mu symbol, w przeciwnym razie kontynuuj (ii) iv. Powtarzaj (i) aŝ do wyczerpania symboli wejściowych d 0 1 0 1 0 1 e 0 1 b a 0 1 f c Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 15
Określenie efektywności Ilość bitów Długość słowa kodowego (2 drzewo) Ilość bitów Długość słowa kodowego (1 drzewo) N i *I(a i ) Inform. własna I(a i )=-log 2 p i [bit/symbol] Prawdopodob. p i Ilość wystąpień N i Symbol a i 21 3 21 3 17,60 2,51 0,175 7 a 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 99,25 101 102 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 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 0 1 a(7) b(8) e(8) d(10) 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 22
2. Sortuj listę wolnych wierzchołków w porządku nierosnącym 7 a(7) b(8) e(8) d(10) c(3) 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 a(7) b(8) e(8) d(10) c(3) 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 a(7) c(3) 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 a(7) c(3) f(4) Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 26
Kodowanie Huffmana d(10) 14 16 7 a(7) b(8) e(8) c(3) f(4) Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 27
Kodowanie Huffmana 24 d(10) 14 16 7 a(7) b(8) e(8) c(3) f(4) Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 28
Kodowanie Huffmana 16 24 b(8) e(8) d(10) 14 7 a(7) c(3) f(4) Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 29
Kodowanie Huffmana Drzewo Huffmana 40 0 1 16 24 0 1 0 1 b(8) e(8) d(10) 14 0 1 7 0 1 a(7) 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 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 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ę w v. 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 10 b(8) e(8) d(10) 14 5 6 7 8 7 a(7) 3 4 c(3) f(4) 1 2 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 35
Adaptacyjna modyfikacja drzewa Huffmana Przychodzi symbol: C i jest kodowany jako 1100 40 11 16 24 9 10 b(8) e(8) d(10) 14 5 6 7 8 7 a(7) 3 4 c(3) f(4) 1 2 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 36
Adaptacyjna modyfikacja drzewa Huffmana Przychodzi symbol: C i jest kodowany jako 1110 41 11 16 25 9 10 b(8) e(8) d(10) 15 5 6 7 8 a(7) 3 8 4 c(4) f(4) 1 2 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 37
Adaptacyjna modyfikacja drzewa Huffmana Przychodzi symbol: C i jest kodowany jako 011 42 11 17 25 9 10 e(8) 9 d(10) 15 5 6 7 8 f(4) c(5) a(7) b(8) 1 2 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 10 e(8) 10 d(10) 15 5 6 7 8 f(4) c(6) a(7) b(8) 1 2 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 9 10 e(8) d(10) 11 15 5 6 7 8 f(4) c(7) a(7) b(8) 1 2 3 4 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 3, 2006 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: sufiks: x/m zakodowane unarnie (kod α Eliasa) 7/4 = 1 10 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 110 010 011 100 1110 1010 1011 1100 m =1 m =3 11010 11011 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 = 2 k Jest to kod Golomba-Rice a kodujemy liczbę x kodem Golomba-Rice a z parametrem k prefiks słowa: sufiks: x/ 2 k zakodowane unarnie (kod α Eliasa) zauwaŝmy, Ŝe x >> k 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