1 Kompresja wideo Kodowanie i kompresja Streszczenie Studia Wieczorowe Wykład 10, 2007 Dane wideo jako sekwencja skorelowanych obrazów (ramek). Specyfika danych wideo: drobne zmiany kolorów w kolejnych ramkach (niezależnie w każdej ramce) niezauważalne statycznie, irytujące w sekwencji; rozmyte krawędzie zauważalne statycznie, lecz nieistotne przy dużej dynamice sekwencji. Specyfika zastosowań: wideokonferencje: symetria między kodowaniem i dekodowaniem. dane wideo: kodowanie może mieć większe wymagania obliczeniowe. 1.1 Kompensacja ruchu (oparta na blokowaniu) Stosujemy predykcję zawartości bieżącej ramki w oparciu o ramkę ją poprzedzającą. Dokładniej: Dzielimy ramkę bieżącą na bloki rozmiaru M M. Dla każdego bloku bieżącej ramki badamy jego podobieństwo (wg ustalonej miary) do obszarów rozmiaru M M w ramce poprzedniej, znajdujących się w ustalonym otoczeniu tego bloku. Jeśli podobieństwo odpowiednio duże (do najbardziej podobnego bloku z ramki poprzedniej, spośród porównywanych): kodujemy blok bieżący poprzez wektor ruchu (równy względnemu położeniu względem kodowanego bloku) i wartości różnic pomiędzy blokiem bieżącym i blokiem z poprzedniej ramki (traktowanym w ten sposób jako wartość przewidywana, predykcja). Jeśli podobieństwo małe: zakodowana postać bloku zawiera oryginalne wartości z bloku (i informację o tej formie kodowania). Inne warianty i szczegóły: 1
kodując bieżącą ramkę, najlepiej porównywać jej bloki do bloków poprzedniej, ale w postaci w jakiej będzie ona po odkodowaniu (uwzględniając, że po stronie dekodera tylko ta postać będzie znana); uproszczony wariant kompensacji może polegać na tym, że w przypadku odpowiednio dużego podobieństwa do bloku z poprzedniej ramki, nie kodujemy różnic między blokami, przyjmujemy że są identyczne; jeśli ramka następna jest znana (będzie kodowana w inny sposób i przesłana wcześniej), stosuje się kompensację z dwustronną predykcją (bidirectional) próbujemy kompensacji w odniesieniu do poprzedniej i następnej ramki. Kompresja wektorów ruchu: Najwydajniejsza ze stosowanych metod (np. w MPEG) koduje ciąg wektorów ruchu kolejnych bloków metodą predykcyjną. Wartość predykcji wektora dla danego bloku B to średnia wektorów bloku nad B i z lewej strony B. Następnie kodowanie arytmetyczne lub inne. 1.1.1 Miary podobieństwa i czas obliczeń 1. Błąd bezwzględny, błąd średniokwadratowy: dla kwadratowych bloków B i C o rozmiarze b b: 1 b b B b 2 ij C ij 1 b 2 i=1 j=1 b b (B ij C ij ) 2 i=1 j=1 Wada: dla każdego przesunięcia konieczne liczenie błędu od nowa. 2. miara wewnętrznej projekcji (integral projection): b b b b B ij C ij + b B ij i=1 j=1 j=1 j=1 i=1 b C ij i=1 Zaleta: wyznaczanie różnic dla większości przesunięć możliwe w czasie rzędu b (wykorzystując wartości wyznaczone dla przesunięć zbadanych wcześniej). Zastosowanie: wybór bloków-kandydatów w oparciu o tę miarę i wyznaczenie najlepiej pasującego z zastosowaniem miary bardziej dokładnej. 3. Przeszukiwanie z rosnącym krokiem. Badamy wszystkie wektory przesunięć w najbliższym sąsiedztwie i wektory z ustalonym skokiem w dalszym sąsiedztwie. 2
Uzasadnienie: rozmazanie szybko przesuwających się obiektów jest mniej zauważalne. 4. Metoda kolejnych uściślen. Krok 1: badanie wektorów ruchu z ustalonym krokiem większym od 1, wybór najlepszego. Krok 2: badanie wektorów ruchu z krokiem 1, w sąsedztwie wektora wybranego w Kroku 1. 5. Metody oparte na przestrzennych zależnościach między blokami: oparte na założeniu, że przesuwające się obiekty są większe od rozmiaru bloku. Predykcja wektora ruchu w oparciu o wartości wektora ruchu już zakodowanych bloków z bieżącej ramki, znajdujących się w bliskim sąsiedztwie. Dla poprawienia predykcji, stosuje się podział bloków na szachownicę i koduje kolejne jej kolory wykorzystując te, które zostały zakodowane wcześniej. 6. Metody oparte na czasowych zależnościach między blokami: wydajne w przypadku ruchu jednostajnego. Predykcja wektora ruchu bloku B w bieżącej ramce w oparciu o wartość wektora ruchu bloku na tej samej pozycji w ramce poprzedniej. 7. Dwuwymiarowe przeszukiwanie binarne. Parametry: blok B w bieżącej ramce na pozycji (a, b), obszar poszukiwań ograniczony do bloków w odległości co najwyżej d w poziomie i d w pionie. Krok 1. Wyznaczamy krok s = 2 log d 1. Blok B porównywany jest z blokami poprzedniej ramki na pozycjach (lewych górnych narożników): (a, b), (a, b + s), (a, b s), (a + s, b), (a s, b). Krok 2. Wybieramy blok o największym podobieństwie, oznaczmy jego pozycję przez (x, y). Jeśli (x, y) = (a, b), to s := s/2. W przeciwnym razie (a, b) := (x, y). Krok 3. Jeśli s = 1: wybieramy najbardziej podobny do B blok spośród dziewięciu najbliższych w sąsiedztwie (a, b). W przeciwnym razie powrót do Kroku 2. UWAGA: pomijamy porównania z blokami znajdującymi się w dalszym sąsiedztwie od B niż sąsiedztwo wyznaczone przez parametr d. 1.2 Reprezentacja sygnału wideo i obrazów kolorowych Standardowe parametry: 3
sekwencja zawiera 30 klatek (ramek) na sekundę; ramka to 525 wierszy każda ramka dzielona na dwa pola: pierwsze zawiera nieparzyste wiersze, drugie wiersze parzyste; pojedyncze pole wysyłane co 1/60 sekundy (co daje wrażenie większej częstotliwości). Reprezentacja sygnału kolorowego: Podział na trzy składowe: RGB (red, green, blue). Dla zachowania zgodności z sygnałem czarno-białym : podział na składowe Y C b C r (Y: luminacja, odpowiada obrazowi monochromatycznemu; C b C r : chrominacja, definiują składowe koloru) Składowe Y C b C r wyznaczane z RGB poprzez zastosowanie przekształcenia liniowego (podobnie odwrotnie): Y = 0, 299R + 0, 587G + 0, 114B C b = B Y C r = R Y Spróbkowane analogowe wartości Y C b C r są normalizowane i kwantyzowane. Po normalizacji uzyskujemy Y s [0, 1] oraz C rs, C bs [ 1/2, 1/2]. Wartości wynikowe to liczby 8-bitowe oznaczane Y UV : Próbkowanie (rekomendacja 601): Y = 219Y s + 16 U = 224C bs + 128 V = 224C rs + 128 Każda składowa spośród YUV może być próbkowana z inną częstotliwością. Częstotliwości to wielokrotności 3,725MHz, określamy je jako trzy liczby y : u : v, odpowiadające częstościom y 3, 725, u 3, 725 i v 3, 725 MHz próbkowania składowych Y, U oraz V. Najpopularniejszy schemat próbkowania to 4 : 3 : 2, który odpowiada (po wyeliminowaniu części sygnału nie odpowiadającej wizji) 720 próbkom na wiersz dla luminacji i 360 próbkom na wiersz dla chrominacji (?). 4
1.3 Wideokonferencje, czyli oszczędne kodowanie (H.261) 1. Ramki dzielimy na bloki rozmiaru 8 8. 2. Stosujemy kompensację ruchu. 3. Różnice między predykcją a wartościami rzeczywistymi kodujemy za pomocą DCT. Kompensacja ruchu z zastosowaniem makrobloków: cztery bloki pikseli rozmiaru 8 8 są organizowane w jeden makroblok; na makroblok składają się cztery bloki luminacji i po jednym z każdego bloków chrominacji (zakładamy czterokrotnie większą częstość próbkowania luminacji) dopasowanie (wektor ruchu) ustalamy tylko na podstawie luminacji, porównujemy bloki w odległości maksymalnie 15 pikseli w lewo/prawo, górę/dół. wektor ruchu dla chrominacji powstaje przez podzielenie przez dwa wektora ruchu dla luminacji. tryb intra: bez kompensacji (za małe podobieństwa); tryb inter: z kompensacją. Dalsze usprawnienia i etapy: Dla wygładzenia krawędzi w blokach używanych do predykcji, stosowane jest filtrowanie (choć może być wyłączone). Pozwala to uniknąć dużych wartości współczynników wysokoczęstotliwościowych. Kroki kwantyzacji decydują o stopniu kompresji i jakości odtworzenia: dlatego mogą być zmieniane w zależności od przepustowości łącza komunikacyjnego. Makrobloki łączone są w grupy bloków (GOB): 3 wiersze po 11 makrobloków. Kwantyzator ustalany jest dla całego GOB (i przesyłany w jego nagłówku), chyba że przesłany zostanie nowy nagłówek przed końcem GOB. Sterowanie prędkością (utrzymywanie stałej prędkości wyjściowej): dobór długości kroku kwantyzatora (p. makrobloki); pomijanie ramek. 5
1.4 MPEG-1 Ogólny schemat kodowania podobny do H.261: podział obrazu na bloki, kompensacja ruchu, DCT dla wartości odchyleń od predycji, kwantyzacja współczynników po DCT (jak w JPEG; ale tablice kwantyzacji mogą być różne dla różnych ramek jak w H.261). Uwaga: MPEG-1 nie uwzględnia przeplotu. Problem w H.261: każda ramka wyznaczana na podstawie poprzedniej, dane mogą być odtwarzane tylko w sposób sekwencyjny. Zapewnienie swobodnego (a nie tylko sekwencyjnego!) dostępu do różnych fragmentów danych: Ramki I: kodowane bez odwołań do innych ramek. Ramki P: kodowanie predykcyjne, predykcja w oparciu o poprzedzającą ramkę P lub I (tą, która bliżej). Ramki B: predykcja dwukierunkowa, w oparciu o najbliższe ramki typu I i P (przed nią i za nią). Typowa kolejność ramek (chronologiczna, dalej powtarza się cykl 1-12): I B B P B B P B B P B B I 1 2 3 4 5 6 7 8 9 10 11 12 13 Uwzględniając zależności między ramkami, kolejność w strumieniu bitowym dla powyższej sekwencji ramek będzie następująca: I P B B P B B P B B I B B 1 4 2 3 7 5 6 10 8 9 13 11 12 Sterowanie prędkością w MPEG: na poziomie sekwencji: usuwanie (części) ramek typu B (nie mają żadnego wpływu na pozostałe). na poziomie ramek: zwiększanie kroku kwantyzacji, pomijanie składowych wysokoczęstotliwościowych. Wyniki: 25 ramek na sekunkę o wielkości 352 288 pikseli możliwe przy przepustowości 1,5 megabita na sekundę. 6
1.5 MPEG-2 Standard niezależny od aplikacji, modularny: 1. profile (algorytm): (a) prosty: nie używa ramek B, (b) główny: podobny do MPEG-1, (c) podejście warstwowe, najpierw strumień danych o gorszej jakości, potem strumienie poprawiające: snr-skalowalny (ciągi poprawiające uściślają wartości współczynników po DCT), przestrzennie skalowalny (ciągi poprawiające dodają więcej próbek), czasowo skalowalny (dodatkowe ramki), wysoki. 2. poziomy (ograniczenia): niski (352 240), główny, wysoki 1440, wysoki (1920 1080). Inne metody kompresji (w porównaniu z MPEG-1): uwzględnienie przeplotu: kompresja pól a nie ramek (P), w kodowaniu drugiego pola ramki, wykorzystywane poprzednie (i pola z ramki poprzedniej). dodatkowe tryby: kompensacja ruchu 16 8 (wybór kompensacji spośród kompensacji dla górnej i dolnej połowy bloku); dualna podstawowa kompensacja ruchu (dwie predykcje, uśrednienie). MPEG-4, MPEG-7: podejście abstrakcyjne, interfejs do opisu danych multimedialnych. Literatura: 1. D. Salomon, Data compression. The Complete Reference. 3rd Edition. Springer, 2004. 2. K. Sayood, Kompresja danych, Read Me, 2002. 7