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

Podobne dokumenty