JPEG

konflacja wielu tematów, w tym: algorytmów kompresji, formatów plików, standardów, specyfikacji technicznych i organizacji non-profit

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.

Joint Photographic Experts Group (JPEG)
Ikona formatu
Ilustracja
Zdjęcie żbika europejskiego ze stopniem kompresji i związanymi z nim stratami, malejącymi od lewej do prawej strony
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

Strona internetowa

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

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 (po 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

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 (model RGB) na jeden kanał jasności/luminancji i 2 kanały barwy/chrominancji (model YCbCr). Ludzkie oko znacznie dokładniej postrzega drobne różnice jasności od drobnych różnic barwy, a więc użyteczne jest tutaj rozbicie obrazu na te kanały, żeby użyć na nich różnych parametrów kompresji.
  • zachodzi podpróbkowanie chrominancji: zmniejszana jest rozdzielczość pikseli kanałów barwy. 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. Bloki są traktowane w dalszych operacjach matematycznych jako macierze 8 × 8.
  • na blokach wykonywana jest dyskretna transformata kosinusowa (DCT). Zamiast wartości pikseli mamy teraz średnią wartość wewnątrz bloku (współczynnik DC) oraz częstotliwości zmian wewnątrz bloku (współczynniki AC), obie wyrażone przez liczby zmiennoprzecinkowe. Transformata DCT jest teoretycznie odwracalna, więc jedyna strata danych to drobne różnice wynikające z użycia zaokrągleń.
  • Różnicowa reprezentacja współczynników DC (DPCM).
  • 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 AC są uporządkowywane zygzakowato, aby zera leżały obok siebie.
  • współczynniki niezerowe są kompresowane kodowaniem entropijnym, zazwyczaj algorytmem Huffmana (standard JPEG pozwala też na użycie kodowania arytmetycznego). Kod Huffmana stosowany w formacie JPEG ma specjalne symbole dla ciągów zer i końca niezerowych współczynników (EOB, end of block).

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
Obraz Jakość Rozmiar (bajty) Współczynnik kompresji Komentarz
  Pełna jakość (Q = 100) 83 261 2,6:1 Niezauważalnie małe artefakty
  Przeciętna jakość (Q = 50) 15 138 15:1 Pierwsze oznaki artefaktów małej skali na granicach obiektów
  Średnia jakość (Q = 25) 9553 23:1 Silniejsze artefakty; strata informacji z dużej rozdzielczości
  Niska jakość (Q = 10) 4787 46:1 Duże straty rozciągłości tonalnej; artefakty na krawędziach obiektów
  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

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

Przypisy

edytuj

Linki zewnętrzne

edytuj