You are on page 1of 30

PTSSI – Temat 3

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).

T.M., 27 listopada 2021 -1-


PTSSI – Temat 3

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.

Teoria informacji – dział matematyki na pograniczu statystyki i informatyki, mający


również olbrzymie znaczenie w współczesnej telekomunikacji, dotyczący przetwarzania
informacji oraz jej transmisji, kompresji, kryptografii itd.

Cechy ciągów danych:


• Informacje nadmiarowe - redundancja
• Informacje nieistotne

T.M., 27 listopada 2021 2


PTSSI – Temat 3

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

Metoda kompresji Rodzaj usuwanej informacji

bezstratna nadmiarowa (takie, które możemy odtworzyć z innych przesłanych


danych)

prawie bezstratna nieistotne dla ludzkich zmysłów

stratna jak najmniej istotne

T.M., 27 listopada 2021 3


PTSSI – Temat 3

Kodowanie długości serii

Run-Length Encoding (RLE)

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

Przy ilu jednakowych pikselach się to opłaca?

T.M., 27 listopada 2021 4


PTSSI – Temat 3

Przykład: Zapis danych w pliku (np. obrazy o skali szarości 0-255)

Przykładowa sekwencja

Zastosowanie RLE

Zapis w pliku
1. Użycie znacznika “255”

2. Identyfikacja pozycji

O ile większa objętość?

T.M., 27 listopada 2021 5


PTSSI – Temat 3

Przykład: RLE danych wielowymiarowych - przykład reprezentacji RGB


Każdy z kolorów lepiej kodować indywidualnie.
Np. Zamiast kodować sekwencję:
(171, 85, 34), (172, 85, 35), (172, 85, 30), oraz (173, 85, 33)
lepiej zakodować
(171, 172, 172, 173, . . .), (85, 85, 85, 85, . . .), oraz (34, 35, 30, 33, . . .).

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, …

Dzięki zapisowi wierszami uzyskujemy możliwość szybkiego wyświetlania


wybranych linii 1, 6, 11, . . ., a potem 2, 7, 12, . . ., itd.

Zastosowanie ?
T.M., 27 listopada 2021 -6-
PTSSI – Temat 3

Istota teorii informacji

• 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

Teoria informacji formułuje granice i warunki, które muszą spełniać podstawowe


bloki systemu komunikacyjnego, aby możliwe było przekazanie określonej ilości
informacji od jej źródła (nadawcy) do ujścia (odbiorcy).

T.M., 27 listopada 2021 -7-


PTSSI – Temat 3

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

Im mniej prawdopodobne jest dane zdarzenie, tym więcej zawiera


informacji.

T.M., 27 listopada 2021 8


PTSSI – Temat 3

Jeżeli sygnał zawiera dwa równie prawdopodobne zdarzenia, czyli pi = 1 2


wtedy ilość informacji zawarta w jednej wiadomości wynosi

I (xi ) = log2 2 = 1 bit


W systemach z modulacją PCM (pulse code modulation) sygnał zawiera L
niezależnych poziomów. Jeżeli założymy, że prawdopodobieństwo
1 1
pi = = N
występowania tych poziomów jest równe, czyli L 2 wówczas

mówimy, że jeden poziom ze zbioru L zawiera informację równą

I (xi ) = log2 2 N = N bitów

T.M., 27 listopada 2021 9


PTSSI – Temat 3

Kodowanie entropijne
Entropia – średnia ilość informacji zawarta w jednej wiadomości
n
H (s ) = − pi log2 pi
i =1

przy czym w zbiorze n niezależnych zdarzeń 𝑠 = {𝑥1 , … , 𝑥𝑛 } każdemu z nich


odpowiada prawdopodobieństwo {𝑝1 , … , 𝑝𝑛 }.
⇾ Zaprojektowany kod porównujemy do wartości entropii
Średnia długość słowa kodowego (średnia ilość bitów przypadających na jeden
symbol źródłowy)
N
L =  pi  li
i =1

Efektywność kodowania
Lmin H (s )
= =
L L

T.M., 27 listopada 2021 10


PTSSI – Temat 3

Jak skonstruować efektywny


koder źródłowy?

• Krótkie słowa kodowe dla


często występujących
symboli źródła
• Długie słowa kodowe dla
rzadko występujących
symboli źródła

Czyli:
Szukamy kodu o zmiennej
długości słowa.
Tabela ASCII

T.M., 27 listopada 2021 11


PTSSI – Temat 3

1837 – telegraf (Samuel Morse)

Kod Morse'a nie jest kodem prefiksowym. Wymagane jest zachowywanie


odstępów pomiędzy nadawanymi znakami.

T.M., 27 listopada 2021 12


PTSSI – Temat 3

Kodowanie Huffmana

Kod Huffmana jest kodem prefiksowym (przedrostkowym), tzn. żadne słowo


kodowe nie jest początkiem innego słowa.

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.

T.M., 27 listopada 2021 13


PTSSI – Temat 3

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ą

sekwencję potrzebujemy 21 3 = 63 bity.


 log ( p ) 
H (s ) = − pi log2 ( pi ) = − pi  10 i 
 log10 (2 ) 
  12     4    2    1 
 log10     log10     log10     log10   
H (s ) = − 
12  21   − 4   21   − 2  2   21   − 1   21   =
Entropia: 21  log10 (2)  21  log10 (2 )  21  log10 (2 )  21  log10 (2 ) 
       
       
= 0.4613+ 0.4557 + 0.6462 + 0.2092 = 1.7724

T.M., 27 listopada 2021 14


PTSSI – Temat 3

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

Kody dla poszczególnych liter:


A–1
O – 00
B – 010
D – 0111
Y – 0110

T.M., 27 listopada 2021 15


PTSSI – Temat 3

Średnia długość kodu Huffmana:


N
12 4 2 2 1 38
L =  pi  l i =  1 +  2 +  3 +  4 +  4 = = 1.8095
i =1 21 21 21 21 21 21

Z zastosowaniem wyznaczonego kodu Huffmana potrzebujemy 44 bitów w celu transmisji


podanej w zadaniu sekwencji YAAABAAADAAABAAADOOOO.

Efektywność kodowania Huffmana:

H (s ) 1.7724
= = = 0.9795 → 97.95%
L 1.8095

T.M., 27 listopada 2021 16


PTSSI – Temat 3

Przykład wyznaczania kodów:

Średnia długość: 0.4 × 1 + 0.2 × 2 + 0.2 × 3 + 0.1 × 4 + 0.1 ×4 = 2.2


Wariancja: 0.4(1−2.2)2+0.2(2−2.2)2+0.2(3−2.2)2+0.1(4−2.2)2+0.1(4−2.2)2= 1.36

Średnia długość: 0.4 × 2 + 0.2 × 2 + 0.2 × 2 + 0.1 × 3 + 0.1 ×3 = 2.2


Wariancja: 0.4(2−2.2)2+0.2(2−2.2)2+0.2(2−2.2)2+0.1(3−2.2)2+0.1(3−2.2)2=0.16
Który zatem lepszy?

T.M., 27 listopada 2021 17


PTSSI – Temat 3

Kodowanie arytmetyczne

Kodowanie polega na przedstawieniu ciągu wiadomości jako podprzedziału przedziału


jednostkowego [0,1) wyznaczonego rekursywnie na podstawie prawdopodobieństw
wystąpienia tychże wiadomości generowanych przez źródło.

http://www.ire.pw.edu.pl/~arturp/Dydaktyka/koda/skrypt.html

T.M., 27 listopada 2021 18


PTSSI – Temat 3

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

T.M., 27 listopada 2021 19


PTSSI – Temat 3

Przykład: Kodowanie i dekodowanie arytmetyczne słowa MATKA


Statystyka źródła: Proces kodowania:
Symbol Prawdopodobieństwo STdól (s ) ; STgóra (s ) GRdolna GRgórna (GR górna − GRdolna )
s wystąpienia
0 1 1
A 2
= 0,4  0;0,4)
5
M 0,6 0,8 0,2
A 0,6 0,68 0,08
K 1
= 0,2  0,4;0,6)
5 T 0,664 0,68 0,016
M 1
= 0,2  0,6;0,8) K 0,6704 0,6736 0,0032
5
A 0,6704 0,67168 0,00128
T 1
= 0,2  0,8;1)
5
Zakodowana liczba to dowolna liczba
GRdolna = GRdolna + (GRgórna − GRdolna ) STdól (s ) należąca do przedziału <0,6704;0,67168)
GRgórna = GRdolna + (GRgórna − GRdolna ) STgóra (s ) np. 0,6704

T.M., 27 listopada 2021 20


PTSSI – Temat 3

Proces dekodowania: LICZBA KODOWA: 0,6704


Symbol s Prawdopodobieństwo STdól (s ) ; STgóra (s )
wystąpienia
A 2  0;0,4)
= 0,4
5

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 )

0,6704 M (0,6704 – 0,6) : 0,2


0,352 A (0,352 – 0) : 0,4
0,88 T (0,88 – 0,8) : 0,2
0,4 K (0,4 – 0,4) : 0,2
0 A

T.M., 27 listopada 2021 21


PTSSI – Temat 3

Przykład: Kodowanie i dekodowanie słowa ADAM.

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 )

D 0,25 0,5 0,75 0,296875 A 0,59375


M 0,25 0,75 1 0,59375 D 0,375
Kodowanie 0,375 A 0,75
GRdolna GRgórna (GR − GRdolna )
górna
0,75 M 0
0 1 1
A 0 0,5 0,5
D 0,25 0,375 0,125
A 0,25 0,3125 0,0625
M 0,296875 0,3125 0,015625

T.M., 27 listopada 2021 22


PTSSI – Temat 3

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.

T.M., 27 listopada 2021 23


PTSSI – Temat 3

Kodowanie LZ77

….aqwerccdasdasda aaaaaaabbbbb aaaaaaaaagggg aaaaaaabbbbbggggggg……


symbole bufor bufor Kolejne symbole wejściowe
przetworzone słownikowy wejściowy
(słownik), przechowujący
przechowujący k n symboli do
ostatnio zakodowania
przetwarzanych
symboli (sufiks)
Algorytm:
• Bufor słownikowy jest wypełniany pierwszym symbolem wejściowym. Do bufora
wejściowego wstawiane jest n pierwszych symboli wejściowych.
• Dopóki w buforze wejściowym są jakieś dane:
1. W obrębie bufora słownikowego wyszukiwany jest najdłuższy podciąg równy początkowi
bufora wejściowego (najdłuższy prefiks bufora kodowania). Wynikiem wyszukiwania jest
indeks początku wyszukanego podciągu oraz jego długość C. Część podciągu może być
wspólna z buforem wejściowym.
2. Na wyjście wyprowadzana jest trójka (P, C, S), gdzie S to symbol następujący po
dopasowanym podciągu.
3. Okno (bufor słownikowy + bufor wejściowy) przesuwane jest w lewo o C + 1 pozycji, a na
koniec bufora są dopisywane kolejne symbole wejściowe.

T.M., 27 listopada 2021 24


PTSSI – Temat 3

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

T.M., 27 listopada 2021 25


PTSSI – Temat 3

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.

o Jeżeli ciąg c + s znajduje się w słowniku, przedłuż ciąg c, tj. c := c + s

o Jeśli ciągu c + s nie ma w słowniku, wówczas:

▪ wypisz kod dla c (c znajduje się w słowniku)

▪ dodaj ciąg c + s do słownika

▪ przypisz c := s.

3. Na końcu wypisz na wyjście kod związany c.

T.M., 27 listopada 2021 - 26 -


PTSSI – Temat 3

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

T.M., 27 listopada 2021 27


PTSSI – Temat 3

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

T.M., 27 listopada 2021 28


PTSSI – Temat 3

Programy kompresji bezstratnej

http://www.maximumcompression.com/programs.php

T.M., 27 listopada 2021 - 29 -


PTSSI – Temat 3

Zadanie domowe 3.1:


Dla sekwencji liter KATARZYNAKASIA wyznacz:
• entropię,
• kod Huffmana,
• średnią długość kodu,
• sprawność kodowania.

Zadanie domowe 3.2:


Zademonstruj proces kodowania i dekodowania arytmetycznego dla słowa KOKOS.

T.M., 27 listopada 2021 - 30 -

You might also like