JPEG to nazwa systemu kompresji statycznych obrazów rastrowych, przeznaczonego głównie do przetwarzania obrazów naturalnych (zdjęć satelitarnych, pejzaży, portretów itp.), a więc takich, które nie mają zbyt wielu ostrych krawędzi i małych detali. Motywacją do powstania tego systemu była standaryzacja algorytmów kompresji obrazów monochromatycznych i kolorowych.
Prace nad standardem rozpoczęły się w roku 1986 z inicjatywy organizacji ISO oraz CCITT i były prowadzone przez zespół ekspertów nazywany Joint Photographic Experts Group. Standard został opublikowany po 5 latach, w 1991 roku.
Definiuje on cztery tryby kompresji:
- sekwencyjny, oparty na DCT (kompresja stratna)
- progresywny, oparty na DCT (kompresja stratna)
- sekwencyjny, bezstratny
- hierarchiczny
Dwie pierwsze metody umożliwiają uzyskanie bardzo dużej kompresji
obrazu, rzędu 20:1 kosztem pewnej utraty szczegółów, na ogół
niezauważalnej.
Metoda 3., bezstratna, kompresuje ok. 2:1 i nie jest zbyt powszechnie stosowana.
Tryb hierarchiczny kompresuje coraz mniejsze, przeskalowane obrazy
(można to sobie wyobrazić jako piramidę obrazów: na samym dole znajduje
się największy obraz, wyżej 2 razy mniejszy, jeszcze wyżej 4 razy
mniejszy itd.). Został pomyślany głównie po to, by móc szybko pobierać
z obrazów b. wysokiej rozdzielczości mniejsze obrazy; tryb ten nie
definiuje która z metod kompresji ma zostać użyta: może być stratna,
albo bezstratna.
Standard opisujący sposób zapisu plików graficznych skompresowanych metodą JPEG nazywa się JFIF (JPEG File Interchange Format). Pliki JFIF - zwyczajowo nazywane JPEG (wym. "dżej-peg") i posiadające rozszerzenie "jpeg" albo "jpg" - obok formatów GIF i PNG, są najczęściej stosowanym formatem grafiki na stronach WWW.
Algorytm stratny JPEG
Algorytm kompresji używany przez JPEG jest algorytmem stratnym, tzn. w czasie jego wykonywania tracona jest bezpowrotnie część pierwotnej informacji.
Algorytm przebiega następująco: (część danych zaczerpnięto z hasła kompresja bezstratna)
- obraz jest konwertowany z kanałów czerwony-zielony-niebieski (RGB)
na jasność (luminancję) i 2 kanały barwy (chrominancje). Ludzie
znacznie dokładniej postrzegają drobne różnice jasności od drobnych
różnic barwy, a więc użyteczne jest tutaj użycie różnych parametrów
kompresji. Krok nie jest obowiązkowy (opcjonalnie można go pominąć).
- wstępnie odrzucana jest część pikseli
kanałów barwy, ponieważ ludzkie oko ma znacznie niższą rozdzielczość
barwy niż rozdzielczość jasności. Można nie redukować wcale, redukować
2 do 1 lub 4 do 1.
- kanały są dzielone na bloki 8x8. W przypadku kanałów kolorów, jest to 8x8 aktualnych danych, a więc zwykle 16x8.
- na blokach wykonywana jest dyskretna transformata kosinusowa (DCT).
Zamiast wartości pikseli mamy teraz średnią wartość wewnątrz bloku oraz
częstotliwości zmian wewnątrz bloku, obie wyrażone przez liczby
zmiennoprzecinkowe. Transformata DCT jest odwracalna, więc na razie nie
tracimy żadnych danych.
- Zastąpienie średnich wartości bloków przez różnice wobec wartości
poprzedniej. Poprawia to w pewnym stopniu współczynnik kompresji.
- Kwantyzacja, czyli zastąpienie danych zmiennoprzecinkowych przez
liczby całkowite. To właśnie tutaj występują straty danych. Zależnie od
parametrów kompresora, odrzuca się mniej lub więcej danych. Zasadniczo
większa dokładność jest stosowana do danych dotyczących niskich
częstotliwości niż wysokich.
- współczynniki DCT są uporządkowywane zygzakowato, aby zera leżały obok siebie.
- współczynniki niezerowe są kompresowane algorytmem Huffmana. Są specjalne kody dla ciągów zer.
Użyta transformata powoduje efekty blokowe w przypadku mocno skompresowanych obrazków.
Wielką innowacją algorytmu JPEG była możliwość kontroli stopnia
kompresji w jej trakcie, co umożliwia dobranie jego stopnia do danego
obrazka, tak aby uzyskać jak najmniejszy plik, ale o zadowalającej
jakości.
Przykłady
|
Obrazek podstawowy, przed skompresowaniem zajmuje 196662B. |
|
Obrazek potraktowany silną kompresją. Wg programu kompresującego po
DCT dane zostają upakowane do poziomu ok. 25%. Rozmiar po kompresji:
4070B. Efekt pocięcia raczej niewidoczny, ale widać przekłamania w
kolorach. |
|
Obrazek potraktowany bardzo silną kompresją. Wg programu
kompresującego po DCT dane zostają upakowane do poziomu ok.5% Rozmiar
po kompresji: 1741B. Widoczne silne "pocięcie" obrazka na kwadraty oraz
dużo przekłamań w kolorach. |
Jak algorytmy okłamują nasze oko
|
|
Po lewej stronie mamy dwukrotnie powiększony środek spirali. Z
prawej strony nałożony na niego efekt "wykrywanie krawędzi". Filtr
wykrywa krawędzie tylko na przejściach między kolorami. |
|
|
Po lewej stronie mamy dwukrotnie powiększony środek spirali, która
wcześniej została silnie skompresowana. Z prawej strony nałożony na
niego efekt "wykrywanie krawędzi". Filtr zaczyna się gubić, wykrywa
krawędzie wszędzie tam, gdzie zachodzi podział na kwadraty, działanie
filtra ujawnia także zwiększoną liczbę przekłamań w kolorach. |
Słabe strony algorytmu JPEG
|
Nieskompresowany napis nie ujawni żadnych błędów. Rozmiar 196662B,
po kompresji, ale bez kwantyfikacji danych (czyli przy ustawieniu, że
dane mają być przycięte do 100% dokładności, czyli nie mają być
przycięte) zajmuje 5094B. |
|
Na pierwszy rzut oka nie widać przekłamań w kolorach itp. Po
powiększeniu ujawniają się "przebarwienia" wynikające z usunięcia
pewnej części danych (kompresja 75%, usunięto ok.25%). Rozmiar: 3116B. |
|
Zauważalne bez powiększania przebarwienia, po powiększeniu widać
ich więcej. Wychodzą na jaw niedostatki jeśli chodzi o uproszczenia.
(kompresja 25%, usunięto ok.75% danych) Rozmiar: 2040B. |
|
Bez powiększania widać przebarwienia i rozmazanie tekstu, jednakże
widać także pewną cechę naszego oka, a mianowicie pewne uproszczenia
itp. które pozwalają nam odczytać, co tu jest napisane. (Kompresja 5%,
usunięto ok.95%) Rozmiar: 1253B. |
Darmowy hosting zapewnia PRV.PL