Tomasz Wykład 11: Transformaty i JPEG
Idea kodowania transformujacego Etapy kodowania 1 Wektor danych x 0,...,x N 1 przekształcamy (odwracalnie!) na wektor c 0,...,c N 1, tak aby: energia była skoncentrowana w kilku współrzędnych (czyli tylko kilka współrzędnych jest ważna); ciag c 0,...,c N 1 nie jest skorelowany (dekorelujemy ciag x 0,...,x N 1 ). 2 Wartości c 0,...,c N 1 kwantyzujemy skalarnie: więcej bitów przydzielamy ważniejszym współrzędnym. 3 Kodujemy bezstratnie wartości skwantyzowane.
Idea kodowania transformujacego Dekodowanie 1 Dekodowanie: odpowiedni algorytm bezstratny. 2 Z odtworzonych wartości skwantyzowanych uzyskujemy przybliżone wartości współczynników po kwantyzacji: c 0,...,c N 1. 3 Stosujemy transformatę odwrotna: z przybliżonych wartości c 0,...,c N 1 uzyskujemy przybliżone wartości x 0,...,x N 1.
Transformaty Kodowanie transformujace Jakie transformaty nas interesuja? traktujemy ciag wartości (x 0,...,x N 1 ) jako wektor w przestrzeni R N, reprezentowany w bazie standardowej; chcemy znaleźć nowa, inna bazę przestrzeni R 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ędnych.
Pojęcia Kodowanie transformujace Definicja Jednowymiarowa dyskretna transformata liniowa wektora (x 0,...,x N 1 ) przekształca go na wektor (θ 1,...,θ n ) wg wzoru: N 1 θ k = n=0 x n a(k,n) dla k = 0,1,...,N 1, gdzie a i,j dla i,j [0,N 1] to ustalone liczby. Iloczyn skalarny wektorów X = (x 0,...,x N 1 ) i Y = (y 1,...,y n ) jest równy X Y = n i=1 x iy i. Wektory X 1,...,X k sa ortogonalne jeśli X i X j = 0 dla każdego i j. Wektory X 1,...,X k sa ortonormalne jeśli sa ortogonalne i X i X i = 1 dla każdego i [1,k].
Własności Kodowanie transformujace Co daje ortonormalność Transformatę dana przez współczynniki {a i,j } i,j [0,N 1] można zapisać macierzowo jako θ = Ax, gdzie A = (a i,j ). Jeśli wiersze macierzy A = (a i,j ) sa ortonormalne, to A 1 = A T, a zatem: x = A T θ, co wynika z x = A 1 Ax = A T θ.
Własności c.d. Reprezentacje w różnych bazach Niech x będzie 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 = A T Ax = A T θ = θ 0 A T 0 +... + θ N 1A T N 1 gdzie A i to i-ty wiersz macierzy A. Transformata oparta na bazie ortonormalnej zachowuje energię Niech energia wektora x = (x 0,...,x N 1 ) będzie równa x x = N 1 i=0 x i 2. Wówczas: N 1 xi 2 = i=0 N 1 θi 2, i=0 ponieważ N 1 i=0 θ 2 i = θ T θ = (Ax) T (Ax) = x T (A T A)x = x T x.
Transformaty dwuwymiarowe Zastosowanie w kodowaniu obrazów Korelacje zachodza zarówno w wierszach jak i w kolumnach! Transformata dwuwymiarowa Dwuwymiarowa dyskretna transformata θ macierzy (x i,j ) i,j [0,N 1] zdefiniowana jest wzorem θ k,l = N 1 i=0 N 1 x i,j a(k,l,i,j) dla k,l = [0,N 1]. j=0
Jakie transformaty dwuwymiarowe? Transformaty dwuwymiarowe stosowane zazwyczaj w kompresji oparte na transformacie jednowymiarowej; najpierw transformata wierszy (macierzy danych x i,j ); potem transformata (taka sama) kolumn macierzy uzyskanej po transformacie wierszy. Interpretacja arytmetyczna: A-macierz transformaty, X-macierz danych niech X i to i-ty wektor macierzy X; wtedy AXi T to transformata i-tego wiersza jako kolumna; czyli xi T A T to transformata i-tego wiersza; a XA T to transformata uzyskana z X po zastosowaniu A do wierszy; ostatecznie: A XA T daje zastosowanie transformaty A do kolumn macierzy XA T.
Baza transformaty 2-wymiarowej Baza transformaty X AXA T Baza składa się z macierzy A T i A j, gdzie A i to i-ty wiersz macierzy A. Wynika to z tożsamości: [AXA T ] k,m = i oraz faktów: A k,i X i,j A m,j = X (A T k A m)(iloczyn skalarny) j elementy {A T k A m} k,m=0,...,n 1 tworza bazę ortonormalna; współczynniki wektora w bazie ortonormalnej sa równe iloczynom skalarnym z odpowiednimi wektorami bazy. Tożsamość: czyli [AXA T ] c,b = j [XA T ] a,b = X a,i A b,i i A c,j [XA T ] j,b = j A c,j l X j,l A b,l = j A c,j X j,l A b,l l
Przykład Kodowanie transformujace Dane: wektory złożone z wartości sasiednich pikseli rozkład energii w danych: energia na obu współrzędnych podobna; stopień korelacji: zazwyczaj wartość drugiego elementu pary zbliżona do wartości pierwszego elementu. Dekorelacja i koncentracja energii obracamy układ współrzędnych o 45 stopni w lewo: energia koncentruje się w pierwszej współrzędnej, brak zależności między pierwsza a druga współrzędna; algebraicznie oznacza to transformatę: A = 1 2 [ 1 1 1 1 ]
Przykład c.d. Kodowanie transformujace Ortogonalność i ortonormalność Macierz spełnia A = 1 2 [ 1 1 1 1 A 2 = I A 1 = A T a stad wynika, że wiersze macierzy A tworza ortonormalna bazę przestrzeni R 2. Przekształcenie skorelowanego wektora x = (b,b) T [ ] [ ] [ ] 1 1 1 b 2b = 2 1 1 b 0 ]
Dyskretna transformata kosinusowa (DCT) Definicja Dyskretna transformata kosinusowa zdefiniowana jest macierza C o współczynnikach: C i,j = C 0,j = 1 (2j + 1) 0π cos N 2N 2 (2j + 1)iπ cos N 2N DCT a przestrzenie liniowe dla j = 0,...,N 1 dla j [0,N 1],i [1,N 1] Wiersze macierzy DCT (C i,j ) sa ortonormalne, w szczególności więc tworza bazę przestrzeni R N.
Dyskretna transformata kosinusowa Interpretacja 1 0-wy wiersz: ciag N wartości N. i-ty wiersz dla i > 0 2 N (cos(iπ 1 2N ),cos(iπ 3 2N 1 ),...cos(iπ 2N 2N )) czyli ciag wartości funkcji cos(iπx) w punktach 2N 1, 2N 3 2N 1,..., 2N. a funkcja cos(iπx) ma okres 2/i.
Dlaczego DCT? Sygnał Strumień danych można modelować jako sygnał (zazwyczaj) ciagł a funkcję. Wyróżniamy następujace cechy sygnału: amplituda okres (częstotliwość) 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 pominięciem jej wad.
Dlaczego DCT c.d. W kodowaniu obrazów w niedużym bloku (np. 8 8): większość energii skoncentrowana w składowych o małych współrzędnych; ludzka percepcja: słabo widzimy składowe o niskich częstotliwościach (p. rysunek). Uwaga: przykład wektorów o długości 2 to też była macierz DCT! DCT dwuwymiarowa:
JPEG Kodowanie transformujace JPEG jest standardem kompresji stosujacym dyskretna transformatę kosinusowa (DCT). Zakładamy, że wartości pikseli to liczby z przedziału [0,2 P 1]. Kodowaniu poddajemy te wartości, po odjęciu od każdej 2 P 1. JPEG: kodowanie 1 Podział na bloki pikseli rozmiaru 8 8 (obraz rozszerzamy do rozmiarów będacych wielokrotnościa 8 poprzez powtórzenie ostatniej kolumny/wiersza odpowiednia liczbę razy).. 2 Transformata DCT na każdym bloku (x i,j ) i,j=0,...,n 1 (θ i,j ) i,j=0,...,n 1 ; 3 Kwantyzacja współczynników po DCT. 4 Kompresja wartości po kwantyzacji: alg. Huffmana połaczony z kodowaniem długości serii.
JPEG: kwantyzacja JPEG: kwantyzacja 1 współczynniki uzyskane po DCT poddawane sa kwantyzacji skalarnej, jednostajnej (tzn. o stałej długości bloku); 2 krok kwantyzacji (długość obszaru kwantyzacji) może być inny dla każdej współrzędnej; kroki kwantyzacji zadane przez macierz kwantyzacji {Q i,j } i,j=0,...,n 1 ; 3 Skwantyzowana wartość współczynnika θ i,j jest równa θi,j l ij = + 0.5 Q i,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). 4 dekodowanie: wartość l i,j odtworzona jako: θ i,j = l i,j Q i,j.
JPEG: tablica kwantyzacji Jak wyglada tablica kwantyzacji 1 Zasada: krok kwantyzacji rośnie przy ułożeniu ciagu zygzakiem. 2 Uzasadnienie: współczynniki mniej zauważalne można reprezentować z mniejsza dokładnościa. 3 Spodziewany efekt kwantyzacji: w bloku 8 8 uzyskamy dużo zer, w szczególności zerami będa końcowe elementy (w kolejności zygzaka): duży krok kwantyzacji zwiększa zakres wartości, które znajda się w zerowym obszarze kwantyzacji; w typowym bloku (gdzie zróżnicowanie pikseli małe), współczynniki o większych częstotliwościach maja małe wartości.
JPEG: domyślna tablica kwantyzacji Standardowa tablica kwantyzacji w JPEG 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 82 18 33 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99 Kompromis między stopniem kompresji i stopniem zniekształceń zwiększenie stopnia kompresji (kosztem jakości obrazu): zwiększenie wielkości przedziałów kwantyzacji (np., przemnożenie tablicy kwantyzacji przez 2); zmniejszenie zniekształceń (kosztem stopnia kompresji): zmniejszenie wielkości przedziałów kwantyzacji.
Kodowanie wartości skwantowanych Podział danych współczynniki DC (wartości l 0,0 z każdego bloku): oznaczaja jasność (sygnał stały), więc 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 będa zera.
Kodowanie wartości skwantowanych c.d. Kodowanie ciagu różnic między 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 [ 2 i 1 1, 2 i 2 ];[2 i 2,2 i 1 1] tworzymy kody Huffmana dla numerów kategorii; każda wartość kodowana jako para: kod Huffmana numeru kategorii c; oraz 2 c 2 bitów kodujacych wartość w obrębie kategorii (0 bitów dla kategorii 1); uzasadnienie: większość wartości będzie bliskich zeru.
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 obrębie 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 8 3 0 0 0 0 1 1 0 0 1 (0,3,2) (0,5,7) (0,3,3) (4,2,1) (0,2,1) (2,2,1) E
Kodowanie wartości skwantowanych c.d. Kodowanie współczynników AC c.d. (kategoria i przesunięcie) parę 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);
JPEG: dekodowanie Schemat dekodowania 1 Dekodowanie wartości współczynników (algorytm bezstratny oraz kwantyzacja skalarna): na podstawie tablic kwantyzacji. 2 Odwrotna transformata kosinusowa dla każdego bloku rozmiaru 8 8. 3 Odtworzenie obrazu z bloków. 4 Usunięcie dodanych w procesie kodowania wierszy i kolumn.
Inne zastosowania transformat Zastosowania kompresja wideo: MPEG, H.263 i H.261 (telekonferencje); kompresja dźwięku: MP3 (czyli MPEG 1 Layer 3). kompresja falkowa: soon. O czym nie powiedziałem... kodowanie obrazów kolorowych; zastosowanie transformat do kodowania dźwięku; dynamiczny dobór liczby bitów przypadajacych na poszczególne współrzędne. Ciekawy wykład o transformatatach: http://users.utu.fi/jkari/compression/