KOMPRESJA STRATNA I BEZSTRATNA W

Transkrypt

KOMPRESJA STRATNA I BEZSTRATNA W
KOMPRESJA STRATNA I BEZSTRATNA
W znaczeniu informatycznym kompresja to zmniejszenie objętości danych
przy zachowaniu „ładunku informacyjnego”, czyli sensu tych danych.
Celem kompresji jest zatem możliwie dokładna reprezentacja informacji
przy użyciu możliwie małej ilości bitów. Kompresja ma zazwyczaj na celu
oszczędność nośnika i/lub łącza sieciowego, którym są przesyłane dane,
czyli redukcję kosztów. Proces odwrotny do kompresji nazywamy
dekompresją. Dlaczego kompresja jest możliwa? duża część danych cechuje się
znaczną redundancją (nadmiarowością), tzn. pewne informacje powtarzają się z
różną częstością dane są prezentowane w rozmaity sposób (np. grafika może być
rastrowa lub wektorowa) człowiek ma ograniczone zdolności percepcyjne — mózg
można do pewnego stopnia „oszukać” . Kompresji można poddawać dane (zbiory
informacji) różnego rodzaju, m.in.: tekst dźwięk (mowa, muzyka) obraz ruchomy i
nieruchomy pliki wykonywalne .
Algorytmem
kompresji
nazywamy
schemat
postępowania
przy
zmniejszaniu objętości pliku; najczęściej zależy on od charakteru
kompresowanych danych. Algorytmy kompresji można podzielić ze
względu na różne kryteria, np. stopień zmiany „ładunku informacyjnego”:
kompresja bezstratna kompresja stratna
Kompresja bezstratna
Algorytmy
kompresji bezstratnej umożliwiają takie
przechowanie danych, by w procesie dekompresji uzyskać dane w postaci
identycznej z tą, jaką miały przed poddaniem ich kompresji. Dzieje się to jednak
zazwyczaj kosztem gorszego współczynnika kompresji. Nadają się do danych
charakteryzujących się dużą redundancją (nadmiarowością) informacji. Niektóre
obszary zastosowań: tekst, bazy danych, pewne rodzaje obrazów statycznych (np.
do zastosowań medycznych). Przykłady algorytmów bezstratnych: Deflate, Huffman,
LZW, RLE, BZIP2.
Kompresja stratna Przy użyciu algorytmu kompresji stratnej część
oryginalnych danych zostaje utracona, chociaż „ładunek informacyjny”
zazwyczaj jest zachowany. Algorytmy kompresji stratnej oferują lepsze
1
współczynniki kompresji niż algorytmy kompresji bezstratnej. Niektóre
obszary zastosowań: obraz ruchomy i nieruchomy, muzyka, mowa. Przykłady
algorytmów stratnych: DCT, metoda falkowa, JPEG, MPEG, Vorbis, MP3.
Współczynnik kompresji (ang. compression ratio) jest definiowany jako stosunek
objętości danych skompresowanych (wyjściowych) do objętości danych oryginalnych
(wejściowych), czyli jego wartość zawiera się w przedziale od 0 do 1. Stopień
kompresji (ang. compression factor) jest odwrotnością współczynnika kompresji i
przyjmuje wartości większe od Przypadek szczególny: grafika Coraz większa
ilość informacji jest przekazywana w postaci obrazów (statycznych i ruchomych).
Zasadnicza część pochodzi od plików graficznych produkowanych przez rozmaite
urządzenia do cyfrowej rejestracji obrazu (cyfrowe aparaty fotograficzne, cyfrowe
kamery filmowe, skanery, zdjęcia satelitarne, systemy obrazowania medycznego i
inne). Rodzaje plików graficznych rastrowe (bitmapy) — obraz zapisany jako siatka
punktów (pikseli) opisanych przez ich położenie na płaszczyźnie oraz przez bity
koloru (np. JPEG, GIF, PNG, TIFF) wektorowe (obiektowe) — obraz jest tworzony
przez obiekty matematyczne: punkty i krzywe (np. SVG, Flash) metapliki — swego
rodzaju „kontenery”; pliki zawierające w sobie inne pliki i/lub informacje opisujące te
pliki (np. WMF, EMF) pliki opisu strony — obraz zapisany jest w specyficznym języku
programowania (np. PCL, PostScript)
KOMPRESJA BEZSTRATNA
Bezstratna kompresja jest bardzo łatwa do opisania:
Oryginalny obraz może być odtworzony w dowolnym momencie, w
dokładnie identycznej formie - po dekompresji każdy piksel posiada
dokładnie taką samą wartość jak przed nią.
Formaty programów do edycji obrazu - takie jak format *.PSD w Adobe Photoshop są często wyposażone w bezstratne algorytmy kompresji. Istnieją jednak także inne
metody.
LZW
Tak zwany format TIFF (Tagged Image File Format) stosuje bezstratną metodę
2
kompresji znaną jako metoda Lemple-Zif-Welch (LZW). Jednak, ta wersja, którą mogą
zapisywać dobre programy edycyjne, jest w stanie znacząco zmniejszyć tylko rozmiary
plików zawierających obrazy o dużych obszarach jednakowego koloru. Program
Picmaster jest przykładem programu typu shareware, które oferuje kompresję LZW do
formatu TIFF.
ZIP
Inną bezstratną metodą jest kompresja ZIP, która może być stosowana do dowolnego
tekstu, programu i innych plików, a więc także do zdjęć. Zastosowanie programu do
kompresji ZIP, takiego jak np. PowerArchiver. Oczywiście zmniejszenie rozmiaru pliku
jest znacznie mniejsze, jeśli stosujemy tą metodę do wcześniej skompresowanych
plików graficznych.
KOMPRESJA STRATNA
Metody stratne
JPEG
Bardzo popularną metodą i jedyną, która jest stosowana praktycznie we wszystkich
aparatach cyfrowych do zaoszczędzenia pamięci, jest kompresja JPEG (Joint
Photographic Experts Group). Nie da się określić o ile zmniejszany jest rozmiar pliku,
ponieważ przy użyciu tej metody sami wybieramy stopień kompresji.
JPEG2000
JPEG2000 jest rozwinięciem standardu JPEG, który ma zastąpić swojego poprzednika
(wprowadzonego w 1991 roku) i posiada znacznie bardziej zaawansowane algorytmy.
GIF
Format GIF (Graphics Interchange Format) jest potężnym specjalistą do kompresji
grafiki. Wykorzystuje bezstratną metodę LZW, ale zapisuje obrazy w trybie 8-bitowym
lub 256 kolorów.
PNG
Format PNG (Portable Network Graphics) jest alternatywą do formatu GIF w trybie 8bitowym lub 256-kolorów i formatu JPEG w metodzie 24-bitowej lub 16,7 miliona
kolorów.
Która metoda i kiedy?
Jeszcze przed zrobieniem zdjęcia i ponownym zapisaniem danych na komputerze,
powinieneś zdecydować, do czego będą używane. Jeśli masz wątpliwości, nie masz
wyjścia i musisz wybrać format pożerający pamięć, żeby z miejsca nie uniemożliwić
żadnego zastosowania zdjęć.
3
TIFF
Jesteś po bezpiecznej stronie, pod warunkiem, że aparat oferuje takie możliwości. Jest
to metoda zapisu bez kompresji, ponieważ zapisuje dane na nośniku dokładnie w taki
sposób jak są odczytywane przez aparat.
Format TIFF zachowuje wszystkie informacje graficzne podczas zapisywania, co czyni
go idealnym rozwiązaniem, gdy chcemy później uzyskać wielkoformatowe odbitki lub
plakaty oraz gdy chcesz wykonać powiększenia wybranych fragmentów. Bezstratna
kompresja LZW jest dobrym wyborem dla edycji graficznej, a format ZIP dodatkowo
zmniejszy rozmiar pliku, gdy chcesz go przeslać pocztą elektroniczną.
JPEG
Dzięki formatowi JPEG i dobremu programowi do kompresji lub edycji obrazu, masz
możliwość kompresji zdjęcia do prawie każdego zastosowania. Zawsze musisz jednak
zwracać uwagę do związku pomiędzy rozmiarem pliku i jakością. Jeśli zbyt szybko i za
bardzo skompresujesz, bez zapisania oryginału, nieodwracalnie stracisz część danych.
GIF
Format GIF jest idealny do kompresji grafiki charakteryzującej się obszarami dokładnie
określonymi i o stosunkowo jednorodnych kolorach, takich jak rysunki komiksowe.
Metoda ta jest dobra dla obrazów półtonowych, gdy potrzebujesz dużej kompresji i
chcesz w zdjęcia wkomponować tekst lub animować zdjęcia do wykorzystania w
Internecie. Format GIF zazwyczaj ma przewagę nad JPEG, jeśli chodzi o jakość i
rozmiar pliku, gdy chodzi o przyciski nawigacyjne stron internetowych lub graficzne
loga.
PNG
PNG, szczególnie w wersji 8-bitowej, może być dobrą alternatywą dla formatu GIF,
ponieważ, w pewnych okolicznościach, umożliwia tworzenie mniejszych plików o
porównywalnej jakości. Należy jednak zaznaczyć, że będąc nieco egzotycznym
formatem, nie każdy program może go odtwarzać, a jeśli jest używany na stronach
internetowych, nie każda przeglądarka będzie mogła go pokazać.
Czym kompresować?
Jednym z wygodniejszych programów do kompresji jest SmartSaver Pro firmy Ulead.
Pozwala na określenie konkretnego poziomu jakości i sprawdzenie jej w oknie
podglądu.
Oczywiście, popularne, standardowe programy do edycji obrazu, od Adobe
Photoshop i Paint Shop Pro do Ulead PhotoImpact oraz MGI PhotoSuite, oferują
bardzo kokładne ustawienia. Gdy wybierzesz opcję "Zapisz jako..." w programie
Adobe Photoshop, możesz suwakiem wybrać poziom kompresji, skalę liczbową od 1
do 10 lub cztery poziomy, od niskiej do maksymalnej.
4
Możesz także wybrać polecenie przeznaczone do zapisywania zdjęć do użycia w
Internecie. W tym przypadku możesz ocenić efekt kompresji w oknie podglądu.
W programie Paint Shop Pro, stopień kompresji jest ustawiany w poleceniu "Save
As" poprzez spisanie współczynnika kompresji od 1 do 99 lub suwaka pozwalającego
na płynne ustawienia od jakości maksymalnej do minimalnej.
Polecenie "Export JPEG File" w Paint Shop Pro umożliwia dodatkowo podgląd
rezultatu kompresji.
Kompresja bezstratna
Dlaczego stosuje się kompresję? Kompresja jest sposobem na zmniejszenie wielkości
plików bitmapowych.
Kompresja bezstratna to metoda kodowania informacji do postaci zawierającą
zmniejszoną liczbę bitów, aby cała informacja dała się odtworzyć – jest to
ZMNIEJSZENIE ROZMIARU PLIKU BEZ UTRATY ŻADNYCH INFORMACJI.

RLE (Run-Lenght Encoding) czyli metoda kodowania długości ciągów
Stosowana jest w takich formatach jak PCX, BMP, TGA, PDF
* Wiele gier tworzy zrzuty ekranu w formacie TGA.
Metoda ta polega na zastępowaniu serii takich samych danych występujących po
sobie rekordem danych zawierającym kod wzorca oraz liczbę jego wystąpień
(przykładem takiej metody jest metoda RLE (Run-Length Encoding) stosowana do
kodowania obrazów).
Czyli polega na opisywaniu ciągów tych samych
znaków (bitów, bajtów, symboli) za pomocą zliczenia powtórzeń,
określaniu długości podciągu, a dokładniej za pomocą par: licznik
powtórzeń barwy-barwa.
Przykład kompresji RLE
aaaaaaabbbaaaaaaaa czyli 7 pikseli niebieskich, 3 czerwone, 8 niebieskich
aaaaaabbaabbaaaaaa
czyli 6 pikseli niebieskich, 2 czerwone,2 niebieskie, 2
czerwone, 6 niebieskich,
aaaaabbbaaabbbaaaa 5 nieb, 3 czerw, 3 nieb, 3 czerw, 4 niebieskie
Bez kompresji: 3x18 bajtów = 54 bajty
Sposób kodowania: a7b3a8 - 6 bajtów a6b2a2b2a6 - 10 bajtów a5b3a3b3a4 - 10
bajtów suma: 26 bajty
Stopień kompresji: 2:1
5
Właściwości kodowania długości serii (zalety i wady RLE): 1. Osiągany niezbyt duży
stopień kompresji 2. Bardzo szybka kompresja i dekompresja, 3. Zakodowany
strumień danych jest mało czuły na zakłócenia

LZW jest algorytmem słownikowym. Metody
dokładnych wystąpień danego ciągu znaków
słownikowe
poszukują
Polega na przeglądaniu danych wejściowych w poszukiwaniu fraz identycznych z
tymi, które są w słowniku Jeśli taka fraza zostanie wykryta to w jej miejsce w
strumieniu danych wyjściowych wpisywana jest sekwencja kodowa, która
identyfikuje pozycję frazy w słowniku.
Wady i zalety kodowania metody LZW Etap kompresji jest znacznie dłuższy
niż etap dekompresji, bo wymaga czasochłonnych operacji przeszukiwania
strumienia danych wejściowych w celu wyodrębnienia powtarzających się fraz
(budowa słownika). Podstawa działania takich formatów jak GIF, ZIP, ARJ,
RAR.
* ARJ jest jednym z formatów kompresji danych oraz programem do kompresji i
dekompresji tego typu plików

Metoda Huffmana Opracowana w 1960 roku przez Davida Huffmana, opiera
się na statystycznym rozkładzie prawdopodobieństwa wystąpienia symboli w
strumieniu danych wejściowych. Celem metody jest redukcja nadmiarowości
kodu do reprezentacji poszczególnych symboli. Podstawą metody jest budowa
drzewa Huffmana. Drzewo budowane jest od liści do korzenia. Każdy liść
reprezentuje pojedynczy symbol z dziedziny danych. Wartość liścia oznacza
liczbę wystąpień symbolu w strumieniu danych. Do każdego znaku prowadzi
tylko jedna droga. Jeżeli rozgałęzienia na prawą stronę oznaczone zostaną 0 a
na lewą 1 to dla każdego znaku można określić unikatowy kod binarny. Dla
danej serii danych można zbudować więcej niż jedno drzewo, co oznacza, że
w czasie dekompresji potrzebne jest drzewo według, którego dane zostały
zakodowane.
Wady i zalety metody Huffmana
Metoda Huffmana – właściwości: 1. Jedna z najczęściej wykorzystywanych
metod kodowania (również jako element kompresji stratnej), 2. Osiągany
stopień kompresji rzędu 20-40%, 3. Działa niezależnie od typu danych, 4.
Wolniejsze działanie, ze względu na konieczność budowania drzewa
(zwłaszcza w wersji adaptacyjnej), 5. Duża czułość na zakłócenia, wymaga
specjalnych zabezpieczeń, aby nie nastąpiło przekłamanie w danych
zakodowanych.
W podanym przykładzie (w książce – str. 242-243)
6
zakładamy, że nasz plik ma 1024*1024=1048576 bajtów. Każdy bajt jest
kodowany na 8 bitach, nieskompresowany zajmuje 8*1048576=8388608
Z rozwiązania zadania wynika, że nam potrzeba po 3 bity na znak, czyli
3*1048576=3145728 bitów, czyli
3145728/8388608=37% wyjściowego pliku. Taki wynik osiąga się, gdy nasz
„alfabet” ma kilka znaków, w przypadku gdy jest więcej, wynik jest gorszy

Kodowanie arytmetyczne Podobnie jak metoda Huffmana opiera się na
rozkładzie prawdpodobieństwa wystąpienia symbolu w strumieniu danych
wejściowych. 1 symbol może opisywać ułamkową część bitu (1 bit może nieść
więcej informacji niż o 1 znaku). Ideą tego kodu jest przedstawienie ciągu
symboli jako podprzedziału przedziału jednostkowego [0,1) wyznaczonego
rekursywnie na podstawie prawdopodobieństw wystąpienia tych symboli w
strumieniu danych wejściowych. Ciąg kodowy reprezentujący kodowane
symbole jest binarnym zapisem wartości z wyznaczonego w ten sposób
przedziału.
Wady i zalety kodowania arytmetyczego
Kodowanie arytmetyczne – właściwości: 1. Metoda daje lepszy stopień
kompresji niż metoda Huffmana o kilka, kilkanaście procent. 2. Kodowanie
arytmetyczne jest wolniejsze niż kodowanie Huffmana
PODSUMOWANIE:
7
8
9
10
Algorytm Huffmana został zaproponowany w 1952 przez Davida Huffmana jako
część rozwiązania zadania na zajęciach studenckich. Kody generowane przez ten
algorytm nazywane są kodami Huffmana i są to kody prefiksowe. Kod jest kodem
prefiksowym, jeśli żadne słowo kodu nie jest przedrostkiem żadnego innego słowa
kodu.
Algorytm
Huffmana
nie
należy
do
najefektywniejszych
systemów
bezstratnej kompresji danych, dlatego też praktycznie nie używa się go
samodzielnie. Często wykorzystuje się go jako ostatni etap w różnych systemach
kompresji, zarówno bezstratnej, jak i stratnej, np. MP3lub JPEG. Pomimo że nie jest
doskonały, stosuje się go ze względu na prostotę oraz brak ograniczeń patentowych.
Jest to przykład wykorzystania algorytmu zachłannego.
Konstrukcja drzewa kodowego Huffmana
Konstrukcję optymalnego kodu prefiksowego zaproponował David Huffman. W tym
punkcie wykładu przedstawimy metodę budowy drzewa kodowego dla optymalnego
kodu prefiksowego Huffmana.
Drzewo kodowe Huffmana jest drzewem binarnym, lokalnie pełnym. W każdym
wierzchołku wewnętrznym tego drzewa pamiętamy sumę częstości znaków
występujących w poddrzewach tego wierzchołka. Każdy wierzchołek drzewa będzie
więc miał, oprócz referencji do lewego i prawego poddrzewa, atrybut f, oznaczający
częstość występowania znaku lub grupy znaków odpowiadających drzewu o korzeniu
w tym węźle. W liściach będą pamiętane dodatkowo znaki kodowanego alfabetu. Do
zapamiętania alfabetu oraz wierzchołków tworzonego drzewa, algorytm Huffmana
używa kolejki priorytetowej.
Szkic algorytmu
1. Utwórz kolejkę priorytetową zawierającą węzły tworzonego drzewa. Początkowo
elementami kolejki są liście drzewa. Porządek elementów w kolejce priorytetowej
zależy od częstości przypisanej znakom.
2. Drzewo kodowe buduje się od dołu, od liści, które są traktowane jako drzewa z
jednym tylko węzłem. W każdym kroku algorytmu, zamiast kolejnych dwóch
wierzchołków, których częstości są najmniejsze, wstawiamy do kolejki priorytetowej
pq nowy węzeł, którego etykietą jest suma częstości przypisanych usuniętym
węzłom. Punkt 2 powtarzamy, tak długo, aż w kolejce priorytetowej pozostanie
tylko jeden element. Będzie to korzeń drzewa kodowego.
Przykład:
11
Przyjmijmy, że w pewnym tekście występują tylko litery A, F, H, M, N, U, a ich
częstości występowania w tysiącach wynoszą odpowiednio:40,8,9,11,7,25. Kolejne
fazy działania algorytmu Huffmana przedstawiono na rysunku 11.3.
Z otrzymanego drzewa kodowego łatwo odczytujemy kody liter A - 0, F - 1101, H 1110, M - 1111, N - 1100, U - 10 . Ciąg 11101011011101111101100 jest kodem
słowa HUFFMAN.
12
Poniżej Tablica ASCII
13
14
15
Opis: Algorytm LZW jest:




algorytmem slownikowym, w którym nie istnieje predefiniowany slownik - jest
on dynamicznie tworzony na podstawie ciagu danych wejsciowych (podczas
kodowania i dekodowania). Buduje swój slownik z wystepujacych w danych
wejsciowych znaków.
algorytmem bezstratnym - dane zdekodowane sa identyczne z danymi przed
kodowaniem.
jednoprzebiegowy - dane sa czytane i kodowane na biezaco.
jednoznaczny - odkodowanie slowa nie moze prowadzic do dwóch róznych
wyników, dwa rózne slowa nie moga miec takiego samego kodu, co moze
prowadzic do niescislosci. Jest to warunek konieczny kompresji.
2. OPIS ALGORYTMU
Kodowanie metoda LZW
Metoda kodowania algorytmem LZW nie jest skomplikowana. Dane wejsciowe sa
sprawdzane ze slownikiem, jesli slowo wystepuje w slowniku to wczytujemy kolejny
wyraz, laczymy z poprzednim i znów sprawdzamy, jesli wyrazu nie ma w slowniku to
dolaczamy je do niego, nadajemy mu nowy kod a ostatni znak staje sie pierwszym
znakiem slowa nadchodzacego (nowego) i zwracamy kod ostatniego ciagu który byl
w slowniku.
W algorytmie moze ale nie musi byc równiez wykorzystywany podstawowy i staly
slownik (z pojedynczymi znakami). Jest to jednak rozwiazanie optymalizacyjne, taki
slownik jest maly i bitowa reprezentacja kodów z takiego slownika bedzie krótsza niz
ze slownika dynamicznego.
16
Dekodowanie metoda LZW
Dekodowanie jest procesem odwrotnym. Podczas wczytywania danych dekoder
tworzy taki sam slownik jaki stworzyl koder - co jest podstawa dzialania i warunkiem
prawidlowej dekompresji. Slownik uaktualniany jest przy kazdym przetwarzanym
slowie kodu (oprócz pierwszego z nich). Dla kazdego slowa kodu dekoder znajduje w
slowniku i zwraca odpowiadajacy mu ciag. Dekoder zapamietuje ciag i wczytywane
jest nastepne slowo. Algorytm ten okresla równiez dzialanie dla specjalnego
przypadku, gdy slowo kodu nie ma w slowniku odpowiadajacego mu hasla. Dzieje sie
tak gdy kodowany ciag znaków zawiera podciag sCsCs, gdzie s jest pojedynczym
symbolem, C jest ciagiem o dowolnej dlugosci i sC znajduje sie juz w slowniku.
17
18

Podobne dokumenty