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