Kodowanie i kompresja 1 Kompresja stratna 2 Kwantyzacja skalarna
Transkrypt
Kodowanie i kompresja 1 Kompresja stratna 2 Kwantyzacja skalarna
Kodowanie i kompresja Streszczenie Studia dzienne Wykład 12, 5.05.2005 1 Kompresja stratna Algorytmy kompresji bezstratnej oceniane sa˛ ze wzgl˛edu 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ł˛edu: d(x, y) = (x − y)2 • bład ˛ średniokwadratowy: 2 σ 2 = σx,y = N 1 X (xn − yn )2 , N n=1 gdzie x to dane oryginalne a y to dane zakodowane. • stosunek sygnału do szumu: SNR = σx2 2 σx,y • stosunek sygnału do szumu w skali logarytmicznej: SNR(dB) = 10 log10 σx2 2 σx,y Algorytmy kompresji stratnej wykorzystuja˛ również specyfik˛e percepcji wzrokowej (dla obrazów i danych wideo) i słuchowej (dla danych dźwi˛ekowych). 2 Kwantyzacja skalarna Kwantyzacja polega na reprezentowaniu dużego zbioru wartości (być może nieskończonego) za pomoca˛ wartości ze zbioru mniejszego. Chcemy osiagn ˛ ać ˛ dwa przeciwstawne cele: 1 • maksymalizacja stopnia kompresji; • minimalizacja zniekształceń. Kwantyzacja skalarna: każda wartość w ciagu ˛ kwantyzowana osobno. Kwantyzator: • odwzorowanie kodujace: ˛ – podział zbioru wartości danych wejściowych na ustalona˛ liczb˛e podprzedziałów, przyporzadkowanie ˛ przedziałom słów kodowych – każda wartość wejściowa reprezentowana jest przez słowo kodowe przedziału, do którego należy. • odwzorowanie dekodujace: ˛ – każdemu słowu kodowemu przyporzadkowujemy ˛ wartość rekonstrukcji (z przedziału, który koduje to słowo) – każde słowo kodowe w ciagu ˛ skompresowanym jest odtwarzane przy pomocy przypisanej mu wartości rekonstrukcji. Poj˛ecia: • granice decyzyjne: końce przedziałów (gdy M przedziałów, potrzeba M + 1 granic decyzyjnych); • poziomy rekonstrukcji: wartości przyporzadkowane ˛ przedziałom (M wartości dla M przedziałów); dla przedziałów nieskończonych dopuszczamy wartości ±∞. Miary jakości kwantyzatora: • średniokwadratowy bład ˛ kwantyzacji σq2 : 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 σq2 . M Niech {bi }M i=0 to granice decyzyjne, a {yi }i=1 to poziomy rekonstrukcji a fX to funkcja rozkładu prawdopodobieństwa danych wejściowych. Operacj˛e kwantyzacji definiujemy jako: Q(x) = yi ⇐⇒ bi−1 < x ≤ bi . Średniokwadratowy bład ˛ kwantyzacji jest równy: σq2 = Z ∞ −∞ (x − Q(x))2 fX (x)dx = 2 M Z bi X i=1 bi−1 (x − yi )2 fX (x)dx. A średnia długość słowa kodowego to R= M X li Z bi bi−1 i=1 fX (x)dx, gdzie li to długość słowa kodowego odpowiadajacego ˛ 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 wyjatkiem, ˛ 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 [−Xmax , Xmax ], kwantyzator ma M poziomów. Wówczas wielkość przedziału to 2Xmax M δ= a bład ˛ średniokwadratowy (“zniekształcenie”) σq2 = 2 M/2 Z iδ X i=1 (i−1)δ µ x− 2i − 1 δ 2 ¶2 1 δ2 dx = . 2Xmax 12 UWAGA: dla rozkładu jednostajnego i kwantyzatora równomiernego optymalne sa˛ słowa kodowe o stałej długości (z dokładnościa˛ do możliwości zaoszcz˛edzenia 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˛esto, że symetryczny wzgl˛edem zera). Cel: dla ustalonej liczby przedziałów M wyznaczyć optymalna˛ wielkość przedziałów (wszystkie przedziały za wyjatkiem ˛ skrajnych maja˛ równa˛ długość; skrajne nieograniczone z lewej/prawej). Bład ˛ średniokwadratowy dla symetrycznej funkcji rozkładu fX wyliczamy jako σq2 =2 M/2−1 Z iδ X i=1 (i−1)δ µ 2i − 1 x− δ 2 3 ¶2 fX (x)dx +2 µ Z ∞ (M/2−1)δ x− M −1 δ 2 ¶2 fX (x)dx. Wartość optymalna˛ wyznacza si˛e przez znalezienie miejsc zerowych pochodnej powyższego wyrażenia, w praktyce cz˛esto 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 sa˛ 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˛etrznych, należy zwi˛ekszyć krok kwantyzacji, w przeciwnym razie należy zmniejszyć krok kwantyzacji • dobór parametrów zwi˛ekszania/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 = wf (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 w1 , . . . , wM to ustalone współczynniki. Wartości w1 , . . . , wM dobieramy tak, że przedziałom bliskim zera odpowiadaja˛ wartości mniejsze od 1 a przedziałom zewn˛etrznym wartości wi˛eksze od 1. Skuteczność kwantyzatora Jayanta: zależna od doboru δ1 i parametrów w1 , . . . , wM . Sposób doboru współczynników w1 , . . . , wM (przy założeniu, że dane ze stacjonarnego procesu losowego): • gdy kwantyzator „pasuje” do danych wejściowych, zwi˛ekszanie i zmniejszanie kroku powinny si˛e znosić: nk ΠM k=0 wk = 1, gdzie nk to liczba elementów, które trafiaja˛ do k-tego przedziału. 4 • po obliczeniu pierwiastka N -tego stopnia, gdzie N to liczba elementów w danych wejściowych: Pk ΠM k=0 wk = 1, gdzie Pk = nk /N . • ograniczenie zbioru rozwiazań: ˛ wk = γ lk , gdzie γ > 1 to ustalony parametr (określajacy ˛ szybkość adaptacji/stabilność), a P lk to liczba całkowita. Uzyskujemy wtedy warunek M k=0 lk Pk = 0 Zasada: dobre kwantyzatory szybciej si˛e rozszerzaja˛ niż kurcza˛ (ze wzgl˛edu na nieograniczony bład ˛ w przedziałach zewn˛etrznych). 2.3 Kwantyzacja nierównomierna Zasada: przedziały kwantyzacji nie musza˛ mieć tej samej długości. Analogia do kodów o zmiennej długości: symbole o wi˛ekszym prawdopodobieństwie maja˛ krótsze słowa kodowe ↔ w obszarach o wi˛ekszym prawdopodobieństwie stosujemy mniejsze przedziały. Kwantyzacja optymalizowana ze wzgl˛edu na rozkład : gdy znany jest rozkład prawodpodobieństwa danych. Cel: dla znanej funkcji rozkładu prawdopodobieństwa fX i ustalonej liczby przedziałów M M należy dobrać granice decyzyjne {bi }M i=0 i poziomy rekonstrukcji {yi }i=1 , tak aby zminimalizować M Z bi X i=1 bi−1 (x − yi )2 fX (x)dx. Szukajac ˛ miejsc zerowych pochodnej wzgl˛edem yj w przedziale [bj−1 , bj ] uzyskujemy rozwiazanie: ˛ R bj xfX (x)dx b yj = Rj−1 bj bj−1 fX (x)dx Z kolei miejsca zerowe pochodnej wzgl˛edem bj to: bj = yj+1 + yj . 2 Iteracyjne poszukiwanie rozwiazań ˛ 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˛edu na symetri˛e, indeksujemy: y−M/2 , . . . , y−1 , y1 , . . . , yM/2 , oraz b−(M/2−1) , . . . , b−1 , b0 = 0, b1 , . . . , bM/2−1 . Wyznaczać b˛edziemy tylko wartości z dodatnimi indeksami, ponieważ y−j = yj i b−j = bj . 3. Przyjmujemy b0 = 0, y1 -dowolne. 4. Dla j = 2, . . . , M/2: (a) wyznaczamy bj−1 z równania jednej zmiennej R bj b yj = Rj−1 bj xfX (x)dx bj−1 fX (x)dx (b) wyznaczamy yj := 2bj−1 + yj−1 5. wyznaczamy bM/2 na podstawie danych wejściowych (np. jako maksymalna˛ wartość wejściowa) ˛ 6. jeśli różnica mi˛edzy wyliczona˛ w powyższy sposób wartościa˛ yM/2 a wyrażeniem R bM/2 bM/2−1 xfX (x)dx R bM/2 bM/2−1 fX (x)dx jest mniejsza od przyj˛etej wartości bł˛edu, kończymy obliczenia. W przeciwnym razie zwi˛ekszamy y1 (gdy powyższa różnica ujemna) lub zmiejszamy y1 (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˛e w czasie. Rozwiazanie: ˛ 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 funkcja˛ (kompresorem) dajac ˛ a˛ (w miar˛e) 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 wymagajacy ˛ znajomości funkcji rozkładu prawdopodobieństwa (przy pewnych upraszczajacych ˛ 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ład ˛ średniokwadratowy) i jak najmniejsza˛ średnia˛ 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 dlog M e, nie jest optymalizowana; 3. najpierw dobór granice decyzyjnych i poziomów rekonstrukcji, potem słów kodowych: • tworzymy kwantyzator minimalizujacy ˛ zniekształcenia (np. algorytm LloydaMaxa) • wartości wyjściowe kwantyzatora traktujemy jak ciag ˛ wartości niezależnych o prawdopodobieństwach równych prawdopodobieństwom poszczególnych przedziałów – stosujemy dla nich kodowanie dla ciagó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 przyporzadkowujemy ˛ 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˛e skwantyzowana˛ wartościa˛ tego bloku. Miary jakości kwantyzatora wektorowego: • (średniokwadratowy) bład ˛ kwantyzacji σq2 , w którym odległość mi˛edzy wektoP rami X = (x1 . . . xL ) i Y = (y1 . . . yL ) to kX − Y k; gdzie kXk2 = Li=1 x2i . • (średnia) liczba bitów na próbk˛e: równa L rozmiar kwantyzowanych wektorów. dlog Ke , L gdzie K to rozmiar słownika, a Pogladowe ˛ przykłady przewagi kwantyzacji wektorowej nad skalarna: ˛ • 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 uczacych ˛ {Xn }N n=1 , próg bł˛edu ε, M – liczba wektorów kodowych takie, że N À M . Cel: minimalizacja średniej odległości mi˛edzy wektorem uczacym ˛ a reprezentujacym ˛ go wektorem kodowym. (0) (0) 1. Wybierz dowolnie zbiór wektorów kodowych {Yi }M = 0. i=1 . Niech k = 0, D ˛ sposób: 2. Określ obszary kwantyzacji V1 , . . . , VM w nast˛epujacy (k) Vi (k) (k) Załóżmy, że Vi (k) = {Xn | d(Xn , Yi ) < d(Xn , Yj ) dla każd. j 6= i} 6= ∅ dla każdego i ∈ [1, M ]. 3. Oblicz średnia˛ odległość mi˛edzy wektorami uczacymi ˛ a odpowiadajacymi ˛ im wektorami kodowymi D (k) M X 1 X (k) = d(Xj , Yi ). N i=1 (k) Xj ∈Vi 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: (k+1) Yj = 1 X (k) |Vj | X ∈V (k) i j 8 Xi dla j ∈ [1, M ]. 6. Niech k := k + 1, przejdź do kroku 2 Problemy techniczne w algorytmie LBG: ˛ wektorów kodowych. • Wybór poczatkowych Technika podziałów: zaczynamy z jednym poczatkowym ˛ wektorem kodowym, po zastosowaniu algorytmu LBG dołaczamy ˛ drugi wektor, uzyskany z pierwszego przez dodanie ustalonego „wektora zaburzeń” γ. Majac ˛ 2i wektorów kodowych, i+1 stosujemy LBG i uzyskujemy 2 wektorów przez dodanie zaburzenia do każdego z wynikowych wektorów kodowych. Algorytm par najbliższych sasiadów ˛ (PNN): zaczynamy ze zbiorem wektorów kodowych równym zbiorowi uczacemu. ˛ W każdym kroku (aż do uzyskania M wektorów) wybieramy 2 najbliższe wektory kodowe i zast˛epujemy je ich średnia˛ i stosujemy algorytm LBG. • Problem pustych obszarów kwantyzacji. Metoda: usuwamy wektor kodowy odpowiadajacy ˛ pustemu obszarowi kwantyzacji, zast˛epujemy go losowo wybranym wektorem uczacym ˛ z obszaru kwantyzacji, który zawiera najwi˛ecej 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łaczenia ˛ słownika do danych). 3.1 Kwantyzatory o strukturze drzewiastej Idea: chcemy zmniejszyć liczb˛e porównań potrzebna˛ do ustalenia obszaru kwantyzacji, do którego należy dany wektor. Metoda: tworzymy zbalansowane drzewo binarne, w każdym w˛eź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˛e bliżej Z (zaczynajac ˛ od korzenia). Cechy: • czas znalezienia obszaru kwantyzacji dla danego wektora redukuje si˛e z M do d2 log M e; ˛ • wzrost zniekształceń: podział na obszary kwantyzacji nie zawsze przyparzadkowuje wektor do obszaru o najbliższym mu wektorze kodowym; • wzrost pami˛eci: oprócz wektorów kodowych, potrzeba M −1 wektorów w wierzchołkach wewn˛etrznych. 9 Ogólna metoda tworzenia kwantyzatora drzewiastego o gł˛ebokoś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 poczatkowe ˛ wektory kodowe: średnia˛ S z wektorów ze zbioru X i wektor otrzymany z S przez dodanie zaburzenia; • tworzymy kwantyzator z dwoma wektorami kodowymi (stosujac ˛ np. algorytm LBG) Y1 , Y2 ; • dzielimy X na X1 , X2 takie, że X1 składa si˛e z wektorów uczacych ˛ bliższych Y1 a X2 składa si˛e z wektorów uczacych ˛ bliższych Y2 • tworzymy (osobno!) kwantyzatory o gł˛ebokości k − 1 dla zbiorów X1 i X2 . Modyfikacje: „przycinanie” – usuwanie obszarów kwantyzacji, do których należy najmniej wektorów uczacych ˛ (zmniejszanie średniej długości słowa kodowego kosztem wzrostu zniekształceń). 10