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