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