Przetwarzanie i transmisja danych multimedialnych Wykład 5 Kodowanie słownikowe 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 5, 2006 1
Plan wykładu Dlaczego warto stosować kodowanie słownikowe? Przykłady róŝnych algorytmów kodowania słownikowego LZ77 LZSS LZ78 LZW Zastosowanie kodowania słownikowego Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 2
Wprowadzenie Kodowanie Huffmana polega na zamianie symbolu s przez przypisanie mu krótszego (z reguły) słowa kodowego k Kodowanie słownikowe wykorzystuje inną zaleŝność: Ciąg symboli o zmiennej długości zastępowany jest indeksem o prawie stałej długości W szczególności budowany jest słownik. Ciąg symboli kodowany jest za pomocą indeksu wskazującego pozycję identycznego ciągu symboli w słowniku. Efektywność mierzona jest jako bitowa długość frazy podzielona przez bitową długość indeksu. Efektywność zaleŝy od słownika. Krótkie indeksy mały słownik, długie frazy lepsza efektywność, nowe frazy konieczność definicji Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 3
Słownik NajwaŜniejszą rzeczą w kodowaniu słownikowym jest odpowiedni dobór słownika!!!! Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 4
Koncepcje słowników Słownik statyczny Słownik zdefiniowany odgórnie, np.: słownik języka polskiego PWN rak konieczności przesyłania słownika pomiędzy koderem a dekoderem Słownik quasi statyczny Słownik zbudowany na podstawie analizy danych, konieczne jest przesłanie słownika pomiędzy koderem a dekoderem Słownik dynamiczny Słownik tworzony na podstawie dekodowanych danych, adaptowany po kaŝdym symbolu, nie ma konieczności przesyłania słownika, wymaga większej mocy obliczeniowej Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 5
LZ77 Zaproponowany przez Lempela i Ziva w 1977 roku, Wykorzystuje dynamiczny słownik, Słownikiem jest okno przesuwne o ustalonej długości, Wykorzystuje model przyczynowy (słownik zaleŝy od ostatnio zakodowanych danych) Rozmiar bufora frazy jest ograniczony Indeks jest złoŝony z: Wskaźnika połoŝenia frazy w słowniku Długości frazy Symbolu następującego po kodowanym łańcuchu Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 6
LZ77 Algorytm LZ77: 1. Ustaw okno na początku danych źródłowych 2. Wyszukaj najdłuŝszy łańcuch danych w buforze, który ma dokładny odpowiednik w słowniku 3. Utwórz słowo kodowe (indeks): (właściwy indeks, długość frazy, następny symbol) 4. Przesuń okno o długość frazy + 1 symboli 5. Powtarzaj od punktu 2, aŝ do zakodowania wszystkich symboli Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 7
Przykład kodowania LZ77 SŁWNIK UFR 123456789012345678901234567890121234567890123456 A_SIĘ_USPKJĘ PEŁNE_STRACHU_CZY_MJE_PEŁNE_GRZY_MYŚLI_M Indeks (9, 7, G ) 123456789012345678901234567890121234567890123456 PKJĘ PEŁNE_STRACHU_CZY_MJE_PEŁNE_GRZY_MYŚLI_MJE_PEŁNE Indeks (10, 1, ) 123456789012345678901234567890121234567890123456 KJĘ PEŁNE_STRACHU_CZY_MJE_PEŁNE_GRZY_MYŚLI_MJE_PEŁNE_T Indeks (16, 4, Y ) Długość indeksu: 5 bitów wskaźnik właściwy, 5 bitów długość frazy, 8 bitów symbol 18 bitów / frazę Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 8
Wady LZ77 graniczona długość kodowanego łańcucha ZłoŜony indeks, szczególnie istotne gdy pojawia się nowy symbol, nie mający odpowiednika w słowniku Indeks nieznanego słowa ma postać (0,0, symbol ), okno przesuwane jest o 1 symbol do przodu Uwzględnienie tylko najbliŝszego kontekstu (ograniczonego przez okno słownika), Proste zwiększanie słownika i bufora nie daje zwiększenia efektywności tylko zwiększa nakłady obliczeniowe, np.: słownik 4096 pozycji, bufor 32 symbole, indeks zajmuje 25 bitów (12, 5, 8). W przypadku frazy 1 elementowej potrzebne jest 25 bitów do opisania 2 symboli (16 bitów) (ekspansja) W przypadku nowego słowa potrzebne jest 25 bitów zamiast 8 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 9
Modyfikacja LZSS Wykorzystuje algorytm LZ77 wprowadzając modyfikacje: 1. Słownik jako drzewo binarne (kolejne frazy umieszczone są w węzłach drzewa) PKJĘ PEŁNE_S KJĘ PEŁNE_ST KJĘ PEŁNE_STR JĘ PEŁNE_STRA 2. Dwa sposoby kodowania sekwencji danych: Frazy krótkie i pojedyncze symbole przepisanie na wyjście Frazy długie indeks właściwy oraz długość frazy Wprowadzony dodatkowy bit do rozróŝnienia sposobu kodowania. it poprzedza kaŝde słowo kodowe! RozróŜnienie między frazą krótką a długą zaleŝy od zastosowania (np. 3 symbole) Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 10
Modyfikacja LZFG Długi łańcuch tworzą juŝ 2 symbole Długość frazy zapisywana jest z wykorzystaniem kodów unarnych Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 11
LZ78 Własności: Słownik nieograniczony, zewnętrzny, dynamiczny Słownik pusty po inicjacji (NULL na pierwszej pozycji) Indeks moŝe rosnąć nie ma stałego rozmiaru Wpisywane są coraz to dłuŝsze frazy Po zakodowaniu łańcucha wprowadzany jest do słownika pod nowym indeksem (fraza + następny symbol) Długość frazy nie jest limitowana Indeks: (wskaźnik właściwy, następny symbol) MoŜliwość zbytniego rozrastania słownika (konieczne jest jego ograniczanie aby poprawić efektywność) Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 12
LZ78 Algorytm: 1. Inicjacja słownika. Pierwsza pozycja NULL. (później ten indeks wykorzystywany jest do wprowadzania nowego symbolu) 2. Przeszukaj aktualny słownik i ustal najdłuŝszy łańcuch z kolejno czytanych symboli zgodny ze słownikiem 3. Utwórz słowo kodowe najdłuŝszego łańcucha: indeks + kolejny symbol 4. Dopisz nową frazę do słownika (z pkt.3) 5. Powtarzaj od punktu 2, aŝ do zakodowania wszystkich symboli na wejściu. Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 13
Przykład Zakodujmy ciąg: AS_EK_CI i Sekwencja wejściowa Sekwencja wyjściowa Słownik Indeks Symbol Indeks fraza 0 0 NULL 1 0 1 2 0 2 3 A 1 A 3 A 4 S 0 S 4 S 5 _ 0 _ 5 _ 6 1 6 7 E 1 E 7 E 8 K 0 K 8 K 9 _ 5 9 _ 10. 2 10. 11 C 0 C 11 C 12 I 0 I 12 I 13 2 EF Źródło: A. Przelaskowski Kompresja danych Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 14
LZ78 Wady Początkowo słownik jest mało efektywny (pusty) W przykładzie wymagane jest przekazanie 13 indeksów oraz 12 wpisów do słownika = 25 bajtów (przy załoŝeniu 8 bitów na indeks), a kodowane jest 18 bajtów Indeks rośnie wraz ze słownikiem (ale wykorzystany jest tylko w części), Początkowa nieefektywność słownika jest cechą wspólną wszystkich metod adaptacyjnych Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 15
Struktura słownika LZ78 0 Null 1 2 4 S 5 _ 8 K 11 C 12 I 3 A 6 7 E 10 9 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 16
Modyfikacja LZ78 LZW Wstępne zapełnienie słownika wszystkimi symbolami z alfabetu MoŜliwość skrócenia indeksu tylko indeks właściwy ardzo efektywny w przypadku krótkich sekwencji źródłowych LZW jest analogicznym usprawnieniem LZ78 tak jak LZSS jest usprawnieniem dla LZ77 Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 17
Kodowanie LZW i Sekwencja wejściowa Sekwencja wyjściowa Pamięć Indeks Słownik fraza 0 0255 Wszystkie symbole z alfabetu źródła 1 INDEKS 256 2 INDEKS 257 3 4 5 6 7 8 9 10 11 12 13 14 15 A S _ E K _ C I INDEKS INDEKS A INDEKS S INDEKS _ 256 INDEKS INDEKS E INDEKS K 261 257 INDEKS C INDEKS I INDEKS A S _ E K _ C I 258 259 260 261 262 263 264 265 266 267 268 269 A AS S E EK K C CI I Źródło: A. Przelaskowski Kompresja danych Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 18
Dekodowanie LZW i Indeksy wejściowe Poprzedni indeks wejściowy Sekwencja wyjściowa Pierwszy symbol Indeks Słownik fraza 0 0255 Wszystkie symbole z alfabetu źródła 1 INDEKS 2 3 4 5 6 7 8 9 10 11 12 13 14 15 INDEKS INDEKS INDEKS A INDEKS S INDEKS _ 256 INDEKS INDEKS E INDEKS K 261 257 INDEKS C INDEKS I INDEKS INDEKS INDEKS INDEKS INDEKS A INDEKS S INDEKS _ 256 INDEKS INDEKS E INDEKS K 261 257 INDEKS C INDEKS I A S _ E K _ C I A S _ E K _ C I 256 257 258 259 260 261 262 263 264 265 266 267 268 269. A AS S E EK K C CI I Źródło: A. Przelaskowski Kompresja danych Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 19
Wykorzystanie PNG, MNG LZ77 LHA (LHarc 88), zip, gzip, 7zip LZSS + kodowanie Huffmana ARJ LZ77 + kodowanie Huffmana Deflate (ZLI), RAR LZW GIF (opatentowany!) LZW + kodowanie Huffmana Compress, ARC, PKArc, WinZip oraz inne Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 20
Własności cd. Kodowanie słownikowe jest silnie niesymetryczne kodowanie zajmuje duŝo więcej czasu niŝ dekodowanie (nawet 10:1 dla RAR) Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 21
Porównanie efektywności Źródło: A. Przelaskowski Kompresja danych Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 22
Dziękuję za uwagę Przemysław Sękalski, Przetwarzanie i transmisja danych multimedialnych, wykład 5, 2006 23