Kompresja sekwencji wideo w systemie Linux



Podobne dokumenty
Przedmowa 11 Ważniejsze oznaczenia 14 Spis skrótów i akronimów 15 Wstęp 21 W.1. Obraz naturalny i cyfrowe przetwarzanie obrazów 21 W.2.

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Wybrane metody kompresji obrazów

Kompresja danych DKDA (7)

Kompresja video (MPEG)

dr inż. Piotr Odya Wprowadzenie

Kodowanie transformujace. Kompresja danych. Tomasz Jurdziński. Wykład 11: Transformaty i JPEG

Kompresja sekwencji obrazów - algorytm MPEG-2

Kompresja dźwięku w standardzie MPEG-1

Kwantyzacja wektorowa. Kodowanie różnicowe.

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Fundamentals of Data Compression

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

Cyfrowe przetwarzanie i kompresja danych. dr inż.. Wojciech Zając

Klasyfikacja metod kompresji

Kodowanie i kompresja Streszczenie Studia Wieczorowe Wykład 10, 2007

Transformaty. Kodowanie transformujace

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Joint Photographic Experts Group

Kodowanie podpasmowe. Plan 1. Zasada 2. Filtry cyfrowe 3. Podstawowy algorytm 4. Zastosowania

Kompresja sekwencji obrazów

Klasyfikacja metod kompresji

Micha Strzelecki Metody przetwarzania i analizy obrazów biomedycznych (2)

Zastosowanie kompresji w kryptografii Piotr Piotrowski

dr inż. Piotr Odya dr inż. Piotr Suchomski

Przekształcenia punktowe

Kompresja obrazów w statycznych - algorytm JPEG

Inżynieria obrazów cyfrowych. Ćwiczenie 5. Kompresja JPEG

Sieci neuronowe - projekt

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Technika audio część 2

Praca dyplomowa magisterska

Kodowanie źródeł sygnały video. Sygnał video definicja i podstawowe parametry

Implementacja filtru Canny ego

Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Transformata Fouriera

PRACA DYPLOMOWA STUDIA PIERWSZEGO STOPNIA. Łukasz Kutyła Numer albumu: 5199

Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 9. Przetwarzanie sygnałów wizyjnych. Politechnika Świętokrzyska.

Politechnika Świętokrzyska. Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 6. Transformata cosinusowa. Krótkookresowa transformata Fouriera.

Kwantowanie sygnałów analogowych na przykładzie sygnału mowy

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 12,

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

Krótki przegląd pierwszych standardów kompresji obrazów

0 + 0 = 0, = 1, = 1, = 0.

Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny) kierunkowy (podstawowy / kierunkowy / inny HES)

Sztuczne sieci neuronowe. Krzysztof A. Cyran POLITECHNIKA ŚLĄSKA Instytut Informatyki, p. 335

Teoria przetwarzania A/C i C/A.

Nowoczesne metody emisji ucyfrowionego sygnału telewizyjnego

Wstęp do techniki wideo

Przekształcenia widmowe Transformata Fouriera. Adam Wojciechowski

Analiza obrazów - sprawozdanie nr 2

NIEOPTYMALNA TECHNIKA DEKORELACJI W CYFROWYM PRZETWARZANIU OBRAZU

Obiektywne metody pomiaru jakości obrazu

Aproksymacja funkcji a regresja symboliczna

Konfiguracja kodeka 3ivx 4.5.1

Wykład II. Reprezentacja danych w technice cyfrowej. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Wykład III: Kompresja danych. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

9. Dyskretna transformata Fouriera algorytm FFT

Spis treści. Przedmowa... XI. Rozdział 1. Pomiar: jednostki miar Rozdział 2. Pomiar: liczby i obliczenia liczbowe... 16

Przedmowa Wykaz oznaczeń Wykaz skrótów 1. Sygnały i ich parametry Pojęcia podstawowe Klasyfikacja sygnałów

Kody splotowe (konwolucyjne)

Kodowanie predykcyjne

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

METODY CHEMOMETRYCZNE W IDENTYFIKACJI ŹRÓDEŁ POCHODZENIA

5. Rozwiązywanie układów równań liniowych

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Macierze. Rozdział Działania na macierzach

Akwizycja obrazów. Zagadnienia wstępne

Kodowanie Huffmana. Platforma programistyczna.net; materiały do laboratorium 2014/15 Marcin Wilczewski

Grafika Komputerowa Wykład 1. Wstęp do grafiki komputerowej Obraz rastrowy i wektorowy. mgr inż. Michał Chwesiuk 1/22

Analiza składowych głównych. Wprowadzenie

POB Odpowiedzi na pytania

Filtracja obrazu operacje kontekstowe

TRANSFORMATA FALKOWA 2D. Oprogramowanie Systemów Obrazowania 2016/2017

Grafika Komputerowa Wykład 2. Przetwarzanie obrazów. mgr inż. Michał Chwesiuk 1/38

Temat: Algorytm kompresji plików metodą Huffmana

Algorytmy decyzyjne będące alternatywą dla sieci neuronowych

Podstawy kompresji danych

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Instrukcja do pracowni specjalistycznej

Rozdział 1 PROGRAMOWANIE LINIOWE

Przedstawiamy Państwu tekst będący

Cyfrowe przetwarzanie i kompresja danych

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

TECHNIKI MULTIMEDIALNE

Kompresja Danych. Streszczenie Studia Dzienne Wykład 13, f(t) = c n e inω0t, T f(t)e inω 0t dt.

Przetwarzanie i transmisja danych multimedialnych. Wykład 6 Metody predykcyjne. Przemysław Sękalski.

Audio i video. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

Analiza głównych składowych- redukcja wymiaru, wykł. 12

Wymiana i Składowanie Danych Multimedialnych Mateusz Moderhak, EA 106, Pon. 11:15-12:00, śr.

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Odtwarzanie i kompresja wideo

Proste metody przetwarzania obrazu

1. Wprowadzenie 1.1. Zdefiniowanie problemu badawczego

Transkrypt:

Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Informatyki Rok akademicki 2011/2012 Praca dyplomowa magisterska Stanisław Ogórkis Kompresja sekwencji wideo w systemie Linux Opiekun pracy: mgr inż. Julian Myrcha Ocena....................................................................................................... Podpis Przewodniczącego Komisji Egzaminu Dyplomowego

Specjalność: Informatyka Inżynieria systemów informatycznych Data urodzenia: 15 lutego 1988 r. Data rozpoczęcia studiów: 1 października 2007 r. Życiorys Nazywam się Stanisław Ogórkis i urodziłem się 15 lutego 1988 r. w Suwałkach. Po ukończeniu gimnazjum, kontynuowałem naukę w I L.O. im. Marii Konopnickiej w Suwałkach. W szkole średniej uczęszczałem do klasy o profilu matematyczno-fizycznym. W październiku 2007 r. rozpocząłem studia na Wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej. W wrześniu 2011 r. obroniłem pracę inżynierską pt. Kompresja falkowa w środowisku NVIDIA CUDA z wynikiem bardzo dobrym..................................... podpis studenta Egzamin dyplomowy Złożył egzamin dyplomowy w dn...................................................... Z wynikiem.......................................................................... Ogólny wynik studiów................................................................ Dodatkowe wnioski i uwagi Komisji..........................................................................................................................................

Streszczenie Głównym celem pracy jest opracowanie i opisanie metody tworzenia nowych kodeków wideo w systemie operacyjnym Linux. Opisano w niej istniejące w systemie Linux biblioteki i narzędzia wideo. Implementacja wykorzystuje bibliotekę FFmpeg oraz jest zintegrowana z różnymi aplikacjami i bibliotekami. Dodatkowo w ramach wstępu teoretycznego przedstawione są podstawy kompresji wideo, kompensacja ruchu, transformaty sygnału oraz metody kwantyzacji i kodowania bezstratnego. Praca zawiera szczegółową instrukcję dodania nowego kodeka wideo do biblioteki FFmpeg oraz jego integracji z pozostałymi aplikacjami. Wykonany kodek zweryfikowano pod kątem efektywności kompresji i szybkości działania. Słowa kluczowe: kompresja wideo, kompresja stratna, ffmpeg, linux, dwt, kodek arytmetyczny, kwantyzacja. Abstract Title: Video compression in Linux. The main goal of this thesis is to discover and document method of creation video codec in Linux operating system. It describes existing video libraries and tools in Linux system. Implementation uses FFmpeg library and it is integrated with various applications and libraries. Moreover theoretical introduction describes video compression basics, motion compensation, signal transforms, quantization and lossless encoding methods. Thesis contains detailed instruction of adding new video codec to FFmpeg library and its integration with other applications. Developed codec is verified for compression effectiveness and speed. Key words: video compression, lossy compression, ffmpeg, linux, dwt, arith coder, quantization.

Spis treści 1 Wstęp...................................... 3 1.1 Zdefiniowanie problemu........................ 3 1.2 Cele pracy................................ 4 1.3 Zawartość pracy............................. 4 2 Podstawy kompresji sekwencji wideo..................... 5 2.1 Redundancje sekwencji wideo..................... 5 2.2 Przestrzenie barw............................ 8 2.3 Miary jakości kompresji wideo..................... 11 2.4 Hybrydowy model kompresji stratnej DPCM/DCT......... 12 3 Estymacja i kompensacja ruchu........................ 14 3.1 Blokowa estymacja ruchu........................ 14 3.2 Blokowe algorytmy dopasowania bloku................ 15 4 Transformaty sygnału.............................. 18 4.1 Dyskretna transformata kosinusowa DCT............... 19 4.2 Dyskretna transformata falkowa DWT................ 22 5 Metody kwantyzacji............................... 25 5.1 Skalarna kwantyzacja równomierna.................. 25 5.2 Skalarna kwantyzacja nierównomierna................ 26 5.3 Skalarna kwantyzacja równomierna z rozszerzonym przedziałem zerowym.................................. 27 5.4 Kwantyzacja wektorowa........................ 28 6 Etap kodowania bezstratnego......................... 30 6.1 Kodowanie RLE............................. 30 6.2 Kody zmiennej długości........................ 31 6.3 Koder artymetyczny.......................... 33 6.4 Modelowanie statystyczne....................... 36 7 Przegląd kodeków wideo w systemie Linux.................. 37 7.1 FFmpeg................................. 38 7.2 Libav................................... 39 7.3 Xvid................................... 40 7.4 x264................................... 40 1

7.5 Gstreamer................................ 41 7.6 MPlayer................................. 41 7.7 ffmpegthumbnailer........................... 41 8 Opis proponowanego rozwiązania....................... 42 8.1 Główne założenia............................ 42 8.2 Architektura rozwiązania........................ 43 9 Implementacja projektu............................ 47 9.1 Platforma sprzętowa.......................... 47 9.2 Narzędzia i biblioteki.......................... 47 9.3 Dodanie kodeka wideo do FFmpeg.................. 48 9.4 Integracja FFmpeg z odtwarzaczem MPlayer............. 58 9.5 Integracja FFmpeg z biblioteką GStreamer.............. 59 9.6 Wykorzystanie ffmpegthumbnailer................... 60 10 Weryfikacja................................... 62 10.1 Zbiór testowy.............................. 62 10.2 Efektywność kompresji......................... 65 10.3 Szybkość działania........................... 78 11 Podsumowanie................................. 81 2

1 Wstęp 1.1 Zdefiniowanie problemu Efektywne metody kompresji sekwencji wideo, są kluczowym elementem w współczesnych rozwiązaniach multimedialnych i telekomunikacyjnych. Ograniczone możliwości przechowywania i przesyłania danych, wymagają korzystania z algorytmów kompresji stratnej. Metody bezstratne pozwalają na uzyskanie współczynników kompresji rzędu 3.5 : 1 [8]. W większości zastosowań, identyczna rekonstrukcja sygnału nie jest istotna, ze względu na ograniczone możliwości percepcji obserwatora, który jest końcowym odbiorcą sygnału. Wykorzystanie algorytmów kompresji stratnej pozwala na selektywne odrzucenie części informacji, która jest mało istotna dla odbiorcy. Przekształcony w ten sposób sygnał poddaje się skutecznej kompresji przy użyciu algorytmów kompresji bezstratnej. Dzięki istnieniu wysoce efektywnych kodeków wideo takich jak MPEG4 AVC, możliwe stało się powstanie m.in. takich usług jak telewizja cyfrowa DVB-T, czy strumieniowanie wideo wysokiej jakości przez internet w urządzeniach mobilnych. System operacyjny Linux posiada znaczący zbiór bibliotek i narzędzi wideo. Projekty takie jak FFmpeg, Libav, Xvid czy x264 pozwalają na kodowanie i dekodowanie przy użyciu większości istniejących kodeków wideo i kontenerów multimediów. Rozwiązania te cechują się bardzo wysoką jakością i efektywnością, często lepszą niż rozwiązania komercyjne 1. Dzięki tak bogatym możliwościom, system Linux jest bardzo często wykorzystywany w serwerach strumieniujących multimedia, czy w różnego rodzaju multimedialnych urządzeniach klienckich, np. nowoczesnych telewizorach. Potencjalna liczba odbiorców jest dodatkowo zwiększona poprzez bardzo dużą popularność mobilnego systemu operacyjnego Android, opierającego się na systemie Linux. Wymienione wcześniej projekty, są wykorzystywane również poza systemem Linux, np. przeglądarka Google Chrome wykorzystuje bibliotekę FFmpeg w celu dekodowania strumieni wideo określonych elementem < video > z powstającej specyfikacji HTML5. Otwartość kodu źródłowego rozwiązań wideo w systemie Linux, pozwala na zapoznanie się z ich mechanizmem działania oraz sposobem implementacji. Jest to szczególne przydatne w celach akademickich, umożliwiając rozszerzanie istniejących oraz dodawanie nowych kodeków. Wspomniane wcześniej projekty posiadają dokumentację, która nie zawsze w wystarczającym stopniu wyjaśnia sposób integracji nowego kodeka. Dodatkowo nie istnieje uwspólnione API podobne do DirectShow firmy Microsoft, przez co integracja kodeków z innymi bibliotekami, narzędziami i odtwarzaczami, wymaga często dodatkowych zabiegów. 1 W porównaniu kodeków MPEG AVC, kodek open source x264 wygrywa w większości testów oceniających jakość kompresji [7]. 3

1.2 Cele pracy Celem niniejszej pracy jest opracowanie i opisanie metody tworzenia kodeka sekwencji wideo w systemie operacyjnym Linux. Kodek został dodany do biblioteki FFmpeg oraz zintegrowany z aplikacjami oraz innymi bibliotekami. Ze względu na ubogą dokumentację projektu FFmpeg w tym zakresie, szczególny nacisk został położony na przygotowanie szczegółowej instrukcji dodania kodeka oraz jego integracji z aplikacjami korzystającymi z FFmpeg. Może być to szczególnie przydatne dla osób zainteresowanych pracą nad własnymi kodekami. Dodatkowo, opracowany kodek poddano szczegółowej weryfikacji, obejmującej porównanie z istniejącymi rozwiązaniami. Praca zawiera również opis algorytmów oraz metod wykorzystywanych w kompresji wideo. Aby ułatwić ich zrozumienie przedstawiłem kilka przykładów. Materiał ten pozwala zobrazować poszczególne kroki jakie są wykonywane w procesie stratnej kompresji sekwencji wideo i może być użyty w celach dydaktycznych. Opisane są również odtwarzacze, narzędzia i inne biblioteki wideo (poza FFmpeg) dostępne w systemie Linux. 1.3 Zawartość pracy W rozdziale drugim przedstawione są podstawy kompresji wideo, zawierające m.in. informację o redundancjach sekwencji wideo, przestrzeniach barw i miarach jakości. Rozdział trzeci zawiera informację o algorytmach estymacji i kompensacji ruchu. Rozdział czwarty opisuje transformaty sygnału wykorzystywane w kompresji stratnej na przykładzie transformaty kosinusowej DCT i transformaty falkowej DWT. W rozdziale piątym przedstawiono metody kwantyzacji, a w rozdziale szóstym kodowanie bezstratne. Rozdział siódmy zawiera przegląd kodeków i aplikacji wideo w systemie Linux. W rozdziale ósmym przedstawiono opis zaprojektowanego kodeka wideo. Rozdział dziewiąty zawiera informację o implementacji, w tym instrukcję dodania kodeka i jego integracji z aplikacjami. Rozdział dziesiąty przedstawia wyniki testów. Ostatni jedenasty rozdział, zawiera podsumowanie pracy. 4

2 Podstawy kompresji sekwencji wideo Zapis sekwencji wideo bez wykorzystania jakichkolwiek metod kompresji cechuje się znaczącą ilością danych niezbędnych do przechowywania. Dla przykładu chcąc zapisać nieskompresowane dane wideo dwugodzinnego filmu w jakości DVD-Video (25 klatek z przeplotem w rozdzielczości 720 x 576 pikseli), należy przeznaczyć na nie ponad 208 gigabajtów pamięci na sam obraz, co znacząco przekracza dostępną pojemność dla nośników DVD 2. Wzrost zapotrzebowania na takie usługi jak telewizja cyfrowa wysokiej jakości HDTV czy wideotelefonia wymaga stosowania skutecznych metod kompresji ze względu na ograniczone pasmo przenoszenia dla tych usług. 2.1 Redundancje sekwencji wideo Naturalne sekwencje wideo charakteryzują się redundancją, co pozwala skutecznie je kompresować. Celem algorytmów kompresji wideo jest jej usunięcie. Wyróżniamy odpowiednio: redundancję przestrzenną (spatial redundancy) Typowe obrazy składają sie z dużych obszarów tła (gradienty) oraz z małej ilości krawędzi. Wartości pikseli w ramce są ze sobą statystycznie skorelowane. Dzięki temu, możemy, np. skutecznie przewidzieć jaki będzie kolejny kodowany piksel. Przy kodowaniu sekwencji wideo proces ten nazywamy predykcją w ramach ramki (intraprediction). Usuwanie redundancji przestrzennej jest podstawą algorytmów kompresji zwykłych obrazów. Poniższy rysunek przedstawia predykcję wartości piksela w standardzie bezstratnej kompresji obrazów JPEG-LS. Rysunek 1: Predykcja wartości piksela X na podstawie kontekstu złożonego z trzech wcześniej zakodowanych pikseli ABC w standarcie JPEG-LS. Odpowiednie funkcje określające wartość można znaleźć w książce [24] 2 Każdy z pikseli przechowuje informację o składowych RGB na trzech bajtach. Dla 120 minutowej sekwencji wideo z 25 klatkami na sekundę musimy zapisać 180 tys. klatek. Sumaryczna niezbędna ilość danych wynosi więc: 720 x 576 x 3 x 180000 = 208.46 GB. 5

redundancję temporalną (temporal redundancy) Kolejne ramki sekwencji wideo prawie zawsze przedstawiają tą samą scenę. Kolejno występujące po sobie dwie ramki obrazu są więc ze sobą bardzo silnie skorelowane. Na rysunku 2 załączone są ramki 5 i 6 sekwencji testowej Akiyo przedstawiające prezenterkę telewizyjną w studiu. Powtarzając badanie opisane w książce [34], sprawdziłem dla ilu procent pikseli zmiany jasności wynoszą więcej niż jeden procent przy porównaniu sąsiadujących ramek 3. Dla dwóch wybranych wcześniej ramek zaledwie 0.65 procenta pikseli zmieniło swoją jasność o więcej niż jeden procent. Rysunek 2: Ramki 5 i 6 z sekwencji testowej Akiyo Wybrana sekwencja testowa charakteryzuje się dużą statycznością. Wykres 3 pozwala zauważyć, że przekroczenie wybranego progu dotyczy niewielkiej liczby pikseli. Dla prawie wszystkich ramek obrazu jest ich mniej niż 5%. Dokonując predykcji pikseli w dziedzinie czasu możemy efektywnie skompresować podobne do siebie ramki sekwencji wideo (inter-prediction). Algorytmy analizy i kompensacji ruchu pozwalają skutecznie usunąć redundancję temporalną. Rysunek 3: Wykres zależności procentu pikseli, których zmiana jasności przekracza jeden procent od czasu w sekwencji testowej Akiyo 3 Zastosowałem tu przejście do przestrzeni barw Y C b C r 6

redundancję psychowizualną (psychovisual redundancy) Końcowym odbiorcą większości systemów kompresji sekwencji wideo jest człowiek. Należy wiec zwrócić szczególną uwagę na cechy ludzkiego zmysłu wzroku, nazywanego systemem ludzkiego postrzegania (HSV - Human Visual System). Obecnie trwające prace nad ulepszeniem metod kompresji stratnej skupiają się na dwóch głównych kierunkach. Pierwszym z nich jest usprawnianie metod usuwania wspomnianych wcześniej redundancji przestrzennych i temporalnych oraz na doskonalszych metodach kodowania. Drugim kierunkiem jest wykorzystanie niedoskonałości ludzkiego zmysłu wzroku, umożliwiających wprowadzanie zniekształceń w niewidoczny dla obserwatora sposób. W książkach [1] i [29], można znaleźć szczegółowy opis w jaki sposób zachodzi percepcja obrazów przez ludzki zmysł wzroku. Najbardziej istotne dla kompresji cechy to: większa czułość na zmiany jasności niż na zmiany barwy niska zdolność do postrzegania wysokoczęstotliwościowych składowych detali czułość na ruch percepcja jasności ma nieliniową charakterystykę (korekcja gamma) postrzeganie uzależnione od kontrastu - zniekształcenia w bardzo jasnych oraz bardzo ciemnych obszarach są mało widoczne (efekt lumminance masking - rysunek 4) Rysunek 4: Efekt luminance masking ukazany na silnie skompresowanym obrazie Lena. Efekty blokowe są mniej widoczne w rozjaśnionej części obrazu. 7

redundancję kodowania (coding redundancy) Przedstawione wcześniej rodzaje redundancji zajmują się nadmiarowością informacji zawartej w sygnale. Redundancja kodowania związana jest z reprezentacją informacji. Uzyskanie jak najmniejszej liczby bitów wymaga jej usunięcia. Dzięki temu, że liczność poszczególnych symboli kodowanego alfabetu jest różna (np. znacząca ilość zer w kodowanym strumieniu), możemy wykorzystać różnego rodzaju metody kompresji bezstratnej. Metody te zostały opisane w rozdziale 6. 2.2 Przestrzenie barw Przestrzeń barw jest matematycznym modelem umożliwiającym zapisanie informacji o barwie przy pomocy odpowiedniej ilości wartości numerycznych (zazwyczaj trzech bądź czterech), będących składowymi koloru. Zdefiniowana w 1931 r. przez Międzynarodową Komisję Oświetleniową (Commission internationale de l éclairage) przestrzeń XYZ była pierwszą matematycznie opisaną przestrzenią barw [1]. Eksperymenty wykorzystujące kolorymetr pozwoliły zdefiniować opis widocznych przez człowieka barw przy użyciu trzech zmiennych XYZ, które są zależne od sprawności poszczególnych rodzajów receptorów oka. Aby umożliwić wygodniejszy opis wprowadzono przekształcenie do przestrzeni CIE xyy, gdzie zmienne x i y określają chromatyczność, a Y określa luminancję. Umożliwia to graficzną reprezentację widocznej gamy barw przy pomocy wykresu chromatyczności (rysunek 5). Rysunek 5: Wykres chromatyczności widocznych dla człowieka barw. Na zewnętrznej granicy opisane są długości fali elektromagnetycznej w nanometrach odpowiadające poszczególnym barwom. 8

2.2.1 RGB Standardowym sposobem na przechowywanie informacji o jasności i barwie jest wykorzystanie przestrzeni barw RGB. W tym systemie, każdy z pikseli jest reprezentowany przez trójkę wartości jasności barw czerwieni, zieleni i niebieskiego. Dzięki temu dość łatwo można wykorzystać ten model do addytywnego wyświetlania kolorów, poprzez sterowanie jasnością odpowiednich barw, jak również do jego akwizycji poprzez odpowiednie filtrowanie. Wybór tych konkretnie barw jest podyktowany fizjologią receptorów ludzkiego oka [1]. Na rysunku 6 przedstawione zostały barwy możliwe do uzyskania w przestrzeni RGB. Warto zauważyć, że mieszając trzy kolory nie jesteśmy w stanie uzyskać wszystkich widocznych dla człowieka barw. Rysunek 6: Wykres chromatyczności z wartościami możliwymi do uzyskania w przestrzeni barw RGB. 2.2.2 YC b C r Przestrzeń barw YC b C r ze względu na swoje właściwości jest powszechnie wykorzystywanym modelem w dziedzinie kompresji obrazów oraz sekwencji wideo. W składowej Y przechowywana jest informacja o luminancji, natomiast na dwóch pozostałych składowych C b C r informacja o chrominancji. Dzięki temu można w prosty sposób wykorzystać wyższą czułość ludzkiego wzroku na zmiany jasności niż barwy. Przy kompresji należy przeznaczyć więcej bitów na informację o chrominancji kosztem liczby bitów przeznaczonych na chrominancję. Wprowadzone w ten sposób zniekształcenia, będą mniej widoczne niż miałoby to miejsce w przypadku zastosowania modelu RGB, gdzie informacja o jasności jest zawarta w każdej z składowych. Poniżej znajdują się wzory transformacyjne między przestrzeniami RGB oraz YC b C r. 9

Y 0 0.299 0.587 0.114 R C b = 128 + 0.169 0.331 0.500 G C r 128 0.500 0.419 0.081 B R 1.000 0.000 1.400 Y G = 1.000 0.343 0.711 (C b 128) B 1.000 1.765 0.000 (C r 128) (1) 2.2.3 Podpróbkowanie chromatyczności YC b C r Zgodnie z opisanym wcześniej systemem ludzkiego postrzegania HSV, ludzki wzrok jest bardziej czuły na zmiany jasności niż chrominancji. Wykorzystując tą cechę, można zmniejszyć rozdzielczość przeznaczoną na składowe chrominancji nie wpływając znacząco na jakość obrazu odbieraną przez obserwatora. Proces ten nazywa się podpróbkowaniem chromatyczności (chroma subsampling) i jest opisywany najczęściej przy użyciu trzech lub czterech cyfr oddzielonych dwukropkami [22]. Na rysunku 7 pokazane są przykładowe wzorce podpróbkowania wraz z opisem numerycznym. Wzorzec 4:4:4 oznacza brak podpróbkowania, czyli chrominancja jest w tej samej rozdzielczości co jasność. Uzyskujemy w ten sposób 24 bity na piksel. Dla metody 4:2:2 zmniejszamy rozdzielczość w poziomie o 2 uzyskując rozdzielczość 16 bitów. W metodzie 4:1:1 dzielimy rozdzielczość w poziomie o 4. Dla wzorca 4:2:0 potrzeba jedynie 6 wartości (4 jasności i 2 chrominancji) do opisania grupy 4 pikseli. Rozdzielczość jest tu podzielona o dwa zarówno dla poziomu jak i pionu. Uzyskujemy w wyniku tej metody jedynie 12 bitów na piksel. Pozycje pikseli C b i C r mogą być przesunięte w stosunku do pikseli jasności. Więcej informacji na temat podpróbkowania chromatyczności znajduje się w książce [22]. Rysunek 7: Metody podpróbkowania chromatyczności YC b C r [22]. 10

2.3 Miary jakości kompresji wideo Ocena jakości wideo jest bardzo ważnym problemem przy zastosowaniu kompresji stratnej. Głównym celem koderów jest minimalizacja zniekształceń wprowadzonych w wyniku kompresji. Miary jakości dzielimy na obiektywne i subiektywne. Przyjęcie odpowiedniej miary jakości pozwala na skuteczniejszą kompresję. 2.3.1 Obiektywne miary jakości Obiektywne miary jakości korzystają z matematycznych modeli, które pozwalają na ich obliczenie w sposób numeryczny na komputerze. Najczęściej stosowane jest porównanie pikseli obrazu nieskompresowanego oraz skompresowanego. Tradycyjnie wykorzystywaną metodą oceny jakości jest miara PSNR (peak signal-to-noise ratio) opisana wzorem: ( ) MAX 2 P SNR = 10 log 10 MSE ( ) MAX = 20 log 10 MSE gdzie M AX to maksymalna jasność piksela, a M SE to błąd średniokwadratowy między obrazem oryginalnym, a zrekonstruowanym. Różna dynamika sygnałów dla których wykorzystuje się tę miarę wymaga, aby była ona wyrażona w skali logarytmicznej. Przy braku zniekształceń MSE wynosi zero i P SNR dąży do nieskończoności. Nieliniowa charakterystyka percepcji jasności sprawia, że miara ta nie odwzorowuje w dokładny sposób oceny jakości obrazu przez obserwatora. Było to motywacją do powstania wielu innych modeli opisanych m.in. w pracy [24]. 2.3.2 Subiektywne miary jakości Subiektywne miary jakości korzystają bezpośrednio z opinii obserwatorów na temat jakości sekwencji wideo. Przeprowadzenie subiektywnych testów jest kosztowne w dziedzinie czasu i zasobów ludzkich. Pierwszym krokiem przy przeprowadzeniu tego typu testów jest wybranie odpowiednich sekwencji testowych oraz wybranie cech kompresora, które będą badane (np. ocena jakości w zależności od współczynnika kompresji). Następnie należy wybrać grupę osób, która będzie oceniała wyniki działania kodera. W zależności czy testy przeprowadzane są na ekspertach z dziedziny analizy obrazu czy na przypadkowych ludziach, uzyskiwane mogą być zupełnie różne wyniki. Dla przykładu, rozmycie obrazu powstałe w wyniku zastosowania kompresji redukuje naturalne szumy, przez co osoby nie świadome tego zjawiska, często mylą obraz oryginalny z zrekonstruowanym. Po przeprowadzeniu testów dokonywana jest analiza otrzymanych danych. Najczęściej stosuje się w tym przypadku uśrednienie z usunięciem niepewnych próbek (np. osoba która bardzo często zmieniała zdanie w poszczególnych ocenach). Przykładem standardowej metodologi w przeprowadzaniu testów subiektywnych jest rekomendacja Międzynarodowej Unii Telekomunikacyjnej (International Telecommunication Union) ITU-R BT.500 [14]. (2) 11

2.4 Hybrydowy model kompresji stratnej DPCM/DCT Aby uzyskać możliwie najkrótszą reprezentację sekwencji wideo, należy usunąć z niej wszystkie opisane wcześniej rodzaje redundancji. Najczęściej stosowanym współcześnie schematem jest hybrydowy model DPCM/DCT (hybrid DPCM/DCT CODEC ). Jest on wykorzystywany w standardach: H.261, H.263, H.264, MPEG-1, MPEG-2, MPEG-4 Visual. Na rysunkach 8 i 9 znajdują się schematy kodera oraz dekodera. Przytaczając zamieszczony w książce [26] opis, koder wykonuje następujące kroki: 1. Podzielenie ramki F n na makrobloki (macroblock) o ustalonej wielkości (np. 16x16). 2. Porównanie makrobloków ramki F n z makroblokami ramki odniesienia F n 1, która w najprostszym schemacie może być po prostu poprzednią ramką. Wykonanie estymacji i kompensacji ruchu generuje wektory przesunięcia MV (motion vector). Uzyskana w wyniku predykcja makrobloku P jest odejmowana od oryginalnego kodowanego makrobloku. 3. Uzyskany różnicowy makroblok D jest dzielony na mniejsze bloki (8x8 albo 4x4) i są one oddzielnie poddawane dyskretnej transformacie kosinusowej DCT. Uzyskane współczynniki są następnie kwantyzowane (X). 4. Kolejność współczynników jest odpowiednio zmieniana i jest kodowana bezstratnie koderem entropijnym. Dla każdego makrobloku kodowane są również informacje związane z wektorami przesunięć oraz danymi nagłówka. 5. Ostatnim krokiem jest przygotowanie ramki odniesienia F n na potrzeby kodowania kolejnych ramek. W tym celu należy wykonać dekwantyzację współczynników X oraz odwrotną transformatę IDCT. Uzyskany różnicowy makroblok D dodawany jest do makrobloku predykcji P w wyniku czego uzyskujemy ramkę odniesienia F n. Rysunek 8: Koder wideo zgodny z modelem hybrid DPCM/DCT [26] 12

Dekodowanie przebiega zgodnie z następującymi krokami: 1. Dekodowanie strumienia bitowego zawierającego współczynniki, wektory przesunięć oraz dane nagłówka każdego z makrobloków. 2. Przywrócenie pierwotnej kolejności współczynników. 3. Dekwantyzacja współczynników i transformata odwrotna IDCT. Uzyskujemy w tym momencie różnicowy makroblok D identyczny do tego, który był konstruowany w celu przygotowania ramki odniesienia F n w koderze. 4. Utworzenie makrobloku predykcji P na podstawie ramki odniesienia F n 1 oraz wektora przesunięcia MV. 5. Dodanie makrobloku predykcji P i różnicowego makrobloku D. W wyniku uzyskujemy zrekonstruowany makroblok. Po zdekodowaniu wszystkich makrobloków uzyskujemy zrekonstruowaną ramkę F n. Rysunek 9: Dekoder wideo zgodny z modelem hybrid DPCM/DCT [26] 13

3 Estymacja i kompensacja ruchu Algorytmy estymacji oraz kompensacji ruchu są wykorzystywane w większości współczesnych kodeków wideo. Sąsiadujące ze sobą ramki obrazu cechują się znaczącym podobieństwem. Przedstawiony w poprzednim rozdziale hybrydowy model kompresji stratnej DPCM/DCT, wykorzystuje kompensację i estymację ruchu, aby przygotować bloki o możliwie najmniejszej energii. Pozwala to znacząco zredukować redundancję temporalną, dzięki czemu możliwe jest uzyskanie wysokiej efektywności kompresji. 3.1 Blokowa estymacja ruchu Algorytm blokowej estymacji ruchu operuje na blokach, np. 16x16 pikseli. Zwyczajne odjęcie pikseli kodowanej ramki od ramki odniesienia pozostawia wiele energii w ramce rezydualnej. Na rysunku 10 przedstawione są wyniki bez zastosowania kompensacji ruchu, jak również z wykorzystaniem kompensacji ruchu. Dokonanie estymacji i kompensacji ruchu, przed odjęciem pikseli pozwala, znacząco zredukować energię w wynikowej ramce rezydualnej, dzięki czemu możliwa będzie jej skuteczniejsza kompresja. Rysunek 10: Porównanie uzyskanych ramek rezydualnych bez i z kompensacją ruchu. Lewy górny obraz - obraz oryginalny; prawy górny - ramka rezydualna bez kompensacji; lewy dolny - obraz po wykonaniu kompensacji (zawiera wektory przemieszczenia); prawy dolny - ramka rezydualna z kompensacją. Na podstawie materiałów Moscow State University Video Group. 14

Istnieje wiele algorytmów estymacji ruchu. Metoda optical flow [3] jest uogólnioną metodą estymacji ruchu, którą można zastosować zarówno w wariance dwu jak i trzy wymiarowym. Generuje ona wektory przemieszczeń dla każdego z pikseli obrazu. Metoda ta nie może być wykorzystana w kompresji ze względu na wysoką złożoność obliczeniową, jak również konieczność przesłania do dekodera wektora przemieszczeń dla każdego z pikseli. W praktyce wykorzystuje się algorytmy, w których dokonywana jest estymacja ruchu dla całego bloku z kodowanej ramki. Porównywanie odbywa się według specjalnego algorytmu dopasowania do wzorca (Block-matching algorithm), który powinien znajdować optymalny wektor przemieszczenia dla danego bloku. Opis dwóch wybranych algorytmów dopasowania bloku znajduje się w dalszej części rozdziału. Istnieją również inne metody, opisane szczegółowo w książce [17]. Ważna kwestią jest wybór odpowiedniego rozmiaru bloku. Bloki o małych rozmiarach jest łatwiej dopasować, dzięki czemu ramka rezydualna ma mniej energii. Ich dopasowanie jest jednak bardziej wymagające obliczeniowo i uzyskujemy więcej wektorów przemieszczeń, które należy przesłać do dekodera. Nowsze rozwiązania takie jak MPEG-4 posiadają kompensację ruchu operującą na blokach zmiennej wilkości (Variable block-size motion compensation). Koder w trakcie kompresji, tak dobiera rozmiary bloków, aby uzyskać możliwie najlepszy stopień kompresji. 3.2 Blokowe algorytmy dopasowania bloku Algorytmy dopasowania bloku, poszukują wektora przemieszczenia w sąsiedztwie danego bloku. Na rysunku 11 przedstawiony jest blok o rozmiarze 16x16 i parametrze poszukiwania p = 7, który określa wielkość sąsiedztwa w jakim odbywa się poszukiwanie wzorca. Większy rozmiar sąsiedztwa pozwala znaleźć potencjalnie lepsze dopasowanie. Wymaga to jednak znaczenie większych nakładów obliczeniowych. Rysunek 11: Sąsiedztwo dopasowania bloku[2] 15

Istotną kwestią jest również określenie kryterium decyzyjnego określającego, które dopasowanie jest lepsze pod względem kompresji. Stosuje się tu różnego rodzaju funkcję kosztu, np. MSE (Mean Square Error), MAD (Mean absolute difference), SAD (Sum of absolute differences), SSE (Sum of squared errors). Poniżej znajduje się opis trzech wybranych algorytmów poszukiwania dopasowania na podstawie artykułu [2]. Przeszukiwanie wyczerpujące Przeszukiwanie wyczerpujące (Exhaustive Search - ES) jest metodą, która oblicza funkcję kosztu dla każdego z możliwych położeń bloku w oknie poszukiwania. Uzyskujemy w ten sposób rozwiązanie optymalne. Wymaga to jednak znaczących nakładów obliczeniowych. Dla bloku o rozmiarze 16x16 i parametrze poszukiwania p = 7, algorytm ES wykona 225 obliczeń funkcji kosztu. Pozostałe algorytmy dopasowania bloku starają się zredukować liczbę obliczeń, przy zachowaniu wyniku bliskiemu optymalnemu. Przeszukiwanie trzystopniowe Przeszukiwanie trzystopniowe (Three Step Search - TSS), to jedna z pierwszych metod, próbujących zastosować heurystykę w celu zredukowania liczby obliczeń funkcji kosztu. Poszukiwanie rozpoczyna się od policzenia kosztu dla 8 punktów oddalonych od punktu początkowego o odległość S = 4. Następnie spośród tych punktów oraz punktu początkowego wybierany jest punkt o najmniejszym koszcie i w następnym kroku, od niego rozpoczynamy dalsze poszukiwanie. Poprzedni proces powtarzamy dwukrotnie ze zmniejszoną odległością, odpowiednio S = 2 oraz S = 1. Na rysunku 12 przedstawiony jest proces poszukiwania algorytmem TSS, w którym uzyskujemy wektor przemieszczenia (5, 3). Zastosowanie tego algorytmu redukuje liczbę obliczeń do 25 4. Rysunek 12: Algorytm przeszukiwania trzystopniowego (Three Step Search - TSS)[2] 4 przy wybranym wcześniej rozmiarze bloku 16x16 i parametrze p = 7 16

Przeszukiwanie czterostopniowe Przeszukiwanie czterostopniowe (Four Step Search - 4SS), to metoda w której liczba kroków nie jest stała. Na rysunku 13 przedstawiony jest pesymistyczny wariant o czterech krokach, w wyniku którego uzyskujemy wektor przemieszczenia (3, 7). Poszukiwanie rozpoczyna się od obliczenia kosztu dla punktów oddalonych o S = 2 od punktu początkowego i jego samego. Następnie jeśli uzyskaliśmy najmniejszy koszt dla punktu początkowego, wówczas przechodzimy do kroku czwartego. Jeśli nie, wtedy za nowy punkt początkowy uznajemy punkt o najniższym koszcie i obliczamy koszt tak samo jak w kroku pierwszym. W zależności od położenia nowego punktu początkowego, w kroku drugim, musimy policzyć koszt dla trzech lub pięciu punktów. Ponownie sprawdzamy czy punkt początkowy ma najniższy koszt i jeśli nie, to przechodzimy do kroku trzeciego analogicznego do kroku drugiego. W kroku czwartym zmniejszamy odległość przeszukiwania na S = 1. Punkt o najniższym koszcie jest szukanym wektorem przemieszczenia. Metoda ta umożliwia znalezienie wektora w 17 krokach w wariancie optymistycznym oraz w 27 krokach w wariancie pesymistycznym. Rysunek 13: Algorytm przeszukiwania czterostopniowego (Four Step Search - 4SS)[2] 17

4 Transformaty sygnału Schemat kodowania transformacyjnego jest powszechnie używaną metodą w dziedzinie kompresji stratnej obrazów i sekwencji wideo. Polega ona na zastosowaniu transformaty na sygnale przekształcając go w do nowej dziedziny. Dzięki takiemu działaniu uzyskujemy reprezentację sygnału, która lepiej poddaje się kompresji przy użyciu standardowych metod kodowania. Przy dekodowaniu wykonywana jest transformata odwrotna pozwalająca na powrócenie do pierwotnej dziedziny danych. Transformaty wykorzystywane w kompresji charakteryzują się następującymi cechami: 1. Dla transformaty musi istnieć transformata odwrotna pozwalająca na powrót to dziedziny bazowej. Na potrzeby kompresji stratnej nie jest wymagane, aby transformata była w pełni odwracalna, tj. dopuszczalne są niewielkie zmiany w zrekonstruowanym sygnale. 2. Dane powinny być zdekorelowane. Korelacja pomiędzy składowymi sygnału oznacza, że jest w nim zawarta redundantna informacja. Na rysunku 14 przedstawione są dane w kartezjańskim układzie współrzędnych. Cechują się one silną korelacją i dokonując przekształcenia układu współrzędnych do układu biegunowego usuwamy tą redundancję. Składowa r ma niewielką zmienność, natomiast składowa φ dużą. W pierwotnej reprezentacji obie składowe cechowały się znaczą zmiennością, więc nowa baza jest korzystniejsza ze względu na kompresję danych. 3. Silnie upakowana reprezentacja danych. W przekształconym sygnale energia powinna kumulować się na niewielkiej liczbie współczynników. Pozostałe powinny być zerami, bądź wartościami bliskimi zeru. Rysunek 14: Reprezentacja danych w kartezjańskim i biegunowym układzie współrzędnych 18

4. Transformata musi mieć możliwe do spełnienia wymagania obliczeniowe w kwestii czasu wykonania oraz zasobów pamięciowych. Transformaty wykorzystywane na potrzeby kompresji obrazów i sekwencji wideo można podzielić na dwie główne kategorie: operujące na blokach oraz na całych obrazach. Ze względu na wykorzystanie algorytmów kompensacji ruchu, które operują na blokach, w kompresji wideo częściej korzysta się transformat blokowych. W dalszej części rozdziału zostały opisane szczegółowo transformata kosinusowa DCT operująca na blokach oraz transformata falkowa DWT operująca na całych obrazach. 4.1 Dyskretna transformata kosinusowa DCT Dyskretna transformata kosinusowa DCT (Discrete Cosine Transform) jest używana w wielu dziedzinach, m.in. przy kompresji danych. Jej odmiany są wykorzystywane zarówno do kompresji audio (MP3, AAC, Vorbis), obrazów (JPEG) jak i sekwencji wideo (MPEG, h264). Pozwala na przedstawienie danych jako sumy funkcji kosinus o różnych częstotliwościach oscylacji. Wzory transformacyjne dla przypadku jednowymiarowego mają postać [33]: 2 n 1 Y (i) = n C(i) (2j + 1)iΠ X(j)cos, i = 0,..., n j=0 2n 2 1 2 dla i = 0 C(i) = 1 dla w p.p. (3) gdzie X ciąg wejściowy o długości n, a Y to sygnał wyjściowy. Transformata odwrotna IDCT (Inverse Discrete Cosine Transform), jest wykonywana przy użyciu wzoru: 2 n 1 (2i + 1)jΠ X(i) = C(j)Y (j)cos, i = 0,..., n n j=0 2n 2 1 2 dla i = 0 C(i) = 1 dla w p.p. (4) Transformata jednowymiarowa jest przydatna dla sygnałów jednowymiarowych, np. dźwięku. W przypadku obrazów i sekwencji wideo wykorzystywana jest transformata dwuwymiarowa. Dzięki temu, że transformata kosinusowa posiada cechę separowalności, możemy wykonać transformatę dwuwymiarową poprzez wykonanie transformaty jednowymiarowej po każdym z wymiarów osobno. Dla bloku X o wymiarach n x m obliczenie transformaty Y oraz transformaty odwrotnej wykonujemy przy użyciu poniższych wzorów: 19

Y (i, j) = 2 m 1 nm C(i)C(j) l=0 n 1 k=0 X(k, l)cos (2k + 1)iΠ (2l + 1)jΠ cos, i, j = 0,..., n, (5) 2n 2m X(i, j) = 2 nm m 1 l=0 n 1 k=0 C(k)Y (l)cos (2i + 1)kΠ (2j + 1)lΠ cos, i, j = 0,..., n (6) 2n 2m Zadany sygnał wejściowy, np. obraz jest dzielony na bloki o określonej wielkości. W standardzie JPEG [5] przyjmuje się, że bloki mają rozmiar 8 x 8. Równanie 5, możemy przedstawić przy pomocy mnożenia macierzy: Y = AXA T (7) gdzie X to blok danych wejściowych, Y to blok uzyskanych współczynników, a A to macierz przekształcenia. Macierz przekształcenia jest macierzą ortogonalną i jej wartości zależą od jej rozmiaru. Pierwsze mnożenie macierzy przekształcenia przez macierz wejściową AX, odpowiada wykonaniu transformaty po wierszach, natomiast drugie mnożenie przez macierz transponowaną przekształcenia odpowiada tranformacie po kolumnach. Każdy z współczynników wynikowej macierzy jest wagą odpowiedniego wzorca bazowego. Na rysunku 15 przedstawiono wzorce dla bloku o rozmiarze 8 x 8. Współczynniki w bazie DCT, tworzą kombinację liniową wzorców. Rozważmy przykład w którym wszystkie piksele bloku mają tą samą wartość. Wówczas taki blok w bazie DCT, będzie miał tylko jeden piksel o wartościach różnych od zera (pierwszy lewy górny wzorzec z rysunku 15). Rysunek 15: Wzorce bazy DCT dla bloku 8 x 8 20

Transformata DCT posiada wszystkie opisane na początku rozdziału pożądane cechy. Jest odwracalna. Współczynniki w nowej bazie mają wartości zmiennoprzecinkowe i wymagają skwantyzowania przed kodowaniem bezstratnym. Po rekonstrukcji nie odzyskamy więc dokładnie tych samych wartości. Wykorzystanie transformaty DCT umożliwia zredukowanie korelacji między pikselami obrazu (redundancja przestrzenna). Na rysunku 16 przedstawiono wynik obliczenia transformaty DCT na obrazie Lena (wartości współczynników zostały odpowiednio zeskalowane). Większość współczynników w nowej dziedzinie ma wartości bliskie zeru. W wynikowym bloku energia kumuluje się w lewym górnym rogu, dzięki czemu uzyskujemy silnie upakowaną reprezentację danych. Poniżej znajduje się wejściowy i wynikowy blok dla transformaty DCT 4 x 4. 136 142 148 161 138 145 149 164 X = 131 143 150 158 135 139 149 162 587, 50 37, 95 5, 00 5, 39 2, 55 1, 96 0, 97 1, 81 Y = 1, 50 0, 35 3, 00 1, 77 4, 30 0, 31 4, 19 0, 54 (8) Proste zastosowanie powyższych wzorów w celu obliczenia transformaty ma złożoność obliczeniową O(n 2 ) Zastosowanie zoptymalizowanych do konkretnych rozmiarów bloków algorytmów, pozwala uzyskać złożoność obliczeniową rzędu O(nlog(n)). Algorytmy nie wymagają znacznej ilości pamięci operacyjnej. Rysunek 16: Wynik wykonania transformaty DCT na obrazie Lena 21

4.2 Dyskretna transformata falkowa DWT Dyskretna transformata falkowa DWT (Discrete Wavelet Transform) jest obecnie najlepszą istniejącą transformatą w dziedzinie kompresji obrazów. Jest m.in. wykorzystywana w standardzie JPEG2000[15] oraz jednym z najskuteczniejszych kompresorów obrazów SPIHT[28]. W odróżnieniu do transformaty DCT operuje ona nie na blokach, a na całych obrazach. Transformata falkowa należy do przekształceń całkowych, w których obliczany jest iloczyn skalarny sygnału z częścią nazywaną jądrem przekształcenia. W przypadku transformaty Fouriera, jądrem przekształcenia są funkcje sinusoidalne. Transformata falkowa nie posiada ściśle określonej funkcji jądra. Mogą nimi być dowolne funkcje spełniające określone warunki. Takie funkcje nazywamy funkcjami falkowymi, bądź falkami (wavelets). Szczegółowe wzory opisujące ciągłą transformatę falkową CWT oraz funkcje falkowe można znaleźć w [10] oraz [31]. Dyskretna transformata falkowa jest realizowana poprzez filtrację sygnału przy pomocy banków filtrów górno i dolno przepustowych [4]. Dla transformaty sygnału wykorzystujemy filtry analizy (H 0 i H 1 ), a w przypadku transformaty odwrotnej filtry syntezy (F 0 i F 1 ). Każda z funkcji falkowych opisywana jest więc przy pomocy odpowiedniego zestawu filtrów. Poniżej znajdują się wzory opisujące wyjście filtrów dolno (y L ) i górno (y H ) przepustowego. y L [n] = (x H 1 )[n] y H [n] = (x H 0 )[n] (9) Warto zauważyć, że na wyjściu uzyskamy dwa wektory współczynników o długości równej przetwarzanemu sygnałowi. Cechy transformaty falkowej zapewniają nam, że po usunięciu co drugiej próbki z obu wektorów, będziemy w stanie zrekonstruować sygnał wejściowy wstawiając w miejsce usuniętych wartości zera. Na rysunku 17 przedstawiony został prosty bank filtrów analizy i syntezy. Symbol 2 oznacza usunięcie co drugiej próbki, natomiast symbol 2 oznacza wstawienie zera pomiędzy każdą z próbek. Rysunek 17: Bank filtrów analizy i syntezy 22

Na wyjściu filtru dolno przepustowego uzyskujemy współczynniki uśrednione, natomiast na wyjściu filtru górno przepustowego współczynniki detali. Na potrzeby kompresji warto kontynuować dekompozycję sygnału w paśmie niskiej częstotliwości. Rysunek 18 przedstawia schemat dekompozycji sygnału o trzech poziomach, razem z podziałem pasma częstotliwości na poszczególnych poziomach. Rysunek 18: Podział pasma częstotliwości w banku filtrów analizy Transformata falkowa podobnie jak transformata kosinusowa charakteryzuje się separowalnością, dzięki czemu obliczenie transformaty wielowymiarowej wykonujemy poprzez wykonanie transformaty po każdym z wymiarów osobno. Schemat dekompozycji sygnału wielowymiarowego przy użyciu banków filtrów przedstawił Mallat [10]. Na rysunku 19 przedstawiony został bank filtrów analizy dla obrazu X. Rysunek 19: Dekompozycja obrazu przy użyciu algorytmu Mallata 23

Jednowymiarowej transformacie poddawane są najpierw wektory wierszy i usuwana jest z nich co druga kolumna, podobnie jak zostało to przedstawione w banku filtrów na rysunku 17. W kolejnym kroku analogiczne działanie jest wykonywane na wektorach kolumn. Uzyskujemy w ten sposób cztery podmacierze A, B, C i D. Dekompozycję warto kontynuować w podpaśmie niskich częstotliwości A. Na poniższym rysunku znajduje się wynik działania dekompozycji Mallata, dla obrazu Lena. Rysunek 20: Schematyczny sposób działania dekompozycji wielorozdzielczej obrazu: a) obraz orginalny; b) obraz poddany dekompozycji jednopoziomowej c) przykład działania na obrazie Lena; Taki właśnie schemat dekompozycji, jest wykorzystywany w standardzie JPEG2000 [23]. W paśmie niskiej częstotliwości A uzyskujemy obraz w niższej skali, natomiast w pasmach B, C i D uzyskujemy odpowiednio krawędzie: pionowe, poziome i ukośne. Transformata falkowa pozwala nam usunąć korelację przestrzenną między sąsiadującymi współczynnikami, poprzez zmniejszenie skali obrazu i zapisanie różnic w współczynnikach detali. Typowe obrazy składają się znacznych ilości pikseli reprezentujących tło (składowe niskoczęstotliwościowe) oraz z niewielkiej liczby pikseli krawędzi (składowe wysokoczęstotliwościowe). Dziedzina falkowa jest więc bardzo dobrą bazą do opisu naturalnych obrazów. Uzyskujemy silnie upakowaną reprezentację sygnału, ponieważ większość współczynników detali ma wartości zero, bądź bliskie zeru. Dokonując wielopoziomowej dekompozycji sygnału, jeszcze bardziej zmniejszamy stosunek liczby współczynników uśrednionych do współczynników detali. Wszystkie przedstawione cechy sprawiają, że transformata falkowa pozwala na uzyskanie wyższej skuteczności od transformaty kosinusowej w przypadku kompresji obrazów [30]. Zadecydowało to jej wykorzystaniu przy tworzeniu nowego standardu przez komitet JPEG (Joint Picture Experts Group). Transformata falkowa ma większe wymagania obliczeniowe, jednak nie są one w praktyce istotne. Jej wykorzystanie w dziedzinie kompresji wideo jest ograniczone, ze względu na wykorzystanie algorytmów kompensacji ruchu operujących na blokach. 24

5 Metody kwantyzacji Otrzymane w wyniku obliczenia odpowiednich transformat sygnały muszą być poddane kwantyzacji. Dzięki zmniejszeniu dziedziny danych sygnału, można zredukować liczbę bitów niezbędną do jego zapisania. Dodatkowo w wyniku części transformat uzyskujemy współczynniki o wartościach ciągłych. Kwantyzacja umożliwia zredukowanie alfabetu symboli, który będzie poddawany kompresji bezstratnej koderami entropijnymi. Odpowiedni dobór poziomów kwantyzacji decyduje o jakości zrekonstruowanego w procesie dekompresji sygnału. W przedstawionym w pierwszym rozdziale schemacie kompresji DPC- M/DCT, kwantyzacja jest krokiem stratnym. Kwantyzator powinien więc cechować się możliwie niewielkimi wprowadzanymi zniekształceniami i takim przekształceniem dziedziny danych, aby poddawały się skutecznie kompresji bezstratnej. Wyróżniamy dwa podstawowe typy kwantyzatorów. Kwantyzator skalarny dokonuje odwzorowania pojedynczej wartości sygnału na skwantyzowany współczynnik. Kwantyzator wektorowy odwzorowuje grupę (wektor) wartości sygnału na odpowiednią grupę skawantyzowanych współczynników. W niniejszym rozdziale opisane zostały różne rodzaje kwantyzatorów skalarnych oraz wektorowych. 5.1 Skalarna kwantyzacja równomierna Najpowszechniejszą metodą kwantyzacji jest skalarna kwantyzacja równomierna (ang. Scalar Uniform Quantization) [21]. Dla sygnału o wartościach od f min do f max, dzielimy cały dostępny zakres na L równych przedziałów Q, nazywanych przedziałem kwantyzacji zgodnie z poniższym wzorem: Q = (f max f min )/L (10) Wartości znajdujące się w danym przedziale kwantyzacji, są odwzorowywane na wartość środkową tego przedziału (rysunek 21). Skwantyzowana wartość jest indeksem odpowiadającego jej przedziału kwantyzacji zgodnie z wzorem: Q i (f) = f f min Q (11) Proces dekwantyzacji polega na odwzorowaniu odpowiednich indeksów na środki przedziałów kwantyzacji. Niezbędne jest w tym celu przesłanie do dekodera wartości początkowych przedziałów f min i f max w celu obliczenia szerokości przedziału Q. Poniżej znajduje się wzór na obliczenie zdekwantyzowanej wartości współczynnika: Q(f) = Q i (f)q + Q/2 + f min (12) 25

Rysunek 21: Podział na przedziały kwantyzacji w kwantyzatorze równomiernym 5.2 Skalarna kwantyzacja nierównomierna Kwantyzacja równomierna nie jest optymalna w przypadku sygnałów o rozkładzie nierównomiernym. Uzyskanie możliwie najmniejszego błędu średniokwadratowego MSE (ang. Mean Square Error), wymaga podzielenia dziedziny sygnału na przedziały kwantyzacji o różnej szerokości. Na rysunku 22 widoczne jest zmniejszenie przedziałów kwantyzacji w miejscu skupienia wartości sygnału. Warto również wykorzystać psychowizualne cechy ludzkich zmysłów. Pozwala to na zagęszczenie przedziałów w wybranych miejscach (np. średnie tony przy kompresji sygnału mowy). Rysunek 22: Podział na przedziały kwantyzacji w kwantyzatorze nierównomiernym W procesie dekwantyzacji dekoder musi znać szerokości wszystkich przedziałów kodowych. Wysłanie informacji o nich wraz z współczynnikami, znacząco zwiększyłoby ilość potrzebnych bitów i nie jest praktycznie stosowane w kompresji. W tym celu wykorzystywane są specjalne modele, które dokonują najpierw nieliniowego przekształcenia sygnału na nową dziedzinę, a następnie jego kwantyzacji przy pomocy kwantyzatora równomiernego. 26

5.3 Skalarna kwantyzacja równomierna z rozszerzonym przedziałem zerowym Transformaty wykorzystywane w kompresji wideo doprowadzają sygnał do postaci, w której znacząca liczba współczynników ma wartości równe, bądź bliskie zeru. Przybliżenie tych wartości do zera pozwala na uzyskanie bardzo długich ciągów zer, które skutecznie poddają się kompresji bezstratnej, wprowadzając niewielkie różnice w zrekonstruowanym sygnale. Kwantyzator z rozszerzonym przedziałem zerowym (rysunek 23), znacząco poprawia stopień kompresji przy niewielkim wzroście zniekształceń. Kwantyzator ten jest wykorzystywany w standardzie JPEG2000 [19]. Wartość skwantyzowana q dla elementu f wynosi: 0 dla f nz q = (13) sign(f) f +nz dla f nz gdzie to przedział kwantyzacji dla kwantyzatora równomiernego. Parametr nz określa szerokość przedziału zerowego i jest przesyłany do dekodera. Szerokość przedziału zerowego wynosi 2(1 nz). W standardzie JPEG2000 jako potencjalnie korzystną wartość wskazuje się nz 0.25 czyli 1.5 ([19], [21]). Dekwantyzację wykonuje się przy pomocy wzoru: 0 dla q = 0 f = (14) sign(q)( q nz + 0.5) dla q 0 Rysunek 23: Podział na przedziały kwantyzacji w kwantyzatorze równomiernym z rozszerzonym przedziałem zerowym 27

5.4 Kwantyzacja wektorowa W odróżnieniu do przedstawionej wcześniej kwantyzacji skalarnej, kwatyzacja wektorowa odwzorowuje wektor wartości wejściowych na odpowiednie słowo kodowe, będące możliwie najlepszym przybliżeniem oryginalnych danych [13]. Na rysunku 24 przedstawiono schemat przyporządkowania wartości w dwuwymiarowym kwantyzatorze, tj. kwantyzatorze który wykorzystuje słowa kodowe o dwóch elementach. Każda z par wartości, przypada na konkretny region i jest przybliżana do wartości oznaczonej czerwoną gwiazdką, np. para (-2, 2) zostanie przypisana do słowa kodowego (-1.5, 1.5). Jako, że mamy 16 regionów, możemy zapisać informację o wartości na 4 bitach. Zwiększenie liczby regionów, zmniejsza błąd związany z kwantyzacją, jednocześnie zwiększając liczbę bitów przesyłanych do dekodera (indeks słowa kodowego w słowniku) oraz czas potrzebny na znalezienie najlepszego słowa kodowego przy kodowaniu. Rysunek 24: Podział dwuwymiarowej przestrzeni dla kwantyzatora wektorowego. Czerwone kropki oznaczają wartości słów kodowych. Zarówno koder i dekoder przechowują słownik słów kodowych (ang. codebook). W przypadku kompresji obrazów najczęściej stosowane są słowa kodowe w postaci bloków. Na rysunku 25 przedstawiony jest schemat kwantyzatora wektorowego. Bardzo ważną kwestią jest odpowiednie wybranie słów kodowych, minimalizujące globalnie błąd przy przybliżeniu. Implementacja musi również cechować się efektywnym algorytmem przeszukiwania słownika, aby znaleźć optymalny wektor przybliżający oryginalny zbiór danych. 28

Rysunek 25: Schemat kwantyzacji wektorowej [25] 29

6 Etap kodowania bezstratnego Uzyskane w wyniku kwantyzacji ciągi całkowitych współczynników, są poddawane kompresji bezstratnej, która pozwala dokładnie zrekonstruować wejściowe dane. To jaki stopień kompresji uda się uzyskać, zależy od zastosowanej metody, jak również od samych wejściowych danych. Silna redukcja alfabetu symboli podczas kwantyzacji oraz zgrupowanie tych samych symboli przy transformacie, pozwala uzyskać wysoki poziom kompresji przy metodach bezstratnych. W niniejszym rozdziale przedstawię popularne metody kompresji bezstratnej wykorzystywane w procesie kompresji sekwencji wideo oraz obrazów. Najpierw opiszę prostą metodę RLE wykorzystywaną m. in. w standardzie JPEG. Następnie przedstawię rodzinę kodów zmiennej długości (ang. variable-length code), do której zaliczamy metodę kodowanie Huffmana oraz najskuteczniejszą obecnie metodę tego typu - kodowanie arytmetyczne. Na końcu opiszę znaczenie modelowania statystycznego w procesie kompresji bezstratnej. 6.1 Kodowanie RLE Kodowanie RLE (Run-Length Encoding) to prosta metoda kompresji bezstratnej, kodująca ciąg współczynników przy pomocy zliczania serii występujących po sobie takich samych symboli. Wariant tej metody jest wykorzystywany przy kompresji bloków skwantyzowanych współczynników transformaty DCT w standardzie JPEG [12]. Warto zauważyć, że istotny jest sposób w jakiej kolejności będziemy kodować współczynniki. Dla obrazu poddanemu transformacie DCT korzystniejsze jest kodowanie według schematu zig-zag (rysunek 26), niż proste kodowanie linia po linii. Rysunek 26: Schemat kodowania współczynników zig-zag 30