1. Standardy multimedialne

1.2. JPEG: najbardziej znany kodek obrazów

Specyfikacja normy standardu JPEG zawiera:

  • opis procesu przetwarzania źródłowych danych obrazowych w dane obrazowe skompresowane;
  • opis procesu przetwarzania skompresowanych danych obrazowych w zrekonstruowane dane obrazu;
  • wskazania dotyczące praktycznych implementacji standardu;
  • opis zakodowanej reprezentacji skompresowanych danych obrazowych.

Specyfikacja nie opisuje kompletnej zakodowanej reprezentacji obrazu, może ona zawierać pewne parametry zależne od aplikacji. W normie wyszczególniono cztery procedury (tryby) kompresji, a mianowicie: 

  • podstawowa (baseline process);
  • rozszerzona na bazie DCT(extended DCT- based process);
  • bezstratna (lossless process);
  • hierarchiczna (hierarchical process);

Początkowo źródłowe obrazy kolorowe z przestrzeni barw RGB, zwykle stosowanej przy rejestracji obrazów, są konwertowane do przestrzeni barw YCrCb w celu efektywniejszej kompresji, zgodnie z zależnością:

\begin{split} Y&=0,2989\cdot R + 0,5866\cdot G + 0,1145\cdot B \\ Cr&=0,5 \cdot R - 0,4183\cdot G - 0,0816\cdot B \\ Cb&=-0,1687\cdot R - 0,3312\cdot G + 0,5\cdot B  \end{split} (1.1)

Wydziela się w ten sposób składową luminancji (Y), na którą przede wszystkim wrażliwe jest ludzkie oko podczas percepcji treści obrazowej. Dalej każdy komponent kodowany jest niezależnie, przy uwzględnieniu pewnych różnic związanych z mniejszej czułością percepcji składowych chrominancji. 

Kodowanie każdego składnika obrazu (luminancja, składowe chrominancji) przebiega analogicznie. W podstawowym procesie kodowania dane wejściowe są ośmiobitowe, w rozszerzonym - 12 bitowe. Obraz jest dzielony na bloki 8\times 8 i każdy blok jest transformowany za pomocą DCT (discrete cosine transform), przy czym kodowanie obrazu przebiega sekwencyjnie, tzn. z lewej strony na prawą zaczynając od góry obrazu i przemieszczając się na dół.

W standardzie JPEG wykorzystano zbiór funkcji bazowych transformacji DCT - 2W dyskretna transformacja kosinusowa funkcji obrazu f(x,y) w bloku o rozmiarach N\times N zdefiniowana jest w sposób następujący: 

k(u,v)=\frac{1}{\sqrt{2N}}C(u)C(v)\sum_{x=0}^{N-1}\sum_{y=0}^{N-1}f(x,y)\cos{\frac{\pi(2x+1)u}{2N}}\cos{\frac{\pi(2y+1)v}{2N}} (1.2)

jako przekształcenie proste, a odwrotne:

f(x,y)=\frac{1}{\sqrt{2N}}\sum_{u=0}^{N-1}\sum_{v=0}^{N-1}C(u)C(v)k(u,v)\cos{\frac{\pi(2x+1)u}{2N}}\cos{\frac{\pi(2y+1)v}{2N}} (1.3)

gdzie k(u,v) są wartościami współczynników w dziedzinie DCT, C(u),C(v)=\frac{1}{\sqrt{2}} dla u,v=0 oraz C(u),C(v)=1 w p.p.

W JPEG przyjęto blokową postać DCT, dla N=8, ze względu na redukcję efektów Gibbsa (pierścieniowe zniekształcenia powodowane obcinaniem górnej części pasma) oraz dostosowanie do lokalnej charakterystyki widmowej obrazu. Istotną okazała się także możliwość przyspieszenia procesu transformacji -- przy podziale blokowym redukowana jest liczba obliczeń w stosunku do wersji pełnokadrowej, można opracować szybkie algorytmy ze stablicowanymi wartościami kosinusów, możliwe jest też zrównoleglenie obliczeń niezależnych przekształceń w blokach. Dwuwymiarowe funkcje bazowe przedstawiono na rys.1.1.   

Rys. 1.1  Baza 64 dwuwymiarowych funkcji kosinusowych zastosowana w JPEG; według ogólnie przyjętej konwencji w lewym górnym rogu bloku ustalana jest wartość średnia pikseli w bloku, która odpowiada współczynnikowi określonemu przez splot danych z funkcją stałą); kolejne wartości współczynników DCT są efektem splotu danych z kolejnymi harmonicznymi bazy funkcji kosinusowych. 


Norma określa N=8, a obliczone 64 współczynniki DCT z każdego bloku podlegają \textbf{kwantyzacji} skalarnej z przedziałem kwantyzacji dobranym dla każdej harmonicznej. Kolejne wartości k(u,v) są dzielone przez odpowiadające im wartości w tablicy kwantyzacji \mathbf{Z}=\Biggl[ \begin{smallmatrix}
z(0,0) & \cdots & z(7,0)\\ \vdots & \vdots & \vdots \\ z(0,7) & \cdots & z(7,7)
\end{smallmatrix} \Biggr]  
i zaokrąglone do najbliższej liczby całkowitej: \hat k(u,v)=\Big [ \frac{k(u,v)}{z{(u,v)}} \Big]. Tablicę tę można dobrać w zależności od aplikacji, przykładowe postacie oddzielnych tablic dla luminancji i chrominancji pokazano na rys. 1.2. 

Rys. 1.2  Charakterystyka procesu kwantyzacji w JPEG: u góry -- tablice kwantyzacji dla luminancji (po lewej) i chrominancji, optymalizujące jakość rekonstruowanych obrazów pod kątem oceny psychowizualnej (rekomendowane w normie JPEG, jednak nie obligatoryjne); u dołu -- krzywa równomiernej kwantyzacji skalarnej z przedziałem zerowym. 

Uzyskano schemat kwantyzacji równomiernej (ze stałym przedziałem) z zerem, jak na rys. 1.2. Dla przykładowej wartości z(u,v)=c  wartość \hat k(u,v)=p wtedy i tylko wtedy, jeśli c(p - \frac{1}{2}) \leq k(u,v) < c(p + \frac{1}{2}). Dla |k(u,v)| < \frac{c}{2} mamy p=0, czyli następuje wyzerowanie współczynnika, tj. usunięcie odpowiedniej harmonicznej z widma sygnału odtwarzanego w procesie dekompresji według  (1.3).  

Powyższe rozwiązanie pozwala przy stosunkowo niewielkim błędzie kwantyzacji zachować współczynniki o wartościach powyżej progu \frac{c}{2}. Poprzez dobranie odpowiednich wartości tablicy kwantyzacji z(u,v), zgodnie z wagą percepcji ustalonej dla poszczególnych współczynników-harmonicznych można zachować wysoką psychowizualną jakość obrazu w subiektywnej ocenie obserwatora. Standard JPEG dopuszcza dowolną postać tablicy kwantyzacji, jednak w normie podano rekomendowane postacie tablic kwantyzacji dla luminancji i chrominancji (rys. 1.2). Tablice te zawierają doświadczalnie dobrane wartości, które odzwierciedlają subiektywne wrażenie odbioru poszczególnych składowych harmonicznych obrazów. Są one efektem kilkuletnich badań nad psychowizualnym odbiorem obrazów naturalnych.

Silniejsza kwantyzacja współczynników w blokach powoduje charakterystyczny dla JPEG efekt blokowy, który jest konsekwencją uzyskanej nieciągłości funkcji jasności obrazu na granicach bloków - rys. 1.3.

Rys. 1.3 Efekt blokowy uzyskany dla kompresji JPEG w stopniu 43:1 (para obrazów u góry -- z lewej oryginał Lena) oraz 75:1 (dolna para obrazów Barbara).


Kolejnym etapem schematu kompresji jest kodowanie kwantowanych współczynników DCT. Wartości współczynników każdego bloku są ustawiane w jednowymiarowy ciąg danych według sekwencji zygzak, a następnie kodowane z wykorzystaniem metody Huffmana, kodu binarnego oraz RLE. Charakterystyczny rozkład wartości współczynników to  składowa stała oraz dominujące zwykle, co do wartości bezwzględnej, wartości współczynników niskich harmonicznych, malejące przy przechodzeniu do składowych o wyższej częstotliwości, z dużą liczbą zer. Ustalenie ciągu kodowanych danych według porządku zygzak pozwala na ustawienie w najbliższym sąsiedztwie danych o zbliżonych wartościach. Uzyskuje się w ten sposób jednowymiarowy ciąg wartości zakończony dużą ilością zer, podatny na efektywne kodowanie - zobacz rys. 1.4. Składową stałą bloku koduje się różnicowo, tzn. koduje się jedynie różnicę pomiędzy wartością składowej stałej obecnego bloku i poprzedniego. Do kodowania kategorii wartości współczynnika używa się kodu Huffmana, przy czym rekomendowana tablica słów kodowych nie jest obligatoryjna. Doprecyzowanie wartości współczynnika wewnątrz kategorii odbywa się za pomocą kodu dwójkowego. W przypadku składowej stałej (DC) ustalono słowa Huffmana dla 12 takich kategorii (rys. 1.5), zaś dla składowych zmiennych (AC) utworzonych zostało 10 kategorii wartości (z wykluczeniem wartości 0), przy czym każda z kategorii otrzymała różne słowa kodowe w zależności od liczby zer poprzedzających wartość niezerową - rys. 1.5. Norma w wersji rozszerzonej dopuszcza także stosowanie kodera arytmetycznego.

Rys. 1.4  Przykład przekształceń w procesie kodowania JPEG: kolejno przykładowy blok obrazu z wartościami funkcji jasności, obliczone współczynniki DCT, te same współczynniki po kwantyzacji z użyciem tablic luminancji z rys. 1.2 oraz ustalenie kolejności kodowania skwantowanych współczynników według porządku zygzak.

Rys. 1.5 Tablice kodowania rekomendowane normą JPEG, choć nieobligatoryjne: dla składowej stałej DC (po lewej u góry) oraz składowych zmiennych AC - tablica z podziałem na kategorie wartości oraz tablica słów kodowych poszczególnych kategorii poprzedzonych określoną liczbą współczynników zerowych.

Proces dekompresji przebiega dokładnie odwrotnie, przy czym dekoder musi posługiwać się dokładnie tymi samymi tablicami specyfikacji (tablica kwantyzacji, Huffmana). Umożliwia to format zapisu (JFIF), w którym tablice specyfikacji poprzedzone odpowiednimi markerami umieszczone są w pliku razem z danymi skompresowanymi. 

Ogólny schemat algorytmu przedstawiono na rys. 1.6. 

Rys. 1.6  Ogólny schemat blokowy algorytmu kompresji ze standardu JPEG, bazujący na blokowej DCT.

Tryb rozszerzony i hierarchiczny

Rozszerzony proces kompresji umożliwia kompresję zarówno 8- mio jak i 12- to bitowych danych, przy czym kodowanie może być nie tylko sekwencyjne, ale i progresywne. W modzie progresywnym poszczególne bloki współczynników przeglądane są w tej samej kolejności, jednak wartości ich współczynników kodowane są częściowo w wielu skanach, zgodnie z podziałem na poszczególne podpasma lub mapy bitowe. Rozwiązanie to wymaga jednak zapewnienia dodatkowego bufora pamięci do przechowania skwantowanych wartości współczynników całego obrazu, odpowiednio porządkowanych na etapie ich finalnego kodowania oraz formowania strumienia wyjściowego. 

W normie występują dwa rodzaje procedur progresywnego kodowania. Pierwsza, nazywana selekcją widma, dzieli współczynniki ustawione według sekwencji zygzak na kolejne pasma, które zawierają poszczególne części częstotliwościowego spektrum każdego z bloków. Druga procedura związana jest z precyzją, z jaką kodowane są współczynniki w każdym z pasm i nazywana jest sukcesywną aproksymacją. Najpierw kodowana jest pewna liczba bardziej znaczących bitów wartości tych współczynników, a następnie mniej znaczące bity. Można progresywnie kodować współczynniki jedynie przy pomocy procedury selekcji widma, jak też z wykorzystaniem obu procedur. Wówczas mamy do czynienia z tzw. pełną progresją. Ze stwierdzeń zawartych w opisie normy wynika, że zastosowanie selekcji widmowej, jakkolwiek wygodne dla wielu zastosowań, daje porównywalne bądź nieco gorsze wyniki kompresji niż sekwencyjna metoda kodowania, podczas gdy przy pełnej progresji skuteczność kompresji może się okazać nieco większa.
 
W rozszerzonym procesie kodowania możliwe jest także arytmetyczne kodowanie, a tablica warunkowych zależności danych (conditioning table) jest wówczas zapamiętywana jako tablica specyfikacji.

Hierarchiczny proces kodowania macierzy obrazu polega na tworzeniu jego reprezentacji w postaci sekwencji kadrów  o różnej rozdzielczości za pomocą rozszerzonego procesu kodowania (wykorzystującego DCT) lub metody bezstratnej (bazującej na predykcji). Można także połączyć te dwie metody i w schemacie kodowania z DCT zastosować kodowanie bezstratne współczynników jedynie zaokrąglonych do najbliższej liczby całkowitej (a więc bez opisanej wyżej metody kwantyzacji z wyspecyfikowaną tablicą), co daje efekt kompresji prawie bezstratnej (zmiany źródłowych wartości pikseli poprzez błędy przybliżeń są praktycznie niezauważalne). 

Tworzone są zrekonstruowane składniki odniesienia obrazu różnej rozdzielczości i koduje się różnice pomiędzy obrazem oryginalnym a tymi składnikami odniesienia. Stosowanie filtrów próbkujących obraz oryginalny z różną rozdzielczością tworzy charakterystyczną piramidę przestrzennej rozdzielczości.

Tryb hierarchiczny może być stosowany alternatywnie, aby zwiększyć jakość rekonstruowanych składników obrazu o danej rozdzielczości w stosunku do procedury z progresją z trybu rozszerzonego, bardziej kontrolując poszczególne poziomy rozdzielczości. W tej procedurze kodowania możliwe jest porządkowanie treści przekazu według ustalonej progresji skali, co jest szczególnie użyteczne w systemach posługujących się wielorozdzielczymi wersjami danych obrazów (zależnymi np. od parametrów urządzeń do wizualizacji, drukarek czy też wymagań do przetwarzania obrazów).

Bezstratny JPEG

Standard opisujący odwracalny algorytm kodowania obrazów wykorzystuje predykcyjne kodowanie wartości pikseli z kilkoma wariantowymi modelami o różnych kontekstach. Można wybrać najbliższe sąsiedztwo piksela rzędu 1, 2 lub 3 jak na rys. 1.7a). Dostępnych jest kilka najprostszych podstawień lub liniowych predykcji ponumerowanych od 1 do 7 jak w tabeli na rys. 1.7b). Opcja 0 oznacza rezygnację z jakiejkolwiek formy predykcji, co jest szczególnie przydatne w różnicowym kodowaniu według trybu hierarchicznego.

Rys. 1.7 Modele predykcji w bezstratnym JPEG: a) przestrzenny kontekst sąsiednich pikseli (f_w,f_{gl},f_g) wykorzystywanych przy kodowaniu f; b) równania określające wartość przewidywaną \hat f w poszczególnych trybach kodowania predykcyjnego. 

Opcje 1,2 i 3 to najprostsze predykcje rzędu 1 dobierane ze względu na dominujący kierunek ułożenia informacji w obrazie. Predykcja z numerem 7 wykorzystuje dwóch najbliższych sąsiadów w pionie i w poziomie, podczas gdy opcje 4-6 są najbardziej złożonymi modelami rzędu o bardzo uproszczonym rozkładzie wartości wag. 

Proces kodowania bezstratnego ujęty w standardzie zamiast koncepcji kodowania transformacyjnego z DCT realizowaną w kwadratowych blokach 8\times 8 pikseli, proponuje liniową predykcję kodowanych wartości dobieraną dla danego skanu. Różnica pomiędzy wartością przewidywaną \hat f, a źródłową wartością piksela f  kodowana jest dostosowaną metodą Huffmana lub arytmetycznie. W metodzie Huffmana stosuje się 17 kategorii różnicowych wartości błędu predykcji, a w kodowaniu arytmetycznym konstruowany jest dwuwymiarowy model statystyczny.

Odwracalny koder JPEG cechuje stosunkowo mała efektywność kompresji obrazów ze względu na zbyt proste w wielu zastosowaniach modele predykcji oraz wykorzystanie metod entropijnych o ograniczonej efektywności (statyczny koder Huffmana) bądź stosowalności (ze względu na ograniczenia powszechnego dostępu do binarnego kodera arytmetycznego QM). Zaletą jest jednak to, że według specyfikacji JPEG metodą tą  można odwracalnie kodować obrazy o dynamice od 2 do 16 bitów, co oznacza potencjalnie bardzo szeroki zakres zastosowań. W przypadku medycznych danych obrazowych, gdzie często stosowane są wyłącznie bezstratne metody kompresji, szczególnie cenna jest możliwość kodowania danych obrazowych dwubajtowych (wartość funkcji jasności piksela zapisana jest na 2 bajtach). Taka sytuacja występuje np. w tomografii komputerowej, tomografii rezonansu megnetycznego czy w radiografii cyfrowej i mammografii. 

Przykładowo, bezstratną procedurę JPEG wykorzystano na Uniwersytecie Południowej Florydy do archiwizacji znaczącego zestawu obrazów mammograficznych DDSM. Baza ta zawiera wiele referencyjnych, zweryfikowanych diagnostycznie rezultatów badań, które są wykorzystywane  przez naukowców na całym świecie od wielu lat. Te ogólnodostępne zasoby są przydatne w porównawczej ocenie radiologicznej, jak też w testowaniu nowych metod przetwarzania, analizy i poprawy jakości obrazów, wykorzystywanych w komputerowym wspomaganiu diagnostyki, a także w optymalizacji metod kompresji obrazów.