Ćwiczenie 3 – Kompresja danych

Transkrypt

Ćwiczenie 3 – Kompresja danych
Systemy teleinformatyczne
Ćwiczenie 3 –
Kompresja danych
Przykład prostego algorytmu LZW
Kompresja danych – często stosowana , w celu zmniejszenia porcji przesyłanych (składowanych) danych bez istotnej utraty informacji. Daje oszczędność miejsca, czasu transmisji, zmniejsza koszty.
Sposoby kompresji:
- ilościowa (bezstratna)
- jakościowa (stratna)
Kompresja ilościowa - wykorzystuje redundancję źródła informacji.
Kompresja jakościowa - wykorzystuje ułomność zmysłów człowieka (niezauważalna utratę ilości informacji).
Kompresja LZW
Algorytm opracowany w 1977 r przez Ziv’a i Lempela. Jego poprzednicy to algorytmy LZ77, LZ78. Algorytm LZW jest chroniony patentem. Właścicielem patentu jest firma Unisys Corporation.W algorytmie
LZW analizowane są ciągi w uporządkowanym zbiorze. Znane są elementarne cząstki tego zbioru, nazywane dalej elementami podstawowymi oraz uporządkowanie zbioru polegające na tym, że każdy element podstawowy ma ustalonego swojego poprzednika i następnika. Szeregowo napływają kolejne elementy zbioru począwszy od elementu pierwszego.
Produktem wyjściowym algorytmu kodującego jest szeregowo wyprowadzany zbiór liczb z właściwością
podobnego uporządkowania jak w zbiorze wejściowym. Wyprodukowane liczby to numery nadane ciągom elementów podstawowych napływających ze zbioru wejściowego. Cechą charakterystyczną algorytmu jest to, że na wyjście jest wyprowadzany numer nadany ciągowi, który w procesie kodowania występował jako poprzedni, ale wtedy, gdy na wejściu pojawił się nowy nieznany ciąg, któremu właśnie
trzeba nadać nowy numer. Z tej właściwości wynika, że algorytm może wyprodukować mniejszą ilość
danych niż otrzymał.
Dane opisujące obraz, to opis punktów - ciągów punktów zdarza się w obrazie bardzo dużo, stąd też
użycie tego algorytmu do kompresji opisu obrazu jest jak najbardziej uzasadnione.
LZW – opis ogólny
1. W słowniku umieszczamy wszystkie symbole alfabetu.
2. Kodujemy pozycję w słowniku znalezionego w nim najdłuższego prefiksu niezakodowanej części
tekstu,
3. Do słownika dodajemy konkatenację (połączenie) odkodowanego elementu słownika i występującego za nim znaku.
Algorytm LZW
1) Umieść w słowniku wszystkie możliwe ciągi jednoliterowe (czyli litery alfabetu).
2) Dopóki niezakodowany tekst nie jest pusty:
a) znajdź najdłuższy prefiks x niezakodowanej części tekstu, który występuje w słowniku;
b) zakoduj x poprzez n, jego pozycję w słowniku
c) dodaj do słownika xa, gdzie a jest symbolem występującym za prefiksem x w niezakodowanej
części tekstu.
d) obetnij znaleziony prefiks z tekstu niezakodowanego.
Przykład kodowania LZW
Tekst niezakodowany (źródłowy): tatarak
Zakodowana postać tekstu (szyfrogram):
Słownik
125324
1) t
2) a
3) r
4) k
5) ta
6) at
7) tar
8) ra
9) ak
UWAGI:
1) Jak widać niekoniecznie wykorzystywane są wszystkie elementy słownika.
2) Można ograniczyć wielkość słownika, przyjmując na przykład., że jego składowe nie mogą być dłuższe
niż 3 znaki. W przypadku braku takiego ograniczenia wzrost rozmiaru słownika jest rekompensowany
mniejszym rozmiarem szyfrogramu.
Zadania
1. Skompresować algorytmem LZW tekst "AABCABBCAA".
2. Wprowadzić ograniczenie słownika do 2 znaków i porównać wielkość słownika i postaci
zakodowanej.
3. Sprawdzić przy pomocy aplikacji „LZW-alfa” symulującej kompresję LZW poprawność
wykonanych zadań.
4. Podać zakodowaną postać tekstu: „tatarak” stosując słownik max. 2-znakowy i wykorzystując konwersję kodu ASCII znaków na reprezentację binarną (np. litera a to kod 61
– reprezentacja binarna 01100001, można to przeliczyć na kalkulatorze Windows – inne
kody znaków znaleźć w internecie).
5. Wykonać kodowanie prostego obrazka:

Podobne dokumenty