24.01.2014 Views

Kodowanie i kompresja 1 Kompresja stratna 2 Kwantyzacja skalarna

Kodowanie i kompresja 1 Kompresja stratna 2 Kwantyzacja skalarna

Kodowanie i kompresja 1 Kompresja stratna 2 Kwantyzacja skalarna

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1 <strong>Kompresja</strong> <strong>stratna</strong><br />

<strong>Kodowanie</strong> i <strong>kompresja</strong><br />

Streszczenie<br />

Studia dzienne<br />

Wykład 12, 5.05.2005<br />

Algorytmy kompresji bezstratnej oceniane są ze względu na:<br />

• stopień kompresji;<br />

• czas działania procesu kodowania i dekodowania.<br />

W przypadku kompresji stratnej istotnym aspektem jest również stopień zniekształceń.<br />

Proste miary zniekształceń:<br />

• kwadratowa miara błędu: d(x, y) = (x − y) 2<br />

• błąd średniokwadratowy:<br />

σ 2 = σ 2 x,y = 1 N<br />

N∑<br />

(x n − y n ) 2 ,<br />

n=1<br />

gdzie x to dane oryginalne a y to dane zakodowane.<br />

• stosunek sygnału do szumu:<br />

SNR = σ2 x<br />

σ 2 x,y<br />

• stosunek sygnału do szumu w skali logarytmicznej:<br />

SNR(dB) = 10 log 10<br />

Algorytmy kompresji stratnej wykorzystują również specyfikę percepcji wzrokowej (dla<br />

obrazów i danych wideo) i słuchowej (dla danych dźwiękowych).<br />

σ 2 x<br />

σ 2 x,y<br />

2 <strong>Kwantyzacja</strong> <strong>skalarna</strong><br />

<strong>Kwantyzacja</strong> polega na reprezentowaniu dużego zbioru wartości (być może nieskończonego)<br />

za pomocą wartości ze zbioru mniejszego. Chcemy osiągnąć dwa przeciwstawne<br />

cele:<br />

1


• maksymalizacja stopnia kompresji;<br />

• minimalizacja zniekształceń.<br />

<strong>Kwantyzacja</strong> <strong>skalarna</strong>: każda wartość w ciągu kwantyzowana osobno.<br />

Kwantyzator:<br />

• odwzorowanie kodujące:<br />

– podział zbioru wartości danych wejściowych na ustaloną liczbę podprzedziałów,<br />

przyporządkowanie przedziałom słów kodowych<br />

– każda wartość wejściowa reprezentowana jest przez słowo kodowe przedziału,<br />

do którego należy.<br />

• odwzorowanie dekodujące:<br />

Pojęcia:<br />

– każdemu słowu kodowemu przyporządkowujemy wartość rekonstrukcji (z<br />

przedziału, który koduje to słowo)<br />

– każde słowo kodowe w ciągu skompresowanym jest odtwarzane przy pomocy<br />

przypisanej mu wartości rekonstrukcji.<br />

• granice decyzyjne: końce przedziałów (gdy M przedziałów, potrzeba M + 1 granic<br />

decyzyjnych);<br />

• poziomy rekonstrukcji: wartości przyporządkowane przedziałom (M wartości dla<br />

M przedziałów); dla przedziałów nieskończonych dopuszczamy wartości ±∞.<br />

Miary jakości kwantyzatora:<br />

• średniokwadratowy błąd kwantyzacji σ 2 q: jak najmniejszy przy ustalonej (maksymalnej)<br />

średniej długości słowa kodowego.<br />

• (średnia) długość słowa kodowego: jak najmniejsza przy ustalonej maksymalnej<br />

wartości σ 2 q.<br />

Niech {b i } M i=0 to granice decyzyjne, a {y i } M i=1 to poziomy rekonstrukcji a f X to funkcja<br />

rozkładu prawdopodobieństwa danych wejściowych. Operację kwantyzacji definiujemy<br />

jako:<br />

Q(x) = y i ⇐⇒ b i−1 < x ≤ b i .<br />

Średniokwadratowy błąd kwantyzacji jest równy:<br />

σ 2 q =<br />

∫ ∞<br />

−∞<br />

(x − Q(x)) 2 f X (x)dx =<br />

2<br />

M∑<br />

i=1<br />

∫ bi<br />

b i−1<br />

(x − y i ) 2 f X (x)dx.


A średnia długość słowa kodowego to<br />

M∑<br />

∫ bi<br />

R = l i f X (x)dx,<br />

i=1<br />

b i−1<br />

gdzie l i to długość słowa kodowego odpowiadającego i-temu przedziałowi (i-tej wartości<br />

rekonstrukcji).<br />

UWAGA: przy słowach kodowych o zmiennej długości wartość ta zależy nie tylko od<br />

liczby przedziałów.<br />

2.1 Kwantyzator równomierny<br />

Założenia: wszystkie przedziały tej samej długości (za wyjątkiem, ewentualnie, skrajnych),<br />

poziomy rekonstrukcji to środki przedziałów.<br />

Kwantyzator stały w zerze i ze skokiem w zerze.<br />

<strong>Kwantyzacja</strong> dla rozkładu jednostajnego Założenia: rozkład danych jednostajny w<br />

przedziale [−X max , X max ], kwantyzator ma M poziomów.<br />

Wówczas wielkość przedziału to<br />

δ = 2X max<br />

M<br />

a błąd średniokwadratowy (“zniekształcenie”)<br />

σ 2 q = 2<br />

M/2<br />

∑<br />

i=1<br />

∫ iδ<br />

(i−1)δ<br />

(<br />

x − 2i − 1<br />

2<br />

) 2 1<br />

δ dx = δ2<br />

2X max 12 .<br />

UWAGA: dla rozkładu jednostajnego i kwantyzatora równomiernego optymalne są słowa<br />

kodowe o stałej długości (z dokładnością do możliwości zaoszczędzenia jednego bitu<br />

na niektórych słowach – patrz kody stałe dla kodowania arytmetycznego).<br />

<strong>Kwantyzacja</strong> dla rozkładu niejednostajnego Założenie: rozkład danych w przedziale<br />

nieograniczonym (przyjmujemy często, że symetryczny względem zera).<br />

Cel: dla ustalonej liczby przedziałów M wyznaczyć optymalną wielkość przedziałów<br />

(wszystkie przedziały za wyjątkiem skrajnych mają równą długość; skrajne nieograniczone<br />

z lewej/prawej).<br />

Błąd średniokwadratowy dla symetrycznej funkcji rozkładu f X wyliczamy jako<br />

σ 2 q = 2<br />

M/2−1<br />

∑<br />

i=1<br />

∫ iδ (<br />

x − 2i − 1 2<br />

δ)<br />

f X (x)dx<br />

(i−1)δ 2<br />

3


∫ ∞ (<br />

+2 x − M − 1 2<br />

δ)<br />

f X (x)dx.<br />

(M/2−1)δ 2<br />

Wartość optymalną wyznacza się przez znalezienie miejsc zerowych pochodnej powyższego<br />

wyrażenia, w praktyce często przy pomocy metod numerycznych.<br />

2.2 <strong>Kwantyzacja</strong> adaptacyjna<br />

<strong>Kwantyzacja</strong> adaptacyjna w przód (off-line) : dane dzielone na bloki, dla każdego<br />

bloku parametry kwantyzacji dobierane są po wcześniejszej analizie i przesyłane wraz<br />

ze skwantyzowanymi danymi.<br />

<strong>Kwantyzacja</strong> adaptacyjna w tył (on-line) : parametry kwantyzatora modyfikowane<br />

w oparciu o już zakodowane dane.<br />

Krokiem kwantyzacji nazywamy wielkość przedziału przy kwantyzacji jednostajnej.<br />

Idea kwantyzatora Jayanta (liczba przedziałów ustalona, celem optymalny dobór kroku<br />

kwantyzacji; rozkład jest symetryczny i nieskończony):<br />

• jeżeli kolejna wartość wejściowa trafia do przedziałów wewnętrznych, należy<br />

zwiększyć krok kwantyzacji, w przeciwnym razie należy zmniejszyć krok kwantyzacji<br />

• dobór parametrów zwiększania/zmniejszania powinien „stabilizować” krok kwantyzacji<br />

po dopasowaniu do rzeczywistego rozkładu danych.<br />

Generalnie, krok kwantyzacji przy kodowaniu n-tej wartości wejściowej wynosi<br />

δ n = w f(n−1) δ n−1 ,<br />

gdzie δ n−1 to krok dla (n − 1)-szej wartości, f(n − 1) to numer przedziału, do którego<br />

wpada wartość (n − 1)sza, a w 1 , . . . , w M to ustalone współczynniki.<br />

Wartości w 1 , . . . , w M dobieramy tak, że przedziałom bliskim zera odpowiadają wartości<br />

mniejsze od 1 a przedziałom zewnętrznym wartości większe od 1.<br />

Skuteczność kwantyzatora Jayanta: zależna od doboru δ 1 i parametrów w 1 , . . . , w M .<br />

Sposób doboru współczynników w 1 , . . . , w M (przy założeniu, że dane ze stacjonarnego<br />

procesu losowego):<br />

• gdy kwantyzator „pasuje” do danych wejściowych, zwiększanie i zmniejszanie<br />

kroku powinny się znosić:<br />

Π M k=0w n k<br />

k = 1,<br />

gdzie n k to liczba elementów, które trafiają do k-tego przedziału.<br />

4


• po obliczeniu pierwiastka N-tego stopnia, gdzie N to liczba elementów w danych<br />

wejściowych:<br />

Π M k=0w P k<br />

k = 1,<br />

gdzie P k = n k /N.<br />

• ograniczenie zbioru rozwiązań:<br />

w k = γ l k<br />

,<br />

gdzie γ > 1 to ustalony parametr (określający szybkość adaptacji/stabilność), a<br />

l k to liczba całkowita. Uzyskujemy wtedy warunek ∑ M<br />

k=0 l k P k = 0<br />

Zasada: dobre kwantyzatory szybciej się rozszerzają niż kurczą (ze względu na nieograniczony<br />

błąd w przedziałach zewnętrznych).<br />

2.3 <strong>Kwantyzacja</strong> nierównomierna<br />

Zasada: przedziały kwantyzacji nie muszą mieć tej samej długości.<br />

Analogia do kodów o zmiennej długości:<br />

symbole o większym prawdopodobieństwie mają krótsze słowa kodowe ↔ w obszarach<br />

o większym prawdopodobieństwie stosujemy mniejsze przedziały.<br />

<strong>Kwantyzacja</strong> optymalizowana ze względu na rozkład : gdy znany jest rozkład prawodpodobieństwa<br />

danych.<br />

Cel: dla znanej funkcji rozkładu prawdopodobieństwa f X i ustalonej liczby przedziałów<br />

M należy dobrać granice decyzyjne {b i } M i=0 i poziomy rekonstrukcji {y i } M i=1, tak aby<br />

zminimalizować<br />

M∑<br />

∫ bi<br />

(x − y i ) 2 f X (x)dx.<br />

b i−1<br />

i=1<br />

Szukając miejsc zerowych pochodnej względem y j w przedziale [b j−1 , b j ] uzyskujemy<br />

rozwiązanie:<br />

∫ bj<br />

b<br />

y j =<br />

j−1<br />

xf X (x)dx<br />

∫ bj<br />

b j−1<br />

f X (x)dx<br />

Z kolei miejsca zerowe pochodnej względem b j to:<br />

b j = y j+1 + y j<br />

.<br />

2<br />

Iteracyjne poszukiwanie rozwiązań powyższych równań (algorytm Lloyda-Maxa):<br />

5


1. Założenie: funkcja rozkładu prawdopodobieństwa jest symetryczna, projektujemy<br />

kwantyzator ze skokiem w zerze (czyli 0 ma być końcem przedziału), liczba<br />

przedziałów równa jest M.<br />

2. Ze względu na symetrię, indeksujemy: y −M/2 , . . . , y −1 , y 1 , . . . , y M/2 , oraz b −(M/2−1) , . . . , b −1 ,<br />

b 0 = 0, b 1 , . . . , b M/2−1 . Wyznaczać będziemy tylko wartości z dodatnimi indeksami,<br />

ponieważ y −j = y j i b −j = b j .<br />

3. Przyjmujemy b 0 = 0, y 1 -dowolne.<br />

4. Dla j = 2, . . . , M/2:<br />

(a) wyznaczamy b j−1 z równania jednej zmiennej<br />

y j =<br />

∫ bj<br />

b j−1<br />

xf X (x)dx<br />

∫ bj<br />

b j−1<br />

f X (x)dx<br />

(b) wyznaczamy y j := 2b j−1 + y j−1<br />

5. wyznaczamy b M/2 na podstawie danych wejściowych (np. jako maksymalną wartość<br />

wejściową)<br />

6. jeśli różnica między wyliczoną w powyższy sposób wartością y M/2 a wyrażeniem<br />

∫ bM/2<br />

b M/2−1<br />

xf X (x)dx<br />

∫ bM/2<br />

b M/2−1<br />

f X (x)dx<br />

jest mniejsza od przyjętej wartości błędu, kończymy obliczenia. W przeciwnym<br />

razie zwiększamy y 1 (gdy powyższa różnica ujemna) lub zmiejszamy y 1 (gdy<br />

powyższa różnica dodatnia) i przechodzimy do punktu 4.<br />

Niektóre dowodliwe własności kwantyzatora Lloyda-Maxa:<br />

• wartość średnia danych wejściowych jest równa wartości średniej danych wyjściowych;<br />

• wariancja danych wyjściowych jest mniejsza lub równa wariancji danych wejściwowych.<br />

Problem w zastosowaniach praktycznych (np. kwantyzacja mowy): rozkład danych<br />

zmienia się w czasie. Rozwiązanie: adaptacyjna wersja powyższej metody.<br />

6


2.4 <strong>Kwantyzacja</strong> z kompanderem<br />

Idea: zamiast stosować przedziały o różnych długościach (kwantyzacja nierównomierna),<br />

przekształcamy dane wejściowe funkcją (kompresorem) dającą (w miarę) jednostajny<br />

rozkład. Dekodowanie wymaga wówczas zastosowania funkcji odwrotnej (ekspandera).<br />

Metoda ta stosowana jest w telefonii.<br />

Całka Bennnetta: sposób konstrukcji kompresora/ekspandera, nie wymagający znajomości<br />

funkcji rozkładu prawdopodobieństwa (przy pewnych upraszczających założeniach).<br />

2.5 Optymalizacja średniej długości słowa kodowego<br />

Zadanie: dla ustalonej liczby przedziałów M, mamy ustalić granice decyzyjne, poziomy<br />

rekonstrukcji i słowa kodowe dla poziomów rekonstrucji tak, aby uzyskać jak najmniejsze<br />

zniekształcenie (błąd średniokwadratowy) i jak najmniejszą średnią długość słowa<br />

kodowego: Podejścia:<br />

1. jednoczesny dobór wszystkich parametrów – trudne;<br />

2. słowa kodowe o stałej długości, algorytm dobiera granice decyzyjne i poziomy<br />

rekonstrukcji – średnia długość słowa kodowego to ⌈log M⌉, nie jest optymalizowana;<br />

3. najpierw dobór granice decyzyjnych i poziomów rekonstrukcji, potem słów kodowych:<br />

• tworzymy kwantyzator minimalizujący zniekształcenia (np. algorytm Lloyda-<br />

Maxa)<br />

• wartości wyjściowe kwantyzatora traktujemy jak ciąg wartości niezależnych<br />

o prawdopodobieństwach równych prawdopodobieństwom poszczególnych<br />

przedziałów – stosujemy dla nich kodowanie dla ciągów niezależnych (np.<br />

Huffmana, arytmetyczne).<br />

3 <strong>Kwantyzacja</strong> wektorowa<br />

<strong>Kwantyzacja</strong> wektorowa: dane dzielone na bloki (wektory), każdy blok kwantyzowany<br />

jako jeden element danych.<br />

Ogólny schemat kwantyzacji wektorowej dla L-wymiarowych wektorów:<br />

• ustalamy M wektorów L-wymiarowych jako wartości rekonstrukcji, nazywanych<br />

też wektorami kodowymi; każdemu z wektorów kodowych przyporządkowujemy<br />

indeks w tablicy tych wektorów, zwanej słownikiem;<br />

7


• dane dzielimy na bloki o długości L;<br />

• dla każdego bloku danych znajdujemy najbliższy mu wektor kodowy i on staje<br />

się skwantyzowaną wartością tego bloku.<br />

Miary jakości kwantyzatora wektorowego:<br />

• (średniokwadratowy) błąd kwantyzacji σ 2 q, w którym odległość między wektorami<br />

X = (x 1 . . . x L ) i Y = (y 1 . . . y L ) to ‖X − Y ‖; gdzie ‖X‖ 2 = ∑ L<br />

i=1 x 2 i .<br />

• (średnia) liczba bitów na próbkę: równa<br />

L rozmiar kwantyzowanych wektorów.<br />

⌈log K⌉<br />

, gdzie K to rozmiar słownika, a<br />

L<br />

Poglądowe przykłady przewagi kwantyzacji wektorowej nad skalarną:<br />

• dane skorelowane (np. pary (wzrost,waga));<br />

• dane nieskorelowane: wartości odwzorowane na konkretny wektor kodowy nie<br />

musza˛<br />

być zdefiniowane w postaci przedziałów („prostopadłościanów”).<br />

Algorytm Lindego-Buzo-Graya (LBG) Dane: zbiór wektorów uczących {X n } N n=1,<br />

próg błędu ε, M – liczba wektorów kodowych takie, że N ≫ M.<br />

Cel: minimalizacja średniej odległości między wektorem uczącym a reprezentującym<br />

go wektorem kodowym.<br />

1. Wybierz dowolnie zbiór wektorów kodowych {Y (0)<br />

i } M i=1. Niech k = 0, D (0) = 0.<br />

2. Określ obszary kwantyzacji V 1 , . . . , V M w następujący sposób:<br />

V (k)<br />

i<br />

Załóżmy, że V (k)<br />

i<br />

= {X n | d(X n , Y (k)<br />

i ) < d(X n , Y (k)<br />

j ) dla każd. j ≠ i}<br />

≠ ∅ dla każdego i ∈ [1, M].<br />

3. Oblicz średnią odległość między wektorami uczącymi a odpowiadającymi im<br />

wektorami kodowymi<br />

D (k) = 1 N<br />

M∑<br />

i=1<br />

∑<br />

X j ∈V (k)<br />

i<br />

d(X j , Y (k)<br />

i ).<br />

4. Jeśli D(k) −D (k−1)<br />

D (k)<br />

< ε, zakończ obliczenia.<br />

5. niech nowe wektory kodowe to średnie wartości obszarów kwantyzacji:<br />

Y (k+1)<br />

j = 1<br />

|V (k)<br />

j |<br />

∑<br />

X i ∈V (k)<br />

j<br />

X i dla j ∈ [1, M].<br />

8


6. Niech k := k + 1, przejdź do kroku 2<br />

Problemy techniczne w algorytmie LBG:<br />

• Wybór początkowych wektorów kodowych.<br />

Technika podziałów: zaczynamy z jednym początkowym wektorem kodowym,<br />

po zastosowaniu algorytmu LBG dołączamy drugi wektor, uzyskany z pierwszego<br />

przez dodanie ustalonego „wektora zaburzeń” γ. Mając 2 i wektorów kodowych,<br />

stosujemy LBG i uzyskujemy 2 i+1 wektorów przez dodanie zaburzenia do każdego<br />

z wynikowych wektorów kodowych.<br />

Algorytm par najbliższych sąsiadów (PNN): zaczynamy ze zbiorem wektorów<br />

kodowych równym zbiorowi uczącemu. W każdym kroku (aż do uzyskania M<br />

wektorów) wybieramy 2 najbliższe wektory kodowe i zastępujemy je ich średnią<br />

i stosujemy algorytm LBG.<br />

• Problem pustych obszarów kwantyzacji.<br />

Metoda: usuwamy wektor kodowy odpowiadający pustemu obszarowi kwantyzacji,<br />

zastępujemy go losowo wybranym wektorem uczącym z obszaru kwantyzacji,<br />

który zawiera najwięcej wektorów.<br />

Typowe zastosowanie: <strong>kompresja</strong> obrazów (wektory to bloki rozmiaru n×m, co umożliwia<br />

wykorzystanie korelacji poziomych i pionowyc); ograniczeniem jest wzrost rozmiaru<br />

słownika i dobór słownika (statyczny czy projektowany dla każdego obrazka<br />

osobno, co wymaga dołączenia słownika do danych).<br />

3.1 Kwantyzatory o strukturze drzewiastej<br />

Idea: chcemy zmniejszyć liczbę porównań potrzebną do ustalenia obszaru kwantyzacji,<br />

do którego należy dany wektor.<br />

Metoda: tworzymy zbalansowane drzewo binarne, w każdym węźle umieszczamy wektor,<br />

w liściach wektory kodowe; dla ustalenia obszaru kwantyzacji danego wektora Z, w<br />

każdym kroku przechodzimy do tego dziecka aktualnego wierzchołka w drzewie, który<br />

znajduje się bliżej Z (zaczynając od korzenia).<br />

Cechy:<br />

• czas znalezienia obszaru kwantyzacji dla danego wektora redukuje się z M do<br />

⌈2 log M⌉;<br />

• wzrost zniekształceń: podział na obszary kwantyzacji nie zawsze przyparządkowuje<br />

wektor do obszaru o najbliższym mu wektorze kodowym;<br />

• wzrost pamięci: oprócz wektorów kodowych, potrzeba M −1 wektorów w wierzchołkach<br />

wewnętrznych.<br />

9


Ogólna metoda tworzenia kwantyzatora drzewiastego o głębokości k dla zbioru wektorów<br />

X :<br />

• jeśli k = 0: utwórz kwantyzator z jednym wektorem kodowym równym średniej<br />

z wektorów z X ;<br />

• wybieramy dwa początkowe wektory kodowe: średnią S z wektorów ze zbioru X<br />

i wektor otrzymany z S przez dodanie zaburzenia;<br />

• tworzymy kwantyzator z dwoma wektorami kodowymi (stosując np. algorytm<br />

LBG) Y 1 , Y 2 ;<br />

• dzielimy X na X 1 , X 2 takie, że X 1 składa się z wektorów uczących bliższych Y 1<br />

a X 2 składa się z wektorów uczących bliższych Y 2<br />

• tworzymy (osobno!) kwantyzatory o głębokości k − 1 dla zbiorów X 1 i X 2 .<br />

Modyfikacje: „przycinanie” – usuwanie obszarów kwantyzacji, do których należy najmniej<br />

wektorów uczących (zmniejszanie średniej długości słowa kodowego kosztem<br />

wzrostu zniekształceń).<br />

10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!