JPEG

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania
Joint Photographic Experts Group (JPEG)
Rozszerzenia pliku .jpg, .jpeg, .jpe
.jif, .jfif, .jfi (rozszerzenie.jfi nie jest bezpośrednio obsługiwane przez Windows XP) (kontenery)
Typ MIME image/jpeg
Producent Joint Photographic Experts Group
Typ stratna i bezstratna kompresja grafiki rastrowej

JPEG (ang. Joint Photographic Experts Group) – algorytm[1][2] stratnej kompresji grafiki rastrowej, wykorzystany w formacie plików graficznych o tej samej nazwie. 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 ↓.

Historia standardu JPEG[edytuj | edytuj kod]

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 transformacji 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 składanie 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.

Algorytm stratny JPEG[edytuj | edytuj kod]

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 8 × 8 pikseli. W przypadku kanałów kolorów, jest to 8 × 8 danych po redukcji rozdzielczości, a więc zwykle 16 × 16 pikseli obrazu początkowego.
  • 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 (DPCM). 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[edytuj | edytuj kod]

Obraz Jakość Rozmiar (bajty) Współczynnik kompresji Komentarz
JPEG example JPG RIP 100.jpg Pełna jakość (Q = 100) 83261 2,6:1 Niezauważalnie małe artefakty
JPEG example JPG RIP 050.jpg Przeciętna jakość (Q = 50) 15138 15:1 Pierwsze oznaki artefaktów małej skali na granicach obiektów
JPEG example JPG RIP 025.jpg Średnia jakość (Q = 25) 9553 23:1 Silniejsze artefakty; strata informacji z dużej rozdzielczości
JPEG example JPG RIP 010.jpg Niska jakość (Q = 10) 4787 46:1 Duże straty rozciągłości tonalnej; artefakty na krawędziach obiektów
JPEG example JPG RIP 001.jpg Najniższa jakość (Q = 1) 1523 144:1 Bardzo duża strata kolorów i kształtów; niektóre obiekty niemalże nierozpoznawalne

Wykorzystanie do zapisu obrazów stereoskopowych[edytuj | edytuj kod]

Najczęściej stosowanym formatem w prezentacji treści stereoskopowych, w postaci elektronicznej, jest JPS, stanowiący pojedynczy obraz JPEG o parzystej liczbie pikseli w poziomie, zawierający umieszczone obok siebie treści przeznaczone dla prawego i lewego oka; zbiór JPS może być (jako „płaski” podwójny obraz) obsługiwany dowolnym narzędziem rozpoznającym JPEG (zwyczajnie widoczne są obie części).

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]