JPEG (wym. dżej-peg lub jot-peg) – standard kompresji statycznych obrazów rastrowych, przeznaczony głównie do przetwarzania obrazów naturalnych (zdjęć satelitarnych, pejzaży, portretów itp.), charakteryzujących się płynnymi przejściami barw oraz brakiem lub małą ilością ostrych krawędzi i drobnych detali.

Motywacją do powstania tego standardu było ujednolicenie algorytmów kompresji obrazów monochromatycznych i kolorowych. Format plików JPEG/JFIF obok formatów GIF i PNG jest najczęściej stosowanym formatem grafiki na stronach WWW. Typ MIME zarejestrowany dla tego formatu nosi nazwę image/jpeg i został zdefiniowany w RFC 1341.

Spis treści

edytuj Historia standardu JPEG

Prace nad standardem rozpoczęły się w kwietniu 1983 roku w organizacji ISO. W 1986 roku z inicjatywy ISO oraz CCITT powstał zespół ekspertów nazwany Joint Photographic Experts Group (ang. Połączona Grupa Ekspertów Fotograficznych), który zjednoczył wysiłki różnych niezależnych grup.

Standard o nazwie ISO/IEC IS 10918-1 | ITU-T Recommendation T.81 został opublikowany w dwóch częściach w 1991 roku i definiował podstawowy (ang. baseline), sekwencyjny tryb kompresji stratnej, oparty na dyskretnej transformacie kosinusowej (DCT) oraz jego różne rozszerzenia:

  • Tryb progresywny kompresji, również oparty na DCT, przewidziany do wyÅ›wietlania obrazów w trakcie przesyÅ‚ania danych. Efekt pÅ‚ynnie wyostrzajÄ…cego siÄ™ obrazu jest szczególnie dobrze widoczny przy użyciu szybkiego dekompresora i wolnej transmisji danych. Tryb ten zyskaÅ‚ rozpowszechnienie wraz z rozwojem Internetu.
  • Tryb hierarchiczny, pozwalajÄ…cy na zapis w jednym pliku tego samego obrazu jako sekwencji kadrów o różnych rozdzielczoÅ›ciach. Kolejne kadry sÄ… kodowane jako różnice wzglÄ™dem kadrów poprzednich, o niższej rozdzielczoÅ›ci, a nie jako oddzielne obrazy, co zmniejsza rozmiar pliku. Tryb ten nie definiuje, która z metod kompresji ma zostać użyta. Tryb hierarchiczny umożliwia szybki podglÄ…d obrazów bez czasochÅ‚onnej dekompresji obrazów o wysokiej rozdzielczoÅ›ci, co ma zastosowanie np. w fotografii cyfrowej.

Opisane metody kompresji stratnej umożliwiają uzyskanie dużej kompresji obrazu, rzędu 20:1 kosztem pewnej utraty szczegółów, na ogół niezauważalnej.

Opublikowany standard JPEG nie opisywał dokładnych implementacji algorytmów kompresji, W rezultacie powstało wiele rozwiązań różniących się nawet w takich szczegółach, jak skala jakości obrazu. Równocześnie z implementacjami komercyjnymi, częściowo opatentowanymi, zaczęły powstawać rozwiązania rozprowadzane na innych licencjach. Szczególnie wyróżniła się praca zespołu znanego jako Independent JPEG Group (IJG), zakończona publikacją bibliotek kompresji i dekompresji JPEG jako wolnego oprogramowania na licencji zbliżonej do licencji BSD.

Standard JPEG nie określał też dokładnego formatu plików graficznych, zdefiniowano tylko podstawy znane pod nazwą JPEG Interchange Format. W rezultacie największą popularność uzyskał wprowadzony przez firmę C-cube Microsystems format JFIF (ang. JPEG File Interchange Format), stanowiący rozszerzenie wobec standardu i posługujący się rozszerzeniem "jpeg" albo "jpg", dlatego często błędnie identyfikowany ze standardem JPEG. Inny popularny format pliku wykorzystujący standard JPEG to TIFF.

W 1993 roku opracowano rozszerzenie standardu JPEG dla bezstratnej kompresji, używające zupełnie innej metody niż istniejące metody stratne. Rozszerzenie to nie jest obsługiwane przez biblioteki IJG i nigdy się szerzej nie przyjęło.

W 1995 pod nazwą ISO/IEC IS 10918-3 | ITU-T Recommendation T.84 opublikowano część trzecią standardu, zawierającą kolejne rozszerzenia, które miały poprawić jakość obrazu przy tym samym stopniu kompresji. Są to m.in.:

  • zmienna kwantyzacja (ang. variable quantization) uwzglÄ™dnia różne poziomy szczegółowoÅ›ci w różnych częściach obrazu;
  • wybiórcza poprawa jakoÅ›ci (ang. selective refinement) umożliwia kontynuacjÄ™ progresywnej dekompresji lub podjÄ™cie dekompresji z kadru o wyższej rozdzielczoÅ›ci tylko dla fragmentów obrazu zawierajÄ…cych najwiÄ™cej szczegółów;
  • podziaÅ‚ na kafelki (ang. tiling), umożliwiajÄ…cy skladanie obrazu z kawaÅ‚ków o różnych rozmiarach, rozdzielczoÅ›ciach, współczynnikach kompresji czy nawet paletach barw.

Poza tym zdefiniowano standardowy format pliku o nazwie SPIFF (ang. Still Picture Interchange File Format), który jako kompatybilny wstecznie miał zastąpić format JFIF. Darmowe biblioteki IJG nie obsługują rozszerzeń zawartych w tej części standardu.

Krytyka braku w standardzie dobrych metod bezstratnej kompresji, które nadawałyby się do zapisu obrazu o najwyższej jakości czy kompresji różnic między kadrami w trybie hierarchicznym, przyczyniła się do rozpoczęcia prac nad kolejnym rozszerzeniem standardu. Komitet JPEG rozpatrzył różne algorytmy i jako podstawę kolejnego rozszerzenia standardu wybrał sekwencyjny algorytm LOCO-I (ang. Low Complexity, Context-Based, Lossless Image Compression Algorithm), opracowany w HP Labs w 1996. Standard został opublikowany w 1999 roku w dokumencie ISO/IEC IS 14495-1 | ITU-T T.87, a metoda kompresji jest znana pod nazwą JPEG-LS. Metoda ta daje kompresję rzędu 2:1 i nie jest zbyt powszechnie stosowana. Standard opisuje również (mało) stratny tryb metody JPEG-LS.

W tym samym czasie trwały też prace nad modyfikacją metod stratnych, które miały wyeliminować wady stosowanego dotychczas algorytmu DCT. Na następcę wybrano algorytm dyskretnej transformaty falkowej, co dało możliwość połączenia kompresji stratnej i bezstratnej oraz zastosowania wcześniej zdefiniowanych rozszerzeń w jednej metodzie. Tak zdefiniowany standard otrzymał nazwę JPEG 2000 i został ogłoszony w 2000 roku w dokumencie ISO/IEC 15444-1:2000.

edytuj 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 stratna)

  • 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.

edytuj Przykłady

Uwaga: wszystkie powiększenia są dwukrotne, aby uniknąć przekłamań. Wszystkie grafiki skompresowano do formatu PNG.

Spirala - nieskompresowana Obrazek podstawowy, przed skompresowaniem zajmuje 196662B.
Spirala - kompresja 25% 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.
Spirala - kompresja 5% 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.

edytuj Jak algorytmy okłamują wzrok

Środek spirali, powiększenie dwukrotne Środek spirali, powiększenie dwukrotne - wykrywanie krawędzi 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.
Środek spirali - kompresja 5%, powiększenie dwukrotne Środek spirali - kompresja 5%, powiększenie dwukrotne - wykrywanie krawędzi 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.

edytuj Słabe strony algorytmu JPEG

Napis testowy - bez kompresji
Napis testowy - bez kompresji, powiększenie dwukrotne
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.
Napis testowy - kompresja 75%
Napis testowy - kompresja 75%, powiększenie dwukrotne
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.
Napis testowy - kompresja 25%
Napis testowy - kompresja 25%, powiększenie dwukrotne
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.
Napis testowy - kompresja 5%
Napis testowy - kompresja 5%, powiększenie dwukrotne
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.

edytuj Zobacz też

edytuj Linki zewnętrzne