Wyklad 15 (kodowanie falkowe)

Transkrypt

Wyklad 15 (kodowanie falkowe)
Kompresja danych
Tomasz Jurdziński
Wykład 11: Kodowanie falkowe
Jurdziński
Kompresja danych
Idea przekształcenia falkowego (1)
Jak bank 2 filtrów dzieli sygnał
1
2
3
4
filtr dolnoprzepustowy (np. przeskalowane średnie): tu gromadzi
sie˛ wiekszość
˛
energii, silny sygnał w jednolitym obszarze, sygnał
słaby tylko na “krawedziach”;
˛
filtr górnoprzepustowy (np. przeskalowane różnice sasiednich
˛
wartości): mała energia, mniejszy wpływ na (dostrzegalna)
˛
jakość, sygnał silny tylko na krawedziach;
˛
Założenie: używamy filtrów FIR, wiec
˛ wynik filtra możemy
wyznaczyć w czasie liniowym.
Przypomnienie: ciagi
˛ uzyskane po zastosowaniu obu filtrów sa˛
2-krotnie krótsze od oryginalnych.
Jurdziński
Kompresja danych
Idea przekształcenia falkowego (2)
Spojrzenie 1
transformaty przekształcaja˛ z dziedziny czasu do dziedziny
cz˛estotliwości;
podpasma pozostaja˛ w dziedzinie czasu, ale odfiltrowuja˛ różne
cz˛estotliwości;
co chcielibyśmy wiedzieć: jakie cz˛estotliwości wystepuj
˛ a˛ w
poszczególnych przedziałach czasowych?
Spojrzenie 2
bank 2 filtrów “odfiltrowuje” najwieksze
˛
cz˛estotliwości (wynik filtra
górnoprzepustowego);
... i pozostawia wiekszość
˛
energii w wyniku filtra
dolnoprzepustowego;
a zatem: wynik filtra dolnoprzepustowego warto ponownie
przefiltrować, aby oddzielić najwieksze
˛
cz˛estotliwości (np. te o
wartościach równych co najmniej połowie cz˛estotliwości
Jurdziński
Kompresja danych
Dyskretne przekształcenie falkowe
Przekształcanie sygnału 1-wymiarowego
Dane: Ciag
˛ a1 , . . . , an , k – parametr;
KROK(a1 , . . . , an , k )
Jeśli k = 0: ciagiem
˛
wyjściowym jest a1 , . . . , an .
Zastosuj bank filtrów na a1 , . . . , an , utwórz za ich pomoca˛ ciagi
˛
b1 , . . . , bn/2 (filtr dolnoprzepustowy L) oraz bn/2+1 , . . . , bn (filtr
górnoprzepustowy H).
Jako wynik zwróć KROK(b1 , . . . , bn/2 , k − 1) złaczone
˛
z
bn/2+1 , . . . , bn .
Intuicja
Kolejne kroki odfiltrowuja˛ coraz mniejsze cz˛estotliwości.
Jurdziński
Kompresja danych
Dyskretne przekształcenie falkowe (2)
Przekształcenie 2-wymiarowe
1
2
3
najpierw przekształcenie w wierszach: podział macierzy na
cz˛esci L (wynik filtra dolnoprzepustowego) i H (wynik filtra
górnoprzepustowego);
nastepnie
˛
przekształcenie w kolumnach: podział macierzy na
cz˛eści: LL, LH, HL, HH.
Dalszemu filtrowaniu poddajemy tylko podmacierz LL (o 4-krotnie
mniejszym rozmiarze od oryginalnej).
Uzasadnienie
obszary HH, HL, LH to „szczegóły o wysokiej rozdzielczości” a LL to
„podpasmo niskiej rozdzielczości”.
Co dalej
Obszar LL możemy ponownie przekształcić stosujac
˛ powyższa˛
metode,
˛ itd.
Po zastosowaniu tej metody 3-8 krotnie otrzymujemy współczynniki
po transformacie falkowej.
Jurdziński
Kompresja danych
Jakie filtry?
Filtry Haara
dolnoprzepustowy: bi =
górnoprzepustowy:
Skad
˛ czynnik
√1 :
2
√1 a2i
2
+ √1 a2i +1 dla 0 ≤ i < n/2;
2
1
√
bn/2+i = − a2i
2
+ √1 a2i +1 dla 0 ≤ i < n/2.
2
dla zachowania energii.
Filtr Daubechies 9/7
dolnoprzepustowy: bi = ∑4j =−4 hj a2i +j dla 0 ≤ i < n/2;
górnoprzepustowy: bn/2+i = ∑3j =−3 gj a2i +j dla 0 ≤ i < n/2;
współczynniki hi i gi : p. Sayood
dlaczego takie współczynniki: symetryczność, łagodniejsze
zmiany niż w przypadku filtrów Haara.
Jurdziński
Kompresja danych
Falki: czas obliczeń, kompresja, ...
1
2
3
Czas obliczeń – liniowy! (każdy etap zmniejsza 4-krotnie rozmiar
danych).
Skad
˛ kompresja: nowe współczynniki bedziemy
˛
kwantyzować z
uwzglednieniem
˛
ich roli oraz zależności przestrzennych.
Dlaczego lepiej od transformat i standardowego kodowania
podpasmowego:
transformaty: osobno kodujemy małe bloki (a falki traktuja˛ obraz
całościowo);
podpasma: mniejsza elastyczność (w falkach: “zagłebianie”
˛
podziału na podpasma).
Jurdziński
Kompresja danych
Kodowanie nowych współczynników
Zasada
1
2
Podział na warstwy bitowe: najpierw bit najbardziej znaczacy
˛ z
każdego współczynnika (pierwsza warstwa), potem drugi bit
każdego współczynnika (druga warstwa), itd.
współczynniki moga˛ być ujemne: warstwy bitowe tworzymy na
podstawie wartości bezwzglednych
˛
współczynników, znak
współczynnika kodujemy w warstwie, w której znajduje sie˛ jego
najbardziej znaczaca
˛ 1.
Jurdziński
Kompresja danych
Kodowanie nowych współczynników (EZW)
Zależności przestrzenne
1
2
3
4
5
stosujac
˛ wielokrotnie podział LL, LH, HL i HH (dzielimy LL z
poprzedniego etapu): uzyskujemy drzewo zależności
przestrzennych miedzy
˛
pasmami;
korzeń ma 3 dzieci;
każdy inny wierzchołek wewnetrzny
˛
ma 4 dzieci (p. rysunki
[Sayood])
Obserwacja (powt.): zazwyczaj wiekszość
˛
energii zgromadzona
jest w podpasmach o niższych cz˛estotliwościach;
A zatem cz˛esto może sie˛ zdarzyć: wszystkie wartości w
poddrzewie T1 drzewa zależności przestrzennych T sa˛ nie
wieksze
˛
od wartości w korzeniu T1 .
Jurdziński
Kompresja danych
EZW embedded zerotree wavelet coder): definicje
Wartości i zależności
Podział współczynników ze wzgledu
˛
na próg T :
1
a jest współczynnikiem istotnym: |a| ≥ T ;
2
a jest nieistotny (|a| < T ) i wszystkie jego nastepniki
˛
sa˛
nieistotne: a jest korzeniem drzewa zerowego;
3
a jest nieistotny ale ma istotnych potomków: a jest izolowanym
zerem.
Jurdziński
Kompresja danych
Etapy kodowania EZW
Założenia: cM : maksymalna wartość (bezwzgledna)
˛
współczynników.
Niech T0 = 2blog cM c .
Dla i = 0, 1, 2, . . . , k :
1
Kodowanie odwzorowujace
˛ istotność: kodujemy współczynniki o
wartościach bezwzglednych
˛
< Ti−1 ; czyli dotychczas nieistotne,
2
Kodowanie uszczegóławiajace:
˛
dokładniejsze określenie
wartości współczynników, które były istotne już we
wcześniejszych przebiegach:
dla każdego istotnego współczynnika znany jest przedział o
wielkości Ti , do którego on należy;
kodujemy: 0 gdy współczynnik w dolnej połowie tego przedziału, 1
gdy w górnej (intuicja: kodujemy kolejny bit współczynnika).
3
Ti := Ti−1 /2.
Jaka wartość k : dowolna, czym wieksza,
˛
tym dokładniejsza
rekonstrukcja obrazka.
Jurdziński
Kompresja danych
Kodowanie odwzorowujace
˛ istotność (EZW)
Kodowanie odwzorowujace
˛ istotność
1
2
3
Każdy współczynnik należy do jednej z 4 kategorii: istotnie
dodatni, istotnie ujemny, korzeń drzewa zerowego, izolowane
zero (potrzebujemy 2 bity).
Kolejność przegladania
˛
i kodowania współczynników:
przegladanie
˛
drzewa zależności przestrzennych wszerz – nie
przegladamy
˛
(i nie kodujemy!) potomków korzenia drzewa
zerowego.
Uwagi implementacyjne:
koder/dekoder przechowuje listy współczynników
istotnych/nieistotnych;
współczynnik zakodowany jako istotnie dodatni lub istotnie ujemny
jest przenoszony z listy nieistotnych na liste˛ współczynników
istotnych;
kolejność przegladania
˛
(taka sama w dekoderze jak w koderze)
gwarantuje zgodność obu list w procesie kodowania/dekodowania.
Jurdziński
Kompresja danych
SPIHT (Set Partitioning in Hierarchical Trees)
SPIHT – idea
1
2
3
4
5
Cel: EZW, ale z bardziej zwarta˛ reprezentacja˛ drzew zerowych.
Ogólny schemat jak w EZW: kodujemy kolejne “warstwy” (bity)
współczynników.
Dla uproszczenia: kodujemy wprost kolejne bity współczynników
(zakładamy że sa˛ całkowite).
Drzewa zerowe („nieistotne”) typu R: wszystkie elementy w
poddrzewie sa˛ nieistotne (ale korzeń może być istotny).
Drzewa zerowe („nieistotne”) typu RC: istotne moga˛ być korzeń i
jego dzieci, pozostałe wierzchołki nieistotne.
Jurdziński
Kompresja danych
SPIHT: troche˛ szczegółów
SPIHT – struktury danych
1
2
3
LIP: lista wierzchołków nieistotnych (jak w EZW);
LSP: lista wierzchołków istotnych;
LIS: lista nieistotnych drzew, każde drzewo opisane przez
współrz˛edne korzenia i typ (R lub RC).
SPIHT – (troche)
˛ inna budowa zależności przestrzennych
1
2
3
4
każdy wierzchołek ma 4 lub 0 potomków;
wiec
˛ mamy las drzew zamiast pojedynczego drzewa;
w szczególności wierzchołki z najniższego pasma dzielimy na
bloki rozmiaru 2 × 2 i lewy gorny element każdego bloku nie ma
potomków (p. rysunki).
H: zbiór wierzchołków w najniższym paśmie (korzeni drzew z
naszego lasu).
Jurdziński
Kompresja danych
SPIHT – algorytm (1)
Inicjalizacja
1
2
3
4
n – liczba bitów najwiekszego
˛
współczynnika;
LIP ← H (na poczatku
˛
wszystkie wierzchołki sa˛ nieistotne, ale
interesuja˛ nas tylko korzenie drzew, oraz dzieci drzew RC)
LIS ← elementy H, które maja˛ potomków, wszystkie typu R. (to
sa˛ drzewa pokrywajace
˛ wszystkie wierzchołki, których nie ma w
LIP ani w LSP)
LSP ← 0/ (na poczatku
˛
wszystkie współczynniki nieistotne).
Jurdziński
Kompresja danych
SPIHT – algorytm (2)
Dla k = n, n − 1, . . . , 1 (kolejne bity od najbardziej zanczacych)
˛
1
2
Kodowanie odwzorowujace
˛ istotność: przegladamy
˛
wierzchołki i
drzewa nieistotne (LIP i LIS) – p. niżej.
Kodowanie uszczegóławiajace:
˛
podajemy kolejny (k -ty) bit
każdego współczynnika z LSP (istotnego), który został dodany
przed faza˛ k (miał jedynki na wcześniejszych bitach niż k ).
Jurdziński
Kompresja danych
SPIHT – Kodowanie odwzorowujace
˛ istotność
Dla każdego (i, j) ∈ LIP:
jeśli wsp. (i, j) istotny: przenieś (i, j) do LSP, out → 1+ lub
out → 1− (1 oznacza istotność, +/- oznacza znak
współczynnika);
jeśli wsp. (i, j) nieistotny: out → 0
Dla każdego (i, j) ∈ LIS (czyli każdego zerowego drzewa)
jeśli drzewo nieistotne (żaden nowy współczynnik w drzewie nie
stał sie˛ istotny na aktualnym bicie): out → 0
jeśli drzewo istotne: out → 1 oraz DEKOMPOZYCJA(i, j).
Jurdziński
Kompresja danych
SPIHT: c.d.
DEKOMPOZYCJA(i, j)
1
jeśli (i, j) to drzewo typu R:
Usuń R(i, j) z LIS.
Dla każdego (i 0 , j 0 ) ∈ Children(i, j):
(i 0 , j 0 ) istotne: out(1 znak (i 0 , j 0 )), umieść (i 0 , j 0 ) w LSP;
(i 0 , j 0 ) nieistotne: out(0), umieść (i 0 , j 0 ) w LIP;
Jeśli (i, j) ma inne potomki (oprócz dzieci): dodaj element RC(i, j)
na koniec LIS. (UWAGA: to drzewo trzeba rozważyć w tym samym
przebiegu!)
2
Jeśli drzewo (i, j) jest typu RC:
Usuń RC(i, j) z LIS.
Dla każdego (i 0 , j 0 ) ∈ Children(i, j):
dodaj element R(i 0 , j 0 ) do LIS
UWAGA: te drzewa trzeba rozważyć w tym samym przebiegu!
Jurdziński
Kompresja danych
SPIHT, EZW, i in.
SPIHT vs. EZW
Drzewa zerowe moga˛ mieć (w SPIHT) istotny korzeń, a nawet dzieci
korzenia. To nie ma miejsca w EZW.
JPEG2000?
Oparty na EBCOT (Embedded Block Coding with Optimized
Truncation): pasma kodowane osobno, ... na seminarium?
Jurdziński
Kompresja danych