Algorytmy kodowania słownikowego - Instytut...

25
Algorytmy kodowania slownikowego 1. Kodowanie ze slownikiem statycznym 2. Kodowanie ze slownikiem dynamicznym (LZ77, LZ78, LZSS, LZW) 3. Zastosowania

Transcript of Algorytmy kodowania słownikowego - Instytut...

Algorytmy kodowania słownikowego

1. Kodowanie ze słownikiem statycznym2. Kodowanie ze słownikiem dynamicznym

(LZ77, LZ78, LZSS, LZW)3. Zastosowania

Algorytmy entropijne i słownikowe

� Do tej pory – algorytmy entropijne� U�ywaj� modeli probabilistycznych do optymalnego zakodowanie

pojedynczych symboli� Kody poszczególnych symboli ró�nej długo�ci – dobrane tak, by w �redniej uzyska� kompresj�

� Nie bior� pod uwag� korelacji pomi�dzy symbolami – to mo�e by� istotne �ródło redundancji

� Algorytmy słownikowe� Nie koduj� pojedynczych symboli kodami o zmiennej długo�ci

tylko ci�gi znaków o zmiennej długo�ci poprzez zapisy o stałej długo�ci

� Zapisy te tworz� indeksy do słowników fraz� Je�eli zapisy (indeksy) krótsze ni� frazy – kompresja

Kodowanie słownikowe - zasada

Chcemy zakodowa� zdanie angielskie:

A good example of how dictionary based compression works

Słownik: Longman Dictionary of Contemporary EnglishKodowanie: wska�nik do słowa to x/y, x – nr strony, y – nr

słowa na stronie. Wynik:

1/1 489/7 377/19 755/36 548/13 303/7 73/3 223/1 1270/25

Liczba stron w słowniku: 1280 – x kodujemy przez 11 bitówLiczba słów na stronie < 128 – y kodujemy przez 7 bitówWska�nik x/y – 18 bitów. Całkowita ilo�� bitów: 9*18 = 162Normalne kodowanie ASCII – 48 bajtów, czyli 384 bityStopie� kompresji – 2.37 : 1

Słownik statyczny

� Słownik statyczny – ustalony i niezmienny w trakcie kodowania

� Zastosowanie – gdy mamy wcze�niejsz� wiedz� o kodowanych danych (słownik zawiera najcz��ciej stosowane frazy)

� Słownik bardzo zale�ny od zastosowania� Bardziej uniwersalna metoda kodowania ze słownikiem

statycznym – kodowanie digramowe. Słownik – zawiera wszystkie litery alfabetu oraz tak� ilo�� par liter (digramów) ile si� zmie�ciPrzykład: słownik 256 znaków, alfabet – drukowalne znaki ASCII -95 znaków. Mo�emy wi�c mie� 161 digramy

Kodowanie digramowe

Przykład:� Alfabet {a, b, d, k, r}� Ci�g do zakodowania: abrakadabra� Do zakodowania wszystkich liter potrzeba 3 bitów –

słownik o rozmiarze 23

111ad011k

110ak010d

101ab001b

100r000a

Wynik kodowania: 101|100|110|111|101|101|000

Słownik dynamiczny

� Wi�ksze znaczenie – metody ze słownikiem dynamicznym� Bardziej uniwersalne ni� oparte na słowniku statycznym� Przełomowe znaczenie – prace Jacoba Ziva i Abrahama

Lempela z ko�ca lat siedemdziesi�tych� Słownik budowany dynamicznie na podstawie

przetworzonej cz��ci danych – równy fragmentowi przetworzonej cz��ci danych lub wytworzony ze wszystkich fraz przetworzonych do tej pory

� Najwa�niejsze algorytmy: LZ77, LZ78, LZW

Algorytm LZ77

� Słownik – fragment wcze�niej zakodowanej cz��ci danych� Przegl�damy dane przez przesuwaj�ce si� okno o

rozmiarze W� Okno dzieli si� na:

� bufor słownikowy – zawiera ostatnio zakodowany fragment ci�gu danych

� bufor kodowania – zawiera fragment ci�gu, który wła�nie mamy kodowa�

� Praktyczne implementacje – rozmiar bufora słownikowego: 8 – 16 kB, rozmiar bufora kodowania ~ 100 bajtów

Algorytm LZ77 – c.d.

� Zasada działania:� Umieszczamy wska�nik przeszukiwania na ko�cu bufora

słownikowego� Przesuwamy wska�nik w lewo (liczba miejsc – o) a� do

napotkania symbolu równego pierwszemu symbolowi w buforze kodowania

� Sprawdzamy, czy nast�pne symbole w obu buforach nie s� sobie równe. Liczba równych sobie symboli – długo�� dopasowania l

� Przegl�damy w ten sposób cały bufor słownikowy tak, by zmaksymalizowa� dopasowanie

� Optymalne dopasowanie kodujemy jako (o, l, c), gdzie c – kod symbolu w buforze kodowania wyst�puj�cy jako pierwszy niedopasowany symbol

dakarbak arrarba

7 4

(7, 4, C(r))

Algorytm LZ77 – c.d.

� Ostatni element trójki – na wypadek zerowego dopasowania � Po wysłaniu kodu (o, l , c) przesuwamy okno o l + 1 w prawo i

powtarzamy procedur�

� Długo�� zapisu koduj�cego dla kodowania o stałej długo�ci� niech rozmiar okna = W, rozmiar bufora słownikowego = S,

rozmiar alfabetu = A� wtedy długo�� zapisu = log2 S + log2 W + log2 A

� Uwaga: dopasowanie mo�e przekroczy� rozmiar bufora słownikowego

Algorytm LZ77 – kodowanie

Kodujemy ci�g:

.darrarrarbadakarbak.

Zakładamy, �e podci�g k a b r a k a jest ju� zakodowany.

Parametry okna: W=13, S=7

Kolejne kroki kodowania:

akarbak rarbad

rarbada

dakarba rrarba

darrar

(0,0,C(d))

(7,4,C(r))

(3,5,C(d))

Algorytm LZ77 – dekodowanie� Startujemy z odkowowanego podci�gu k a b r a k a� Odkodowujemy (0,0,C(d)) – czyli C(d)

akarbak d

a

r

� Odkodowujemy (7,4,C(r))

akarbak d

Przesuni�cie o 7

akarbak d

Kopiowanie 1 znaku

akarbak d a b

Kopiowanie 2 znaku

akarbak d a b r

Kopiowanie 3 znaku

akarbak d a b r a

Kopiowanie 4 znaku

akarbak d a b r a

Odkodowanie C(r)

Algorytm LZ77 – dekodowanie – c.d.

� Odkodowanie (3,5,C(d))

rarbaba rarbaba

o 3 pozycje

r

1 znak

r a

2 znak

rarbaba r a rrarbaba

3 znak

r a r r rarbaba

4 znak

r a r r ararbaba

5 znak

r a r r ararbaba d

Odkodowanie C(d)

Algorytm LZ77 – własno�ci

� Prosta metoda adaptacyjna, nie wymaga wcze�niejszej wiedzy o charakterze �ródła

� Kodowanie mo�e by� czasochłonne (du�o porówna�); dekodowanie proste i szybkie

� Niedu�e wymagania dotycz�ce pami�ci� Asymptotycznie – wyniki najlepsze jakie mo�na uzyska�

przy pełnej cz�sto�ci pojawiania si� znaków i korelacji mi�dzy nimi

� Mo�na zastosowa� ró�ne modyfikacje algorytmu poprawiaj�ce jego efektywno��

Odmiany LZ77

� Algorytm LZSS – unika konieczno�ci wysyłania (o,l,c)� Redundancja – albo nie trzeba pointera (bo jest zerowy), albo kodu

znaku (mo�e by� przekazany w nast�pnym wej�ciu)� Działanie:

• Znajd� dopasowanie (o,l)• Je�eli l �MIN_LENGTH to wysyłamy (o, l ) i przesuwamy okno o l• Je�eli l < MIN_LENGTH to wysyłamy kod pierwszego znaku z

bufora kodowania i przesuwamy okno o 1• Aby rozró�ni� oba przypadki ich zapisy poprzedzamy odpowiednimi

flagami bitowymi

� Inne modyfikacje – poprawa efektywno�ci kodowania –kodowanie trójek (lub dwójek liczb) kodowaniem o zmiennej długo�ci – pakiety Pkzip, Zip, gzip, ARJ, LHarc

� Zastosowanie efektywnych struktur danych do reprezentacji zawarto�ci bufora słownikowego (TRIE)

Algorytm LZ78

� Wada algorytmu LZ77 – sko�czony czas, w jakim wzorzec jest pami�tany – wzorce odległe o bardziej ni� szeroko�� bufora słownikowego nie „czuj�” swej obecno�ci

gfedcbaihgfedcbaihgfedcba i a b

� LZ78 – zast�pienie bufora słownikowego słownikiem tworzonym explicite – dynamicznie w trakcie kodowania i dekodowania

� Słowniki – tabela zawieraj�ca indeks i odpowiadaj�cy mu wzorzec. Na pocz�tku kodowania (dekodowania) – słownik pusty. Potem – ostatnio dopasowany wzorze + niedopas. znak

� Kodowanie – para (i,c), gdzie i – indeks, c – kod pierwszego niedopasowanego znaku

LZ78 – przykładCi�g do zakodowania: aa_bbb_cccc_ddddd_e

e12

dd_11

dd10

d9

c_8

cc7

c6

_5

bb4

b3

a_2

a1

^0

WzorzecNrSłownik: Kodowanie:

(0,a)(1,_)(0,b)(3,b)(0,_)(0,c)(6,c)(6,_)(0,d)(9,d)(10,_) (0,e)

Do słownika wstawiane s� coraz dłu�sze wzorce. Je�eli jaka� fraza si� powtarza, to wkrótce znajdzie si� w cało�ci w słowniku.

Odkodowanie – bardzo proste.

Własno�ci algorytmu LZ78

� Szybsze kodowanie ni� dla LZ77 (znacznie mniej porówna� stringów)

� Łatwe dekodowanie (cho� wolniejsze ni� dla LZ77 –konieczno�� odbudowy słownika)

� Wzorce s� stale dodawane do słownika (1 wzorzec na jeden proces kodowania) i nie zapominane –niebezpiecze�stwo przepełnienia pami�ci

� Jest punktem wyj�cia dla algorytmów pochodnych –najbardziej znany algorytm LZW.

Algorytm LZW

� Zaproponowany w 1984 przez Terry’ego Welcha� Główna modyfikacja – koder nie wysyła kodu pierwszego

niedopasowanego znaku (a tylko indeks słownika)� Aby to było mo�liwe – słownik na starcie zawiera

wszystkie litery wyj�ciowego alfabetu� Procedura kodowania:

� Próbujemy dopasowa� kawałek ła�cucha wej�ciowego � Niech s – maksymalny podła�cuch który ma wzorzec w słowniku

(indeks j) o długo�ci d, c – pierwszy niedopasowany znak� Na wyj�cie: j (indeks wzorca zgodnego z s)� Do słownika dodajemy s+c� Przesuwamy znacznik pozycji o d

Algorytm LZW – kodowanie

• Przykład: kodujemy ci�g a b c a b b c a b b a

a w D, ab – nie, ab do D4, wyj�cie 1

b w D, bc – nie, bc do D5, wyj�cie 2

c w D, ca – nie, ca do D6, wyj�cie 3

ab w D, abb – nie, abb do D7, wyj�cie 4

bc w D, bca – nie, bca do D8, wyj�cie 5

abb w D, abba – nie, abba do D9, wyj�cie 7

a w D, wyj�cie 1

Wynik:

1 2 3 4 5 7 1abba9

bca8

abb7

ca6

bc5

ab4

c3

b2

a1

WzorzecIndeks

Algorytm LZW – dekodowanie

Odkodujemy ci�g 1 2 3 4 5 7 1 ze słownikiem pocz�tkowym {a, b, c}

1 ==> wyj�cie a ==> a w D2 ==> wyj�cie b ==> ab nie w D, ab do D43 ==> wyj�cie c ==> bc nie w D, bc do D54 ==> wyj�cie ab ==> ca nie w D, ca do D65 ==> wyj�cie bc ==> abb nie w D, abb do D77 ==> wyj�cie abb ==> bca nie w D, bca do D81 ==> wyj�cie a ==> abba nie w D, abba do D9

Algorytm LZW – problem

• Niekiedy w odkodowywaniu LZW problem – konieczno�� u�ycia wzorca, który jest w trakcie formowania.

• Przykład: zakodowa� ci�g a b a b a b a b• Standardowe post�powanie daje kod: 1 2 3 5 2• Odkodowanie: 1 ==> wyj�cie a ==> a w D

2 ==> wyj�cie b ==> ab nie w D, ab do D3

3 ==> wyj�cie ab ==> ba nie w D, ba do D4

5 ==> ale pozycja 5 w słowniku jeszcze niegotowa !!!

Wiemy, �e D5 musi si� zaczyna� od ab – abx.

Czyli D5 to prefiks ababx którego jeszcze nie ma w D – czyli aba

5 ==> wyj�cie aba ==> aba do D5

2 ==> wyj�cie b ==> abab do D6

ab..5

ba4

ab3

b2

a1

WzorzecIndeks

Zastosowanie LZW

� Polecenie compress� Rozmiar słownika (i długo�� kodów indeksów) zmienia si�

dynamicznie� Zaczynamy od słownika o rozmiarze 512 (słowo kodowe 9-

bitowe). Gdy słownik si� zapełnia, podwajamy rozmiar� Rozmiar maksymalny = 2b, gdzie b – pomi�dzy 9 a 16 (default

równy 16). � Gdy rozmiar maksymalny osi�gni�ty – słownik si� nie zmienia� Algorytm analizuje stopie� kompresji; gdy zbyt niski, słownik jest

czyszczony i budowany od nowa

Zastosowanie LZW – c.d.

� Format GIF� Podstawa – b = ilo�� pikseli na bit.� Zaczynamy od słownika o rozmiarze 2b+1. Po wypełnieniu –

zwi�kszamy o czynnik 2. � Maksymalny rozmiar – 4096. Po jego osi�gni�ciu – słownik jest

zamro�ony.

� Kompresja danych wysyłanych przez modem (V.42 bis)� Mo�e pracowa� w trybie prze�roczystym i trybie kompresji� Tryb kompresji – algorytm LZW ze słownikiem o zmiennej

długo�ci� Standard pozwala na okresowe czyszczenie słownika z napisów,

które pojawiły si� w przeszło�ci, lecz nie były u�ywane ostatnio

Kompresja obrazów - zestawienie

61 58052 32152 64358 374Miasto

34 27639 50133 88040 543Ziemia

60 64937 89638 54161 4302_ch

51 08532 26132 96857 5041_ch

GIFDyn. Huff.ró�nice

Huffman ró�nice

HuffmanObraz