Wyklad 11
Transkrypt
Wyklad 11
Kodowanie transformujace ˛ Kompresja danych Tomasz Jurdziński Wykład 11: Transformaty i JPEG Jurdziński Kompresja danych Kodowanie transformujace ˛ Idea kodowania transformujacego ˛ Etapy kodowania 1 Wektor danych x0 , . . . , xN−1 przekształcamy (odwracalnie!) na wektor c0 , . . . , cN−1 , tak aby: „energia” była skoncentrowana w kilku współrz˛ednych (czyli tylko kilka współrz˛ednych jest ważna); ciag ˛ c0 , . . . , cN−1 nie jest skorelowany (dekorelujemy ciag ˛ x0 , . . . , xN−1 ). 2 3 Wartości c0 , . . . , cN−1 kwantyzujemy skalarnie: wiecej ˛ bitów przydzielamy ważniejszym współrz˛ednym. Kodujemy bezstratnie wartości skwantyzowane. Jurdziński Kompresja danych Kodowanie transformujace ˛ Idea kodowania transformujacego ˛ Dekodowanie 1 2 3 Dekodowanie: odpowiedni algorytm bezstratny. Z odtworzonych wartości skwantyzowanych uzyskujemy przybliżone wartości współczynników po kwantyzacji: 0 c00 , . . . , cN−1 . Stosujemy transformate˛ odwrotna: ˛ z przybliżonych wartości 0 0 c00 , . . . , cN−1 uzyskujemy przybliżone wartości x00 , . . . , xN−1 . Jurdziński Kompresja danych Kodowanie transformujace ˛ Transformaty Jakie transformaty nas interesuja? ˛ traktujemy ciag ˛ wartości (x0 , . . . , xN−1 ) jako wektor w przestrzeni ℜN , reprezentowany w bazie standardowej; chcemy znaleźć nowa, ˛ inna˛ baz˛e przestrzeni ℜN i wyrażać wektory w tej nowej bazie; algebraicznie: odpowiada to przekształceniu liniowemu, definiowanemu przez macierz rozmiaru N × N; geometrycznie: oznacza to “obrót” układu współrz˛ednych. Jurdziński Kompresja danych Kodowanie transformujace ˛ Pojecia ˛ Definicja Jednowymiarowa dyskretna transformata „liniowa” wektora (x0 , . . . , xN−1 ) przekształca go na wektor (θ1 , . . . , θn ) wg wzoru: N−1 θk = ∑ xn a(k , n) dla k = 0, 1, . . . , N − 1, n =0 gdzie ai,j dla i, j ∈ [0, N − 1] to ustalone liczby. Iloczyn skalarny wektorów X = (x0 , . . . , xN−1 ) i Y = (y1 , . . . , yn ) jest równy X · Y = ∑ni=1 xi yi . Wektory X1 , . . . , Xk sa˛ ortogonalne jeśli Xi · Xj = 0 dla każdego i 6= j. Wektory X1 , . . . , Xk sa˛ ortonormalne jeśli sa˛ ortogonalne i Xi · Xi = 1 dla każdego i ∈ [1, k ]. Jurdziński Kompresja danych Kodowanie transformujace ˛ Własności Co daje ortonormalność Transformate˛ dana˛ przez współczynniki {ai,j }i,j∈[0,N−1] można zapisać macierzowo jako θ = Ax, gdzie A = (ai,j ). Jeśli wiersze macierzy A = (ai,j ) sa˛ ortonormalne, to A−1 = AT , a zatem: x = AT θ , co wynika z x = A−1 Ax = AT θ . Jurdziński Kompresja danych Kodowanie transformujace ˛ Własności c.d. Reprezentacje w różnych bazach Niech x bedzie ˛ wektorem w bazie standardowej (wektory bazy tworza˛ macierz jednostkowa). ˛ Wektor θ = Ax jest reprezentacja˛ wektora x w bazie złożonej z wierszy macierzy A: x = AT Ax = AT θ = θ0 AT0 + . . . + θN−1 ATN−1 gdzie Ai to i-ty wiersz macierzy A. Transformata oparta na bazie ortonormalnej zachowuje energie˛ Niech energia wektora x = (x0 , . . . , xN−1 ) bedzie ˛ równa 2 . Wówczas: x · x = ∑N−1 x i =0 i N−1 ∑ xi2 = i =0 N−1 ∑ θi2 , i =0 2 T T T T T ponieważ ∑N−1 i =0 θi = θ θ = (Ax) (Ax) = x (A A)x = x x. Jurdziński Kompresja danych Kodowanie transformujace ˛ Transformaty dwuwymiarowe Zastosowanie w kodowaniu obrazów Korelacje zachodza˛ zarówno w wierszach jak i w kolumnach! Transformata dwuwymiarowa Dwuwymiarowa dyskretna transformata θ macierzy (xi,j )i,j∈[0,N−1] zdefiniowana jest wzorem N−1 N−1 θk ,l = ∑ ∑ xi,j a(k , l, i, j) dla k , l = [0, N − 1]. i =0 j = 0 Jurdziński Kompresja danych Kodowanie transformujace ˛ Jakie transformaty dwuwymiarowe? Transformaty dwuwymiarowe stosowane zazwyczaj w kompresji oparte na transformacie jednowymiarowej; najpierw transformata wierszy (macierzy danych xi,j ); potem transformata (taka sama) kolumn macierzy uzyskanej po transformacie wierszy. Interpretacja arytmetyczna: A-macierz transformaty, X -macierz danych niech Xi to i-ty wektor macierzy X ; wtedy AXiT to transformata i-tego wiersza jako kolumna; czyli xiT AT to transformata i-tego wiersza; a XAT to transformata uzyskana z X po zastosowaniu A do wierszy; ostatecznie: A · XAT daje zastosowanie transformaty A do kolumn macierzy XAT . Jurdziński Kompresja danych Kodowanie transformujace ˛ Baza transformaty 2-wymiarowej Baza transformaty X → AXAT Baza składa sie˛ z macierzy ATi Aj , gdzie Ai to i-ty wiersz macierzy A. Wynika to z tożsamości: [AXAT ]k ,m = ∑ ∑ Ak ,i Xi,j Am,j = X ◦ (ATk Am )(iloczyn skalarny) i j oraz faktów: elementy {ATk Am }k ,m=0,...,N−1 tworza˛ baz˛e ortonormalna; ˛ współczynniki wektora w bazie ortonormalnej sa˛ równe iloczynom skalarnym z odpowiednimi wektorami bazy. Tożsamość: [XAT ]a,b = ∑ Xa,i Ab,i i czyli [AXAT ]c,b = ∑ Ac,j [XAT ]j,b = ∑ Ac,j ∑ Xj,l Ab,l = ∑ ∑ Ac,j Xj,l Ab,l j j Jurdziński l Kompresja danych j l Kodowanie transformujace ˛ Przykład Dane: wektory złożone z wartości sasiednich ˛ pikseli rozkład energii w danych: energia na obu współrz˛ednych podobna; stopień korelacji: zazwyczaj wartość drugiego elementu pary zbliżona do wartości pierwszego elementu. Dekorelacja i koncentracja energii obracamy układ współrz˛ednych o 45 stopni w lewo: energia koncentruje sie˛ w pierwszej współrz˛ednej, brak zależności miedzy ˛ pierwsza˛ a druga˛ współrz˛edna; ˛ algebraicznie oznacza to transformate: ˛ 1 1 1 A= √ 2 1 −1 Jurdziński Kompresja danych Kodowanie transformujace ˛ Przykład c.d. Ortogonalność i ortonormalność Macierz 1 A= √ 2 1 1 1 −1 spełnia A2 = I ⇒ A−1 = AT a stad ˛ wynika, że wiersze macierzy A tworza˛ ortonormalna˛ baz˛e przestrzeni ℜ2 . Przekształcenie skorelowanego wektora x = (b, b)T √ 1 1 1 b 2b √ · = b 0 2 1 −1 Jurdziński Kompresja danych Kodowanie transformujace ˛ Dyskretna transformata kosinusowa (DCT) Definicja Dyskretna transformata kosinusowa zdefiniowana jest macierza˛ C o współczynnikach: r 1 (2j + 1) · 0π C0,j = cos dla j = 0, . . . , N − 1 N 2N r (2j + 1)iπ 2 cos dla j ∈ [0, N − 1], i ∈ [1, N − 1] Ci,j = N 2N DCT a przestrzenie liniowe Wiersze macierzy DCT (Ci,j ) sa˛ ortonormalne, w szczególności wiec ˛ tworza˛ baz˛e przestrzeni ℜN . Jurdziński Kompresja danych Kodowanie transformujace ˛ Dyskretna transformata kosinusowa Interpretacja 0-wy wiersz: ciag ˛ N wartości N1 . i-ty wiersz dla i > 0 r 2 1 3 2N − 1 (cos(iπ ), cos(iπ ), . . . cos(iπ )) N 2N 2N 2N czyli ciag ˛ wartości funkcji cos(iπx) w punktach a funkcja cos(iπx) ma okres 2/i. Jurdziński Kompresja danych 1 3 2N−1 2N , 2N , . . . , 2N . Kodowanie transformujace ˛ Dlaczego DCT? Sygnał Strumień danych można modelować jako sygnał – (zazwyczaj) ciagł ˛ a˛ funkcje. ˛ Wyróżniamy nastepuj ˛ ace ˛ cechy sygnału: amplituda okres (cz˛estotliwość) faza. Co wynika z szeregów i transformat Fouriera (intuicje) każdy sygnał cykliczny można wyrazić w przeliczalnej “bazie” złożonej z funkcji sin i cos o różnych okresach i amplitudach; każdy sygnał można wyrazić w bazie (mocy continuum) złożonej z funkcji sin i cos o różnych okresach i amplitudach; (dyksretna) transformata Fouriera (DFT) jest odpowiednikiem powyższego dla funkcji “spróbkowanych”. DCT podobna do DFT, z pominieciem ˛ jej wad. Jurdziński Kompresja danych Kodowanie transformujace ˛ Dlaczego DCT c.d. W kodowaniu obrazów w niedużym bloku (np. 8 × 8): wiekszość ˛ energii skoncentrowana w składowych o małych współrz˛ednych; ludzka percepcja: słabo “widzimy” składowe o niskich cz˛estotliwościach (p. rysunek). Uwaga: przykład wektorów o długości 2 to też była macierz DCT! DCT dwuwymiarowa: Jurdziński Kompresja danych Kodowanie transformujace ˛ JPEG JPEG jest standardem kompresji stosujacym ˛ dyskretna˛ transformate˛ kosinusowa˛ (DCT). Zakładamy, że wartości pikseli to liczby z przedziału [0, 2P − 1]. Kodowaniu poddajemy te wartości, po odjeciu ˛ od każdej 2P−1 . JPEG: kodowanie 1 2 3 4 Podział na bloki pikseli rozmiaru 8 × 8 (obraz rozszerzamy do rozmiarów bed ˛ acych ˛ wielokrotnościa˛ 8 poprzez powtórzenie ostatniej kolumny/wiersza odpowiednia˛ liczbe˛ razy).. Transformata DCT na każdym bloku (xi,j )i,j =0,...,N−1 → (θi,j )i,j =0,...,N−1 ; Kwantyzacja współczynników po DCT. Kompresja wartości po kwantyzacji: alg. Huffmana połaczony ˛ z kodowaniem długości serii. Jurdziński Kompresja danych Kodowanie transformujace ˛ JPEG: kwantyzacja JPEG: kwantyzacja 1 2 3 4 współczynniki uzyskane po DCT poddawane sa˛ kwantyzacji skalarnej, jednostajnej (tzn. o stałej długości bloku); krok kwantyzacji (długość obszaru kwantyzacji) może być inny dla każdej współrz˛ednej; kroki kwantyzacji zadane przez macierz kwantyzacji {Qi,j }i,j =0,...,N−1 ; Skwantyzowana wartość współczynnika θi,j jest równa θi,j + 0.5 lij = Qi,j czyli oznacza numer obszaru kwantyzacji odpowiadajacego ˛ wartości θi,j (jeśli ponumerujemy w ten sposób, że obszar zawierajacy ˛ wartość zero ma numer 0). dekodowanie: wartość li,j odtworzona jako: θi,j0 = li,j · Qi,j . Jurdziński Kompresja danych Kodowanie transformujace ˛ JPEG: tablica kwantyzacji Jak wyglada ˛ tablica kwantyzacji 1 2 3 Zasada: krok kwantyzacji rośnie przy ułożeniu ciagu ˛ zygzakiem. Uzasadnienie: współczynniki „mniej zauważalne” można reprezentować z mniejsza˛ dokładnościa. ˛ Spodziewany efekt kwantyzacji: w bloku 8 × 8 uzyskamy dużo zer, w szczególności zerami bed ˛ a˛ końcowe elementy (w kolejności zygzaka): duży krok kwantyzacji zwieksza ˛ zakres wartości, które znajda˛ sie˛ w zerowym obszarze kwantyzacji; w typowym bloku (gdzie zróżnicowanie pikseli małe), współczynniki o wiekszych ˛ cz˛estotliwościach maja˛ małe wartości. Jurdziński Kompresja danych Kodowanie transformujace ˛ JPEG: domyślna tablica kwantyzacji Standardowa tablica kwantyzacji w JPEG 16 12 14 14 18 24 49 72 11 12 13 17 33 35 64 92 10 14 16 22 37 55 78 95 16 24 40 19 26 58 24 40 57 29 51 87 56 68 109 64 81 104 87 103 121 98 112 100 51 61 60 55 69 56 80 82 103 77 113 92 120 101 103 99 Kompromis miedzy ˛ stopniem kompresji i stopniem zniekształceń zwiekszenie ˛ stopnia kompresji (kosztem jakości obrazu): zwiekszenie ˛ wielkości przedziałów kwantyzacji (np., przemnożenie tablicy kwantyzacji przez 2); zmniejszenie zniekształceń (kosztem stopnia kompresji): zmniejszenie wielkości przedziałów kwantyzacji. Jurdziński Kompresja danych Kodowanie transformujace ˛ Kodowanie wartości skwantowanych Podział danych współczynniki DC (wartości l0,0 z każdego bloku): oznaczaja˛ jasność (sygnał stały), wiec ˛ zazwyczaj wartości w sasiednich ˛ blokach sa˛ podobne; kodujemy wartości DC ze wszystkich bloków jako jeden ciag ˛ (od lewej do prawej, z góry na dół); stosujemy proste kodowanie predykcyjne: przewidywana wartość każdego współczynnika to wartość poprzednia, kodujemy różnice. współczynniki AC (pozostałe) współczynniki AC z każdego bloku kodowane osobno... w kolejności zig-zag... w efekcie od pewnego momentu zazwyczaj bed ˛ a˛ zera. Jurdziński Kompresja danych Kodowanie transformujace ˛ Kodowanie wartości skwantowanych c.d. Kodowanie ciagu ˛ różnic miedzy ˛ współczynnikami DC podział wartości na kategorie: kategoria wartości w kat. 1 0 2 −1, 1 3 −3, −2, 2, 3 4 −7, . . . , −4; 4, 5, . . . , 7 ··· ··· i [−2i−1 − 1, −2i−2 ]; [2i−2 , 2i−1 − 1] ··· ··· tworzymy kody Huffmana dla numerów kategorii; każda wartość kodowana jako para: kod Huffmana numeru kategorii c; oraz 2c−2 bitów kodujacych ˛ wartość w obrebie ˛ kategorii (0 bitów dla kategorii 1); uzasadnienie: wiekszość ˛ wartości bedzie ˛ bliskich zeru. Jurdziński Kompresja danych Kodowanie transformujace ˛ Kodowanie wartości skwantowanych c.d. Kodowanie współczynników AC Element kodowany to trójka (Z , C, B), gdzie: Z to liczba zer poprzedzajacych ˛ dany element; C to jego kategoria (jak w DC); B to pozycja w obrebie ˛ kategorii (jak w DC); Uwaga1: wartości 0 sa˛ pomijane. Uwaga2: specjalny kod EOB (end of block) oznacza same zera za ostatnia˛ zakodowana˛ wartościa. ˛ Przykład 2 (0, 3, 2) −8 (0, 5, 7) 3 (0, 3, 3) 0 0 Jurdziński 0 0 1 (4, 2, 1) Kompresja danych 1 (0, 2, 1) 0 0 1 (2, 2, 1) E Kodowanie transformujace ˛ Kodowanie wartości skwantowanych c.d. Kodowanie współczynników AC c.d. (kategoria i przesuniecie) ˛ pare˛ Z , C (liczba zer poprzedzajacych ˛ i numer kategorii) kodujemy razem, przy wykorzystaniu ustalonego kodu prefiksowego (o ile Z ≤ 15); wartość B kodujemy jak w DC, czyli na ustalonej liczbie bitów (wynikajacej ˛ z wartości C); kod prefiksowy dla par Z , C zawiera też kody specjalne odpowiadajace ˛ EOB (koniec bloku, dalej same zera) oraz ZRL (ciag ˛ 16 zer); Jurdziński Kompresja danych Kodowanie transformujace ˛ JPEG: dekodowanie Schemat dekodowania 1 2 3 4 Dekodowanie wartości współczynników (algorytm bezstratny oraz kwantyzacja skalarna): na podstawie tablic kwantyzacji. Odwrotna transformata kosinusowa dla każdego bloku rozmiaru 8 × 8. Odtworzenie obrazu z bloków. Usuniecie ˛ dodanych w procesie kodowania wierszy i kolumn. Jurdziński Kompresja danych Kodowanie transformujace ˛ Inne zastosowania transformat Zastosowania kompresja wideo: MPEG, H.263 i H.261 (telekonferencje); kompresja dźwieku: ˛ MP3 (czyli MPEG 1 Layer 3). kompresja falkowa: soon. O czym nie powiedziałem... kodowanie obrazów kolorowych; zastosowanie transformat do kodowania dźwieku; ˛ dynamiczny dobór liczby bitów przypadajacych ˛ na poszczególne współrz˛edne. Ciekawy wykład o transformatatach: http://users.utu.fi/jkari/compression/ Jurdziński Kompresja danych