First page Back Continue Last page Overview Graphics

Podstawowe kompresje


Notes:

Kodowanie JPEG-przebiega w czterech etapach.
Kodowanie koloru jest opcjonalne, ale niemal zawsze stosowane. Wykorzystuje to, że oko ludzkie jest bardziej wyczulone na zmianę jasności niż barwy. Jeśli będziemy mogli przekształcić dane z kanałów RGB tak, aby jasność była przechowywana w jednej składowej, a kolory w pozostałych dwóch, to okazuje się, że możemy usunąć większość informacji o kolorze, bez zauważalnego pogorszenia wyglądu obrazu. Najpowszechniejszy układ kodowania koloru jest znany jako YCbCr i jest oparty na układzie używanym w telewizji. Trzy komponenty obrazu stanowią Y – luminacja piksela, Cb i Cr – chrominancja, stopień „niebieskości” i „czerwoności” piksela. Oblicza się je według wzorów:
Y = 0,299 R + 0,587 G + 0,114 B
Cb = -0,1687 R – 0,3313 G + 0,5 B
Cr = 0,5 R – 0,4187 G – 0,0813 B
Jest to zmiana bezstratna, gdyż wartości RGB mogą być odtworzone przez odwrócenie procesów arytmetycznych. Kiedy już mamy składowe YCbCr zmniejszamy gęstość tzw.: „podpróbkowania”. Polega to na uśrednieniu wartości składowych chromi nacji dla bloku 2x2 piksele. Tak więc dla bloku 2x2 piksele mamy cztery wartości Y, jedną Cb i Cr, czyli sześć składowych zamiast dwunastu (po cztery R, G, B), z których wyszliśmy. Każda z trzech składowych jest teraz traktowana jako oddzielny płat obrazu, jest oddzielnie przekształcona i kompresowana.
Transformacja DCT jest stosowana przy obrazach ze skalą szarości. Wykorzystuje ona fakt, że oko ludzkie jest bardziej czułe na stopniowe zmiany jasności lub koloru niż na nagłe. DCT pozwala na dyskretne przejścia pomiędzy barwami. Pobiera ona blok 8x8 komponentów, tzw. „przestrzennych częstotliwości”. Składowa (0.0) rezultatu określa stopień niezmienności składowych wejściowych, równoznaczny ze średnią wartością składowych. Składowe o większych numerach odzwierciedlają wyższe częstotliwości przestrzenne, które reprezentują szybsze zmiany jasności lub barwy. Oryginalne wartości komponentów mogą być odtworzone odwrotną transformacją DCT. W praktyce błędy zaokrągleń mogą spowodować, że odtworzone wartości różnią się nieco, jednak różnice te są nieistotne w porównaniu z efektami kwantyzacji. Kwantyzacja jest głównym etapem stratnym podczas kodowania JPEG. Każda z wartości wyjściowych transformaty DCT jest 12 bitową liczbą całkowitą. Dla dowolnego obrazu JPG istnieje tablica kwantyzacyjna o rozmiarze 8x8, którą jest po prostu tablica wartości, przez które podzielone zostaną odpowiednie wartości Transformacji DCT. Dekoder otrzymuje taką samą tablicę z pliku obrazu, w którym jest ona zapisana i mnoży wartości z pliku przez odpowiednią pozycję tablicy, aby w przybliżeniu odtworzyć prawdziwe dane. Im większy podzielnik tym mniejsza dokładność odtwarzanych wartości, ale im mniejszy wynik kwantyzacji tym mniejszy plik JPEG. Przy zapisywaniu wybierając odpowiedni zestaw podzielników aplikacji można balansować między jakością obrazu a wielkością pliku. Ostatnim etapem jest pobranie rezultatów kwantyzacji i skompresowanie ich do pliku. Najpowszechniejszym rodzajem kodowania jest kodowanie Huffmana zmiennej długości z charakterystycznym dla RLE kodowaniem zer. Kwantowanie składowych wysokich częstotliwości często powoduje ich wyzerowanie. Alternatywnym sposobem do kodowania Huffmana jest kodowanie arytmetyczne. Jest nieco bardziej złożone, ale za to bardziej zbija dane niż kod Huffmana. Ze względu na niepewność co do licencjonowania tego kodu jest on rzadko używany. Biblioteka JPEG używa kodowania Huffmana, na które proces kompresji się kończy. Dane zapisane do pliku są kilka a nawet kilkanaście razy mniejsze niż plik wejściowy.