Professional Documents
Culture Documents
Temat 3
Teoria informacji
Kompresja bezstratna
Zagadnienia:
Informacja
Typy kompresji
Kodowanie długości serii
Istota teorii informacji
Entropia
Kodowanie entropijne
Kodowanie Huffmana
Kodowanie arytmetyczne
Kodowanie słownikowe
Kodowanie LZ77
Kodowanie LZW
Programy kompresji bezstratnej
Materiały źródłowe:
[1] A. Przelaskowski, Kompresja danych obrazowych, pdf
http://www.ire.pw.edu.pl/~arturp/Dydaktyka/koda/download_skrypt.php
[2] A. Drozdek, Wprowadzenie do kompresji danych, WNT 1992.
[3] S. W. Smith, The Scientist and Engineer's Guide to Digital Signal Processing Second Edition,
California Technical Publishing, 1999 (chapter 27).
Informacja
Informacja jest wiedzą otrzymaną przez odbiór wiadomości, która pozwala odbiorcy
zrealizować lub ulepszyć jego działanie.
Charakter informacji:
• Potencjalny – może, ale nie musi być wykorzystana
• Względny – zależnie od odbiorcy wartościowa informacja lub zakłócenie.
Typy kompresji
Kompresja danych - polega na zmianie sposobu zapisu informacji w taki sposób, aby
zmniejszyć redundancję i tym samym objętość zbioru, nie zmieniając przenoszonych
informacji. Innymi słowy chodzi o wyrażenie tego samego zestawu informacji, lecz za
pomocą mniejszej liczby bitów. Działaniem przeciwnym do kompresji jest dekompresja.
Współczynnik kompresji (compression ratio)
K = wielkość oryginalnych danych/wielkość danych po kompresji
Algorytm polega na opisywaniu ciągów tych samych symboli (liter, bitów, bajtów, pikseli
itp.) za pomocą licznika powtórzeń (długości ciągu) i danego symbolu.
9 3
2 2 4 4
2 2 3 5
8 4
8 4
Przykładowa sekwencja
Zastosowanie RLE
Zapis w pliku
1. Użycie znacznika “255”
2. Identyfikacja pozycji
Kodowanie wierszy
Sposób kodowania powinien uwzględniać wygodę rozpakowania danych.
Przykładowo jeżeli wiersz kończy się 4 pikselami o intensywności 87 a następny
wiersz rozpoczyna się 9 pikselami także o intensywności 87 to
lepiej zapisać …, 4, 87, 9, 87, … niż … , 13, 87, …
a dokładnie zrobić zapis …, 4, 87, eol, 9, 87, …
Zastosowanie ?
T.M., 27 listopada 2021 -6-
PTSSI – Temat 3
• Jaka jest nieredukowalna złożoność sygnału, poniżej której sygnał ten nie może
już zostać skomprymowany?
• Jaka jest największa możliwa szybkość transmisji, zapewniająca niezawodną
komunikację za pośrednictwem zaszumionego kanału?
Odpowiedź:
➔ entropia sygnału
➔ pojemność kanału
Entropia
Miarą informacji, jaką zawiera zdarzenie, jest logarytm o podstawie dwa z
odwrotności prawdopodobieństwa tej informacji
I (xi ) = − log2 pi - entropia indywidualna (autoinformacja)
xi - zdarzenie
p i - prawdopodobieństwo zdarzenia
-log2(0.1) = 3.3219
-log2(0.3) = 1.7370
-log2(0.5) = 1
-log2(0.7) = 0.5146
-log2(0.9) = 0.1520
Kodowanie entropijne
Entropia – średnia ilość informacji zawarta w jednej wiadomości
n
H (s ) = − pi log2 pi
i =1
Efektywność kodowania
Lmin H (s )
= =
L L
Czyli:
Szukamy kodu o zmiennej
długości słowa.
Tabela ASCII
Kodowanie Huffmana
Algorytm:
1. Symbole źródła zostają spisane w porządku malejącego prawdopodobieństwa.
Dwóm symbolom o najmniejszych prawdopodobieństwach zostają przypisane bity
1 i 0.
2. Te dwa symbole źródła zostają uznane za nowy symbol złożony źródła o
prawdopodobieństwie równym sumie prawdopodobieństw symboli pierwotnych.
Prawdopodobieństwo nowego symbolu zostaje umieszczone na liście zgodnie ze
swoją wartością.
3. Omawiany proces jest powtarzany, aż uzyska się końcową listę statystyk źródła
(symboli), zawierającą tylko dwa elementy, którym przyporządkowuje się bity 1
oraz 0.
Przykład
Dla sekwencji YAAABAAADAAABAAADOOOO wyznacz
• entropię
• kod Huffmana
• średnią długość kodu
• efektywność.
Rozwiązanie:
12 4 2 2 1
pA = pO = pB = pD = pY =
21 21 21 21 21
Bez operacji kodowania potrzebujemy na każdą literę trzy bity, a więc aby przesłać podaną
Drzewo Huffmana:
1 21/21
12/21
A
1
4/21 0 9/21 0
O
1
2/21 0 5/21
B
1
2/21
D
3/21
1/21
Y
0
H (s ) 1.7724
= = = 0.9795 → 97.95%
L 1.8095
Kodowanie arytmetyczne
http://www.ire.pw.edu.pl/~arturp/Dydaktyka/koda/skrypt.html
Kompresja: Dekompresja:
1. Utwórz statystykę i podziel przedział 1. Wczytaj statystykę z podziałem na
[0,1) na podprzedziały podprzedziały
GRgórna = 1 2. Wczytaj liczbę kodową
2. Ustaw granice GRdolna = 0 i 3. Zdekoduj symbol wybierając
3. Wczytaj znak S z wejścia odpowiedni podprzedział
4. Dokonaj korekt granic
GRdolna = GRdolna + (GRgórna − GRdolna ) STdól (s )
4. Zmodyfikuj liczbę kodową
LK − STdól (s )
GRgórna = GRdolna + (GRgórna − GRdolna ) STgóra (s ) LK =
STgóra (s ) − STdól (s )
Powtarzaj kroki 3 i 4 dla kolejnych
symboli 5. Powtarzaj kroki 3 i 4 dopóki liczba
kodowa jest różna od zera
5. Zapisz liczbę kodową LK
K 1 0,4;0,6)
= 0,2
5
M 1 0,6;0,8)
= 0,2
5
T 1 0,8;1)
= 0,2
5
LK − STdól (s )
LK s LK =
STgóra (s ) − STdól (s )
Statystyka Dekodowanie:
Symbol s Prawd.. STdól (s ) STgóra (s ) LICZBA KODOWA 0,296875
wyst. LK − STdól (s )
LK s LK =
A 0,5 0 0,5 STgóra (s ) − STdól (s )
Kodowanie słownikowe
Kodowanie słownikowe - kodowanie danych, w którym podciągi komunikatu
występujące w słowniku (tj. zbiorze słów) są zastępowane symbolami jednoznacznie
opisującym ich pozycję w słowniku, zwykle indeksami (liczbami). Takie metody dobrze
kompresują dane, w których podciągi powtarzają się, np. w przypadku tekstów
naturalnych (teksty książek, czasopism itp.) wiele słów a nawet całych fraz występuje
wielokrotnie.
Kodowanie LZ77
Przykład
Dokonaj kodowania i dekodowania LZ77 dla sekwencji YAAABAAADAAABAAADOOOO
Kodowanie:
SŁOWNIK BUFOR SEKWENCJA
0123
YYYY YAAA 3,1,A
YYYA AABA 3,2,B
AAAB AAAD 0,3,D
AAAD AAAB 0,3,B
AAAB AAAD 0,3,D
AAAD OOOO 3,0,O
AADO OOO 3,3,EOF
Dekodowanie:
BUFOR SEKWENCJA WYJŚCIE
YYYY 3,1,A YA
YYYA 3,2,B AAB
AAAB 0,3,D AAAD
AAAD 0,3,B AAAB
AAAB 0,3,D AAAD
AAAD 3,0,O O
AADO 3,3,EOF OOO
Kodowanie LZW
Zakładamy wstępne wypełnienie słownika alfabetem (wszystkimi symbolami).
Algorytm:
1. c := pierwszy symbol wejściowy
2. Dopóki są dane na wejściu:
o Wczytaj znak s.
▪ przypisz c := s.
Przykład
Dokonaj kodowania i dekodowania LZW dla sekwencji AABABACBAACBAADAAA
Kodowanie:
Koder Słownik
Wejście Wyjście Pozycja
SEKWENCJA
c+s (kod) (kod)
1 A
2 B
3 C
4 D
AA 1 5 AA
AB 1 6 AB
BA 2 7 BA
ABA 6 8 ABA
AC 1 9 AC
CB 3 10 CB
BAA 7 11 BAA
ACB 9 12 ACB
BAAD 11 13 BAAD
DA 4 14 DA
AAA 5 15 AAA
A 1 16
Dekodowanie:
Dekoder Słownik
Wejście Wyjście Pozycja
SEKWENCJA
(kod) (kod) (kod)
1 A
2 B
3 C
4 D
1 A
1 A 5 AA
2 B 6 AB
6 AB 7 BA
1 A 8 ABA
3 C 9 AC
7 BA 10 CB
9 AC 11 BAA
11 BAA 12 ACB
4 D 13 BAAD
5 AA 14 DA
1 A 15 AAA
http://www.maximumcompression.com/programs.php