1 Kompresja stratna Kodowanie i kompresja Streszczenie Studia dzienne Wykład 12, 5.05.2005 Algorytmy kompresji bezstratnej oceniane są ze względu na: stopień kompresji; czas działania procesu kodowania i dekodowania. W przypadku kompresji stratnej istotnym aspektem jest również stopień zniekształceń. Proste miary zniekształceń: kwadratowa miara błędu: d(x, y) = (x y) 2 błąd średniokwadratowy: σ 2 = σ 2 x,y = 1 N N (x n y n ) 2, n=1 gdzie x to dane oryginalne a y to dane zakodowane. stosunek sygnału do szumu: SNR = σ2 x σ 2 x,y stosunek sygnału do szumu w skali logarytmicznej: SNR(dB) = 10 log 10 Algorytmy kompresji stratnej wykorzystują również specyfikę percepcji wzrokowej (dla obrazów i danych wideo) i słuchowej (dla danych dźwiękowych). σ 2 x σ 2 x,y 2 Kwantyzacja skalarna Kwantyzacja polega na reprezentowaniu dużego zbioru wartości (być może nieskończonego) za pomocą wartości ze zbioru mniejszego. Chcemy osiągnąć dwa przeciwstawne cele: 1
maksymalizacja stopnia kompresji; minimalizacja zniekształceń. Kwantyzacja skalarna: każda wartość w ciągu kwantyzowana osobno. Kwantyzator: odwzorowanie kodujące: podział zbioru wartości danych wejściowych na ustaloną liczbę podprzedziałów, przyporządkowanie przedziałom słów kodowych każda wartość wejściowa reprezentowana jest przez słowo kodowe przedziału, do którego należy. odwzorowanie dekodujące: Pojęcia: każdemu słowu kodowemu przyporządkowujemy wartość rekonstrukcji (z przedziału, który koduje to słowo) każde słowo kodowe w ciągu skompresowanym jest odtwarzane przy pomocy przypisanej mu wartości rekonstrukcji. granice decyzyjne: końce przedziałów (gdy M przedziałów, potrzeba M + 1 granic decyzyjnych); poziomy rekonstrukcji: wartości przyporządkowane przedziałom (M wartości dla M przedziałów); dla przedziałów nieskończonych dopuszczamy wartości ±. Miary jakości kwantyzatora: średniokwadratowy błąd kwantyzacji σ 2 q: jak najmniejszy przy ustalonej (maksymalnej) średniej długości słowa kodowego. (średnia) długość słowa kodowego: jak najmniejsza przy ustalonej maksymalnej wartości σ 2 q. Niech {b i } M i=0 to granice decyzyjne, a {y i } M to poziomy rekonstrukcji a f X to funkcja rozkładu prawdopodobieństwa danych wejściowych. Operację kwantyzacji definiujemy jako: Q(x) = y i b i 1 < x b i. Średniokwadratowy błąd kwantyzacji jest równy: σ 2 q = (x Q(x)) 2 f X (x)dx = 2 M bi b i 1 (x y i ) 2 f X (x)dx.
A średnia długość słowa kodowego to M bi R = l i f X (x)dx, b i 1 gdzie l i to długość słowa kodowego odpowiadającego i-temu przedziałowi (i-tej wartości rekonstrukcji). UWAGA: przy słowach kodowych o zmiennej długości wartość ta zależy nie tylko od liczby przedziałów. 2.1 Kwantyzator równomierny Założenia: wszystkie przedziały tej samej długości (za wyjątkiem, ewentualnie, skrajnych), poziomy rekonstrukcji to środki przedziałów. Kwantyzator stały w zerze i ze skokiem w zerze. Kwantyzacja dla rozkładu jednostajnego Założenia: rozkład danych jednostajny w przedziale [ X max, X max ], kwantyzator ma M poziomów. Wówczas wielkość przedziału to δ = 2X max M a błąd średniokwadratowy ( zniekształcenie ) σ 2 q = 2 M/2 iδ (i 1)δ ( x 2i 1 2 ) 2 1 δ dx = δ2 2X max 12. UWAGA: dla rozkładu jednostajnego i kwantyzatora równomiernego optymalne są słowa kodowe o stałej długości (z dokładnością do możliwości zaoszczędzenia jednego bitu na niektórych słowach patrz kody stałe dla kodowania arytmetycznego). Kwantyzacja dla rozkładu niejednostajnego Założenie: rozkład danych w przedziale nieograniczonym (przyjmujemy często, że symetryczny względem zera). Cel: dla ustalonej liczby przedziałów M wyznaczyć optymalną wielkość przedziałów (wszystkie przedziały za wyjątkiem skrajnych mają równą długość; skrajne nieograniczone z lewej/prawej). Błąd średniokwadratowy dla symetrycznej funkcji rozkładu f X wyliczamy jako σ 2 q = 2 M/2 1 iδ ( x 2i 1 2 δ) f X (x)dx (i 1)δ 2 3
( +2 x M 1 2 δ) f X (x)dx. (M/2 1)δ 2 Wartość optymalną wyznacza się przez znalezienie miejsc zerowych pochodnej powyższego wyrażenia, w praktyce często przy pomocy metod numerycznych. 2.2 Kwantyzacja adaptacyjna Kwantyzacja adaptacyjna w przód (off-line) : dane dzielone na bloki, dla każdego bloku parametry kwantyzacji dobierane są po wcześniejszej analizie i przesyłane wraz ze skwantyzowanymi danymi. Kwantyzacja adaptacyjna w tył (on-line) : parametry kwantyzatora modyfikowane w oparciu o już zakodowane dane. Krokiem kwantyzacji nazywamy wielkość przedziału przy kwantyzacji jednostajnej. Idea kwantyzatora Jayanta (liczba przedziałów ustalona, celem optymalny dobór kroku kwantyzacji; rozkład jest symetryczny i nieskończony): jeżeli kolejna wartość wejściowa trafia do przedziałów wewnętrznych, należy zwiększyć krok kwantyzacji, w przeciwnym razie należy zmniejszyć krok kwantyzacji dobór parametrów zwiększania/zmniejszania powinien stabilizować krok kwantyzacji po dopasowaniu do rzeczywistego rozkładu danych. Generalnie, krok kwantyzacji przy kodowaniu n-tej wartości wejściowej wynosi δ n = w f(n 1) δ n 1, gdzie δ n 1 to krok dla (n 1)-szej wartości, f(n 1) to numer przedziału, do którego wpada wartość (n 1)sza, a w 1,..., w M to ustalone współczynniki. Wartości w 1,..., w M dobieramy tak, że przedziałom bliskim zera odpowiadają wartości mniejsze od 1 a przedziałom zewnętrznym wartości większe od 1. Skuteczność kwantyzatora Jayanta: zależna od doboru δ 1 i parametrów w 1,..., w M. Sposób doboru współczynników w 1,..., w M (przy założeniu, że dane ze stacjonarnego procesu losowego): gdy kwantyzator pasuje do danych wejściowych, zwiększanie i zmniejszanie kroku powinny się znosić: Π M k=0w n k k = 1, gdzie n k to liczba elementów, które trafiają do k-tego przedziału. 4
po obliczeniu pierwiastka N-tego stopnia, gdzie N to liczba elementów w danych wejściowych: Π M k=0w P k k = 1, gdzie P k = n k /N. ograniczenie zbioru rozwiązań: w k = γ l k, gdzie γ > 1 to ustalony parametr (określający szybkość adaptacji/stabilność), a l k to liczba całkowita. Uzyskujemy wtedy warunek M k=0 l k P k = 0 Zasada: dobre kwantyzatory szybciej się rozszerzają niż kurczą (ze względu na nieograniczony błąd w przedziałach zewnętrznych). 2.3 Kwantyzacja nierównomierna Zasada: przedziały kwantyzacji nie muszą mieć tej samej długości. Analogia do kodów o zmiennej długości: symbole o większym prawdopodobieństwie mają krótsze słowa kodowe w obszarach o większym prawdopodobieństwie stosujemy mniejsze przedziały. Kwantyzacja optymalizowana ze względu na rozkład : gdy znany jest rozkład prawodpodobieństwa danych. Cel: dla znanej funkcji rozkładu prawdopodobieństwa f X i ustalonej liczby przedziałów M należy dobrać granice decyzyjne {b i } M i=0 i poziomy rekonstrukcji {y i } M, tak aby zminimalizować M bi (x y i ) 2 f X (x)dx. b i 1 Szukając miejsc zerowych pochodnej względem y j w przedziale [b j 1, b j ] uzyskujemy rozwiązanie: bj b y j = j 1 xf X (x)dx bj b j 1 f X (x)dx Z kolei miejsca zerowe pochodnej względem b j to: b j = y j+1 + y j. 2 Iteracyjne poszukiwanie rozwiązań powyższych równań (algorytm Lloyda-Maxa): 5
1. Założenie: funkcja rozkładu prawdopodobieństwa jest symetryczna, projektujemy kwantyzator ze skokiem w zerze (czyli 0 ma być końcem przedziału), liczba przedziałów równa jest M. 2. Ze względu na symetrię, indeksujemy: y M/2,..., y 1, y 1,..., y M/2, oraz b (M/2 1),..., b 1, b 0 = 0, b 1,..., b M/2 1. Wyznaczać będziemy tylko wartości z dodatnimi indeksami, ponieważ y j = y j i b j = b j. 3. Przyjmujemy b 0 = 0, y 1 -dowolne. 4. Dla j = 2,..., M/2: (a) wyznaczamy b j 1 z równania jednej zmiennej y j = bj b j 1 xf X (x)dx bj b j 1 f X (x)dx (b) wyznaczamy y j := 2b j 1 + y j 1 5. wyznaczamy b M/2 na podstawie danych wejściowych (np. jako maksymalną wartość wejściową) 6. jeśli różnica między wyliczoną w powyższy sposób wartością y M/2 a wyrażeniem bm/2 b M/2 1 xf X (x)dx bm/2 b M/2 1 f X (x)dx jest mniejsza od przyjętej wartości błędu, kończymy obliczenia. W przeciwnym razie zwiększamy y 1 (gdy powyższa różnica ujemna) lub zmiejszamy y 1 (gdy powyższa różnica dodatnia) i przechodzimy do punktu 4. Niektóre dowodliwe własności kwantyzatora Lloyda-Maxa: wartość średnia danych wejściowych jest równa wartości średniej danych wyjściowych; wariancja danych wyjściowych jest mniejsza lub równa wariancji danych wejściwowych. Problem w zastosowaniach praktycznych (np. kwantyzacja mowy): rozkład danych zmienia się w czasie. Rozwiązanie: adaptacyjna wersja powyższej metody. 6
2.4 Kwantyzacja z kompanderem Idea: zamiast stosować przedziały o różnych długościach (kwantyzacja nierównomierna), przekształcamy dane wejściowe funkcją (kompresorem) dającą (w miarę) jednostajny rozkład. Dekodowanie wymaga wówczas zastosowania funkcji odwrotnej (ekspandera). Metoda ta stosowana jest w telefonii. Całka Bennnetta: sposób konstrukcji kompresora/ekspandera, nie wymagający znajomości funkcji rozkładu prawdopodobieństwa (przy pewnych upraszczających założeniach). 2.5 Optymalizacja średniej długości słowa kodowego Zadanie: dla ustalonej liczby przedziałów M, mamy ustalić granice decyzyjne, poziomy rekonstrukcji i słowa kodowe dla poziomów rekonstrucji tak, aby uzyskać jak najmniejsze zniekształcenie (błąd średniokwadratowy) i jak najmniejszą średnią długość słowa kodowego: Podejścia: 1. jednoczesny dobór wszystkich parametrów trudne; 2. słowa kodowe o stałej długości, algorytm dobiera granice decyzyjne i poziomy rekonstrukcji średnia długość słowa kodowego to log M, nie jest optymalizowana; 3. najpierw dobór granice decyzyjnych i poziomów rekonstrukcji, potem słów kodowych: tworzymy kwantyzator minimalizujący zniekształcenia (np. algorytm Lloyda- Maxa) wartości wyjściowe kwantyzatora traktujemy jak ciąg wartości niezależnych o prawdopodobieństwach równych prawdopodobieństwom poszczególnych przedziałów stosujemy dla nich kodowanie dla ciągów niezależnych (np. Huffmana, arytmetyczne). 3 Kwantyzacja wektorowa Kwantyzacja wektorowa: dane dzielone na bloki (wektory), każdy blok kwantyzowany jako jeden element danych. Ogólny schemat kwantyzacji wektorowej dla L-wymiarowych wektorów: ustalamy M wektorów L-wymiarowych jako wartości rekonstrukcji, nazywanych też wektorami kodowymi; każdemu z wektorów kodowych przyporządkowujemy indeks w tablicy tych wektorów, zwanej słownikiem; 7
dane dzielimy na bloki o długości L; dla każdego bloku danych znajdujemy najbliższy mu wektor kodowy i on staje się skwantyzowaną wartością tego bloku. Miary jakości kwantyzatora wektorowego: (średniokwadratowy) błąd kwantyzacji σ 2 q, w którym odległość między wektorami X = (x 1... x L ) i Y = (y 1... y L ) to X Y ; gdzie X 2 = L x 2 i. (średnia) liczba bitów na próbkę: równa L rozmiar kwantyzowanych wektorów. log K, gdzie K to rozmiar słownika, a L Poglądowe przykłady przewagi kwantyzacji wektorowej nad skalarną: dane skorelowane (np. pary (wzrost,waga)); dane nieskorelowane: wartości odwzorowane na konkretny wektor kodowy nie musza być zdefiniowane w postaci przedziałów ( prostopadłościanów ). Algorytm Lindego-Buzo-Graya (LBG) Dane: zbiór wektorów uczących {X n } N n=1, próg błędu ε, M liczba wektorów kodowych takie, że N M. Cel: minimalizacja średniej odległości między wektorem uczącym a reprezentującym go wektorem kodowym. 1. Wybierz dowolnie zbiór wektorów kodowych {Y (0) i } M. Niech k = 0, D (0) = 0. 2. Określ obszary kwantyzacji V 1,..., V M w następujący sposób: V (k) i Załóżmy, że V (k) i = {X n d(x n, Y (k) i ) < d(x n, Y (k) j ) dla każd. j i} dla każdego i [1, M]. 3. Oblicz średnią odległość między wektorami uczącymi a odpowiadającymi im wektorami kodowymi D (k) = 1 N M X j V (k) i d(x j, Y (k) i ). 4. Jeśli D(k) D (k 1) D (k) < ε, zakończ obliczenia. 5. niech nowe wektory kodowe to średnie wartości obszarów kwantyzacji: Y (k+1) j = 1 V (k) j X i V (k) j X i dla j [1, M]. 8
6. Niech k := k + 1, przejdź do kroku 2 Problemy techniczne w algorytmie LBG: Wybór początkowych wektorów kodowych. Technika podziałów: zaczynamy z jednym początkowym wektorem kodowym, po zastosowaniu algorytmu LBG dołączamy drugi wektor, uzyskany z pierwszego przez dodanie ustalonego wektora zaburzeń γ. Mając 2 i wektorów kodowych, stosujemy LBG i uzyskujemy 2 i+1 wektorów przez dodanie zaburzenia do każdego z wynikowych wektorów kodowych. Algorytm par najbliższych sąsiadów (PNN): zaczynamy ze zbiorem wektorów kodowych równym zbiorowi uczącemu. W każdym kroku (aż do uzyskania M wektorów) wybieramy 2 najbliższe wektory kodowe i zastępujemy je ich średnią i stosujemy algorytm LBG. Problem pustych obszarów kwantyzacji. Metoda: usuwamy wektor kodowy odpowiadający pustemu obszarowi kwantyzacji, zastępujemy go losowo wybranym wektorem uczącym z obszaru kwantyzacji, który zawiera najwięcej wektorów. Typowe zastosowanie: kompresja obrazów (wektory to bloki rozmiaru n m, co umożliwia wykorzystanie korelacji poziomych i pionowyc); ograniczeniem jest wzrost rozmiaru słownika i dobór słownika (statyczny czy projektowany dla każdego obrazka osobno, co wymaga dołączenia słownika do danych). 3.1 Kwantyzatory o strukturze drzewiastej Idea: chcemy zmniejszyć liczbę porównań potrzebną do ustalenia obszaru kwantyzacji, do którego należy dany wektor. Metoda: tworzymy zbalansowane drzewo binarne, w każdym węźle umieszczamy wektor, w liściach wektory kodowe; dla ustalenia obszaru kwantyzacji danego wektora Z, w każdym kroku przechodzimy do tego dziecka aktualnego wierzchołka w drzewie, który znajduje się bliżej Z (zaczynając od korzenia). Cechy: czas znalezienia obszaru kwantyzacji dla danego wektora redukuje się z M do 2 log M ; wzrost zniekształceń: podział na obszary kwantyzacji nie zawsze przyparządkowuje wektor do obszaru o najbliższym mu wektorze kodowym; wzrost pamięci: oprócz wektorów kodowych, potrzeba M 1 wektorów w wierzchołkach wewnętrznych. 9
Ogólna metoda tworzenia kwantyzatora drzewiastego o głębokości k dla zbioru wektorów X : jeśli k = 0: utwórz kwantyzator z jednym wektorem kodowym równym średniej z wektorów z X ; wybieramy dwa początkowe wektory kodowe: średnią S z wektorów ze zbioru X i wektor otrzymany z S przez dodanie zaburzenia; tworzymy kwantyzator z dwoma wektorami kodowymi (stosując np. algorytm LBG) Y 1, Y 2 ; dzielimy X na X 1, X 2 takie, że X 1 składa się z wektorów uczących bliższych Y 1 a X 2 składa się z wektorów uczących bliższych Y 2 tworzymy (osobno!) kwantyzatory o głębokości k 1 dla zbiorów X 1 i X 2. Modyfikacje: przycinanie usuwanie obszarów kwantyzacji, do których należy najmniej wektorów uczących (zmniejszanie średniej długości słowa kodowego kosztem wzrostu zniekształceń). 10