Kompresja danych - Wydawnictwo BTC
Transkrypt
Kompresja danych - Wydawnictwo BTC
Spis treści 1. Wprowadzenie 1.1. Potrzeba kompresji . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Świat informacji cyfrowej . . . . . . . . . . . . . . 1.1.2. Rola kompresji . . . . . . . . . . . . . . . . . . . . 1.2. Ogólna charakterystyka danych . . . . . . . . . . . . . . . 1.2.1. Ciągi danych (jednowymiarowe) . . . . . . . . . . 1.2.2. Obrazy . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3. Dane złożone . . . . . . . . . . . . . . . . . . . . . 1.3. Podstawowe pojęcia . . . . . . . . . . . . . . . . . . . . . 1.3.1. Kompresja danych . . . . . . . . . . . . . . . . . . 1.3.2. Efektywność kompresji . . . . . . . . . . . . . . . . 1.4. Paradygmaty kompresji . . . . . . . . . . . . . . . . . . . 1.4.1. Kompresja bezstratna . . . . . . . . . . . . . . . . 1.4.2. Kompresja stratna . . . . . . . . . . . . . . . . . . 1.5. Krótka historia rozwoju metod kompresji . . . . . . . . . 1.6. Kilka uwag dotyczących praktycznej realizacji algorytmów 1.6.1. Własny koder od początku . . . . . . . . . . . . . 1.6.2. Wykorzystanie użytecznych narzędzi i bibliotek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . kompresji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 19 19 20 20 20 21 27 28 28 29 30 30 34 35 37 38 41 2. Teoretyczne podstawy kodowania 2.1. Podstawy teorii informacji . . . . . . . . . . . . . . 2.1.1. Modelowanie źródeł informacji . . . . . . . 2.1.2. Miary ilości informacji . . . . . . . . . . . . 2.1.3. Podstawowe twierdzenia i zasady kodowania 2.1.4. Pojęcie nadmiarowości . . . . . . . . . . . . 2.2. Wybrane przykłady metod kodowania . . . . . . . 2.2.1. Kod dwójkowy stałej długości . . . . . . . . 2.2.2. Kodowanie długości sekwencji (serii) . . . . 2.2.3. Kod Shannona . . . . . . . . . . . . . . . . 2.2.4. Transformacja Burrows-Wheelera . . . . . . 2.2.5. Kodery na bazie FSM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 44 46 50 52 61 64 64 65 67 68 71 3. Kodowanie Huffmana 3.1. Efektywny kod symboli . . . . . . . . . . . . . . . 3.1.1. Metoda Shannona-Fano . . . . . . . . . . . 3.1.2. Rozwiązanie optymalne: metoda Huffmana 3.2. Realizacja kodu Huffmana . . . . . . . . . . . . . . 3.2.1. Koder adaptacyjny – koncepcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 76 76 80 84 84 12 SPIS TREŚCI 3.2.2. Koder adaptacyjny – wybrane problemy 3.2.3. Znormalizowany koder statyczny . . . . 3.3. Kod Golomba . . . . . . . . . . . . . . . . . . . 3.3.1. Kod dwójkowy prawie stałej długości . . 3.3.2. Kod unarny . . . . . . . . . . . . . . . . 3.3.3. Elementarny kod Golomba . . . . . . . 3.3.4. Charakterystyka kodu Golomba . . . . . 3.3.5. Kody przedziałowe . . . . . . . . . . . . 3.4. Podsumowanie . . . . . . . . . . . . . . . . . . implementacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 93 97 97 99 101 103 111 112 4. Kodowanie arytmetyczne 4.1. Pomysł metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Ograniczenia optymalnego kodu symboli . . . . . . . . . . . . . . . . 4.1.2. Prawdopodobieństwo wystąpienia całej kodowanej sekwencji danych 4.1.3. Koncepcja kodu arytmetycznego . . . . . . . . . . . . . . . . . . . . 4.1.4. Kodowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.5. Dekodowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.6. Efektywność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.7. Wykorzystanie modelu źródła z pamięcią . . . . . . . . . . . . . . . 4.1.8. Historia pomysłu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Algorytmy kodera i dekodera . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Praktyczna realizacja w arytmetyce całkowitoliczbowej . . . . . . . . . . . . 4.3.1. Granice przedziału kodowego . . . . . . . . . . . . . . . . . . . . . . 4.3.2. Niedomiar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3. Algorytmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.4. Przykładowe procedury . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Modelowanie statystyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1. Algorytm statyczny . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2. Algorytm adaptacyjny (dynamiczny) . . . . . . . . . . . . . . . . . . 4.4.3. Modele Markowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.4. Dynamiczne konteksty i alfabety . . . . . . . . . . . . . . . . . . . . 4.4.5. PPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.6. CTW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5. Koder binarny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1. Algorytm podstawowy . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.2. Implementacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.3. Szybki BAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.4. Wybrane realizacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 114 114 115 116 117 118 118 119 119 119 123 123 124 124 128 131 131 131 132 136 136 138 142 143 144 150 151 5. Kodowanie słownikowe 5.1. Istota metody . . . . . . . . . . . . . . . . . . . . . 5.2. Koncepcje słownika . . . . . . . . . . . . . . . . . . 5.2.1. Statyczna . . . . . . . . . . . . . . . . . . . 5.2.2. Dynamiczna . . . . . . . . . . . . . . . . . . 5.3. Metoda LZ77 (słownik jako okno przesuwne) . . . 5.3.1. Ograniczenia efektywności . . . . . . . . . . 5.3.2. Modyfikacja LZSS . . . . . . . . . . . . . . 5.4. Metoda LZ78 (nieograniczony słownik zewnętrzny) 5.4.1. Ograniczenia efektywności . . . . . . . . . . 5.4.2. Modyfikacja LZW . . . . . . . . . . . . . . 5.5. Efektywne implementacje metod słownikowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 156 157 157 157 158 160 161 162 164 166 170 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SPIS TREŚCI 5.5.1. 5.5.2. 5.5.3. 5.5.4. 13 Entropijne kodowanie indeksów . . . . . Metody wykorzystujące koncepcję LZ77 Metody wykorzystujące koncepcję LZ78 Testy efektywności . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 171 173 173 6. Metody predykcyjne 6.1. Zagadnienie predykcji danych . . . . . . . . . . . . . . . . . . . . 6.1.1. Przewidywanie jest cechą modelowania . . . . . . . . . . . 6.1.2. Predykcja ze statystycznym modelem prawdopodobieństw 6.1.3. Predykcja z funkcją zależności danych . . . . . . . . . . . 6.2. Liniowa predykcja DPCM . . . . . . . . . . . . . . . . . . . . . . 6.2.1. Dobieranie modelu predykcji . . . . . . . . . . . . . . . . 6.3. Adaptacyjne modele predykcji . . . . . . . . . . . . . . . . . . . . 6.3.1. Adaptacja w przód . . . . . . . . . . . . . . . . . . . . . . 6.3.2. Adaptacja wstecz . . . . . . . . . . . . . . . . . . . . . . . 6.4. Predykcja w koderach obrazów . . . . . . . . . . . . . . . . . . . 6.4.1. Bezstratny JPEG . . . . . . . . . . . . . . . . . . . . . . . 6.4.2. PNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.3. Nieliniowy model predykcji MED/MAP . . . . . . . . . . 6.4.4. Model predykcji z gradientem GAP . . . . . . . . . . . . 6.4.5. Inne modele predykcji . . . . . . . . . . . . . . . . . . . . 6.4.6. Doskonalenie modeli adaptacyjnych . . . . . . . . . . . . . . . . . . . . . . . . . . . . warunkowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 176 176 177 178 181 182 188 189 190 192 192 193 194 195 195 196 7. Wybrane metody bezstratnej kompresji obrazów 7.1. Przeglądanie danych . . . . . . . . . . . . . . . . . . . . 7.1.1. Przykładowe metody porządkowania pikseli . . . 7.1.2. Krzywa Hilberta . . . . . . . . . . . . . . . . . . 7.1.3. Kodowanie uporządkowanych pikseli . . . . . . . 7.1.4. Skanowanie progresywne . . . . . . . . . . . . . . 7.2. Metody predykcyjne . . . . . . . . . . . . . . . . . . . . 7.2.1. Uproszczone modele predykcji . . . . . . . . . . . 7.2.2. Ocena efektywności predykcji . . . . . . . . . . . 7.2.3. Metody interpolacyjne . . . . . . . . . . . . . . . 7.3. Dwuwymiarowe modele statystyczne źródeł informacji . 7.3.1. Modelowanie kontekstu . . . . . . . . . . . . . . 7.3.2. PPPM . . . . . . . . . . . . . . . . . . . . . . . . 7.3.3. Efektywny koder obrazów . . . . . . . . . . . . . 7.4. Charakterystyka standardu JPEG-LS . . . . . . . . . . 7.4.1. Kodowanie sekwencji próbek identycznych . . . . 7.4.2. Nieliniowa predykcja w JPEG-LS . . . . . . . . . 7.4.3. Modelowanie kontekstu w JPEG-LS . . . . . . . 7.4.4. Binarne kodowanie błędu predykcji . . . . . . . . 7.5. Opis metody CALIC . . . . . . . . . . . . . . . . . . . . 7.5.1. Predykcja heurystyczna . . . . . . . . . . . . . . 7.5.2. Optymalizacja kontekstu modelu statystycznego 7.5.3. Algorytm kompresji . . . . . . . . . . . . . . . . 7.6. Metody falkowe . . . . . . . . . . . . . . . . . . . . . . . 7.6.1. Falkowa dekompozycja obrazów . . . . . . . . . . 7.6.2. Transformacje całkowitoliczbowe . . . . . . . . . 7.6.3. Realizacje za pomocą liftingu . . . . . . . . . . . 7.6.4. Algorytm kompresji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 198 198 200 202 204 207 208 210 212 214 215 217 218 218 219 219 220 221 222 222 225 228 229 230 230 235 237 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 SPIS TREŚCI 7.7. Binarne kodowanie obrazów . . . . . . . . . . . . . . . . . . 7.7.1. Obrazy czarno-białe . . . . . . . . . . . . . . . . . . 7.7.2. Obrazy wielopoziomowe . . . . . . . . . . . . . . . . 7.7.3. Standard JBIG . . . . . . . . . . . . . . . . . . . . . 7.8. Testy efektywności bezstratnych metod kompresji obrazów . 7.9. Bezstratna kompresja sekwencji obrazów . . . . . . . . . . . 7.10. Metody hybrydowe (złożone) . . . . . . . . . . . . . . . . . 7.10.1. Standard JBIG2 . . . . . . . . . . . . . . . . . . . . 7.10.2. CREW . . . . . . . . . . . . . . . . . . . . . . . . . 7.10.3. Format DjVu . . . . . . . . . . . . . . . . . . . . . . 7.11. Rzecz idzie o szybkość i funkcjonalność, czyli podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 239 240 241 241 246 249 249 249 250 251