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. Określ wagi (il wystąpień) poszczególnych symboli 2. Posortuj listę symboli w nierosnącym porządku wag, i ustal ją jako grupę początkową 3. Podziel grupę symboli na dwie części o możliwie równej sumie wag z zachowaniem porządku listy 4. Przyporządkuj symbolom grupy z większą wagą 0, a symbolom z mniejszą wagą 1 5. 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 1 0 1 0 1 b a d 0 1 c e kompresja danych 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. Określ wagi dla symboli, tworząc zbiór wolnych wierzchołków 2. Sortuj listę wierzchołków wolnych nierosnąco 3. 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 4. Powtarzaj krok 3, aż zostanie wolny korzeń drzewa 5. Odczytaj ze struktury drzewa słowa kodowe liści kompresja danych 12
Przykład drzewa Huffmana porównanie 0 1 0 1 12 b 19 0 1 0 1 11 0 1 8 b a d 0 1 0 1 6 5 4 4 a d c e c 0 1 e Drzewo Huffmana 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 36 65 88 18 29 48 40 8 15 25 20 4 7 12 23 10 2 2 10 3 4 8 14 6 6 13 12 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 a r o c ż j W S P kompresja danych 16
Kod Huffmana dla badanego tekstu Symbol L. wyst. Kod Symbol L. wyst. Kod a 6 10100 p 7 0110 c 3 110001 r 6 10101 d 1 0000000 s 7 0111 e 18 001 ś 1 0000011 ę 4 01010 t 2 010010 g 2 010001 u 3 100000 h 1 0000001 w 1 010000 i 7 10011 y 3 100001 j 10 1101 z 2 010011 k 4 01011 ż 5 11001 l 1 0000010, 3 100010 ł 4 00001. 3 100011 m 5 00010 2 110000 n 5 00011 <spacja> 20 111 o 11 1011 <nw> 6 10010 kompresja danych 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 B n dla n-elementowego alfabetu As={a 0,...,a n-1 } pierwszym r symbolom przypisywane są słowa k=[log 2 n] bitowe postaci B n (a i )=B k (i) a pozostałym słowa o długości (k+1) bitów postaci B n (a i )=B k+1 (r+i), r=2 k+1 n Dla źródeł o alfabecie zawierającym n=2 i, i=1,2,... symboli B n =B i a r=0, kod staje się kodem o stałej długości kompresja danych 21
Przypomnienie: kod unarny Symbol Kod 0 0 1 10 2 110 3 1110 4 11110 5 111110 6 1111110 7 11111110 8 111111110 9 1111111110 10 11111111110 11 111111111110 12 1111111111110 13 11111111111110 14 111111111111110 15 1111111111111110 Symbol Kod 0 1 1 01 2 001 3 0001 4 00001 5 000001 6 0000001 7 00000001 8 000000001 9 0000000001 10 00000000001 11 000000000001 12 0000000000001 13 00000000000001 14 000000000000001 15 0000000000000001 kompresja danych 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,...,0 i 1,...,0 m-1 1,0 m } (ciąg prawie jak przy kodowaniu unarnym), gdzie 0 i oznacza ciąg 0 o długości i. Kod EGm przypisuje rozszerzonemu symbolowi a m = 0 m wartość ζ m = 0, podczas gdy symbole a i =0 i 1 są kodowane za pomocą przedrostka 1 z dołączoną reprezentacją i w kodzie dwójkowym prawie stałej wartości B n. Warto zwrócić uwagę, że kod jest korzystny w przypadku często pojawiających się wartości 0 m 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 a 0 1 1000 1 1000 a 1 01 1001 01 1001 a 2 001 1010 001 1010 a 3 0001 1011 0001 1011 a 4 00001 1100 00001 1100 a 5 000001 1101 000001 1101 a 6 0000001 1110 0000001 1110 a 7 0000001 1111 0000001 11110 a 8 0000000 0 00000001 11111 a 9 -- -- 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 A S ={(0,1,...,m-1),(m,m+1,...,2m-1),...} lub A S ( = { π m) 0 (, π m) 1,...} 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 p i+1 = ρ p i ) 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 10 0 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 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: m log(1 + ρ) log ρ = 1 kompresja danych 30
Kod Rice a Szczególny przypadek kodu Golomba, dla m=2 k nazwany jest kodem Rice a R k 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 R 2 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 R 2 (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