Kompresja JPEG

Stratna kompresja oparta na DCT dla obraz贸w fotograficznych z kontrol膮 jako艣ci.

Problem Fotografii Cyfrowej: Dlaczego Potrzebujemy JPEG

W erze smartfon贸w i aparat贸w o wysokiej rozdzielczo艣ci, fotografie cyfrowe traktujemy jako co艣 oczywistego. Robimy zdj臋cia, natychmiast je udost臋pniamy i przechowujemy ich tysi膮ce na naszych urz膮dzeniach. Jednak za ka偶dym ostrym, 偶ywym zdj臋ciem kryje si臋 ogromna ilo艣膰 surowych danych. Pojedyncza, nieskompresowana, wysokiej jako艣ci fotografia z nowoczesnego aparatu mo偶e z 艂atwo艣ci膮 przekroczy膰 20 do 30 megabajt贸w. Przechowywanie albumu wakacyjnego sk艂adaj膮cego si臋 z kilkuset zdj臋膰 poch艂on臋艂oby gigabajty przestrzeni, a pr贸ba wys艂ania nawet jednego z tych plik贸w e-mailem by艂aby powolnym i frustruj膮cym do艣wiadczeniem.

Ta ci臋偶ka pod wzgl臋dem danych natura obraz贸w cyfrowych stanowi艂a znacz膮c膮 barier臋 dla rozwoju fotografii cyfrowej i internetu. Rozwi膮zaniem, kt贸re si臋 pojawi艂o i sta艂o niekwestionowanym 艣wiatowym standardem, jest JPEG. to nie tylko format pliku; to zaawansowana metoda zaprojektowana specjalnie dla obraz贸w o ci膮g艂ych tonach, takich jak fotografie. Jej geniusz polega na zdolno艣ci do radykalnego zmniejszania rozmiar贸w plik贸w, cz臋sto o wsp贸艂czynnik 10 lub wi臋cej, przy jednoczesnym utrzymaniu widocznej utraty jako艣ci na absolutnym minimum. Osi膮ga to, sprytnie wykorzystuj膮c znane ograniczenia i charakterystyk臋 ludzkiego systemu wzrokowego.

Potok Kompresji JPEG: Podr贸偶 Krok po Kroku

Proces kompresji JPEG najlepiej jest rozumie膰 jako wieloetapowy potok, w kt贸rym dane obrazu s膮 stopniowo przekszta艂cane, redukowane i pakowane. Ka偶dy krok odgrywa kluczow膮 rol臋 w ostatecznym wsp贸艂czynniku kompresji i jako艣ci. Prze艣led藕my podr贸偶 obrazu, gdy jest on kompresowany do pliku JPEG.

Krok 1: Transformacja Przestrzeni Kolor贸w

Wi臋kszo艣膰 obraz贸w cyfrowych jest przechwytywana i pocz膮tkowo przechowywana w przestrzeni kolor贸w RGB (Czerwony, Zielony, Niebieski), gdzie kolor ka偶dego piksela jest definiowany przez intensywno艣膰 tych trzech podstawowych kolor贸w. Chocia偶 jest to intuicyjne dla wy艣wietlaczy, nie jest idealne dla kompresji. Pierwszym krokiem w procesie JPEG jest konwersja obrazu z RGB na inn膮 przestrze艅 kolor贸w, zazwyczaj YCbCr.

Ta nowa przestrze艅 dzieli informacje o obrazie na trzy sk艂adniki:

  • Y (Luminancja): Ten sk艂adnik reprezentuje informacje o jasno艣ci lub skali szaro艣ci obrazu. To jest to, co by艣 zobaczy艂, patrz膮c na czarno-bia艂膮 wersj臋 fotografii.
  • Cb (Chrominancja-niebieska): Ten sk艂adnik reprezentuje r贸偶nic臋 kolor贸w niebieski-偶贸艂ty.
  • Cr (Chrominancja-czerwona): Ten sk艂adnik reprezentuje r贸偶nic臋 kolor贸w czerwony-zielony.

Dlaczego to robimy? To rozdzielenie jest kluczowe, poniewa偶 ludzki system wzrokowy jest znacznie bardziej wra偶liwy na zmiany jasno艣ci (lumy) ni偶 na subtelne zmiany koloru (chromy). Potrafimy postrzega膰 drobne szczeg贸艂y w skali szaro艣ci z du偶膮 dok艂adno艣ci膮, ale nasza percepcja koloru jest znacznie mniej precyzyjna. Izoluj膮c jasno艣膰 od koloru, algorytm JPEG mo偶e traktowa膰 je inaczej w kolejnych krokach, co jest kluczowym aspektem jego podej艣cia psychowizualnego.

Krok 2: Podpr贸bkowanie Chrominancji (Downsampling)

Teraz, gdy informacja o kolorze jest oddzielona od jasno艣ci, algorytm wykorzystuje s艂abo艣膰 naszego systemu wzrokowego. to proces zmniejszania rozdzielczo艣ci kana艂贸w koloru (Cb i Cr). W istocie, zamiast przechowywa膰 unikaln膮 warto艣膰 koloru dla ka偶dego pojedynczego piksela, algorytm przechowuje jedn膮 warto艣膰 koloru, kt贸ra jest wsp贸艂dzielona przez ma艂y blok pikseli.

Jest to cz臋sto opisywane za pomoc膮 tr贸jcz艂onowego stosunku, takiego jak 4:4:44:4:4, 4:2:24:2:2, lub 4:2:04:2:0. Dla bloku 4 poziomych pikseli:

  • 4:4:44:4:4: Brak podpr贸bkowania. Ka偶dy z 4 pikseli ma swoj膮 odr臋bn膮 warto艣膰 Y, Cb i Cr. Zachowuje to maksymaln膮 jako艣膰 koloru.
  • 4:2:24:2:2: Podpr贸bkowanie poziome. Ka偶da para dw贸ch poziomych pikseli dzieli t臋 sam膮 warto艣膰 Cb i Cr, podczas gdy ka偶dy ma swoj膮 w艂asn膮 warto艣膰 Y. Rozdzielczo艣膰 koloru jest zmniejszona o po艂ow臋 w poziomie.
  • 4:2:04:2:0: Jest to najcz臋stszy schemat w wideo konsumenckim i JPEG. Zar贸wno pozioma, jak i pionowa rozdzielczo艣膰 koloru jest zmniejszona o po艂ow臋. Blok 222 \times 2 pikseli dzieli jedn膮 warto艣膰 Cb i Cr.

Ten krok zapewnia znaczn膮 kompresj臋, zanim jeszcze zostan膮 zastosowane jakiekolwiek inne z艂o偶one algorytmy, a dla wi臋kszo艣ci fotografii zmiana jest percepcyjnie niewidoczna. Jest to bardzo skuteczna i czysto psychowizualna sztuczka.

Krok 3: Dyskretna Transformata Kosinusowa (DCT)

To jest matematyczny rdze艅 algorytmu JPEG. Po transformacji kolor贸w i podpr贸bkowaniu, ka偶dy kana艂 (Y, Cb i Cr) jest dzielony na bloki pikseli 888 \times 8. Ka偶dy z tych blok贸w jest nast臋pnie przetwarzany przez .

Zamiast reprezentowa膰 blok jako 64 warto艣ci pikseli, DCT reprezentuje go jako 64 wsp贸艂czynniki cz臋stotliwo艣ci. Mo偶na to sobie wyobrazi膰 jako rozk艂adanie z艂o偶onego wzoru wizualnego na sum臋 prostych, standardowych wzor贸w (fal kosinusowych o r贸偶nych cz臋stotliwo艣ciach). Wynikiem DCT jest kolejny blok 888 \times 8, ale jego warto艣ci reprezentuj膮 teraz cz臋stotliwo艣ci, a nie kolory pikseli:

  • Wsp贸艂czynnik DC: Warto艣膰 w lewym g贸rnym rogu bloku (F(0,0)F(0,0)) to wsp贸艂czynnik DC (pr膮du sta艂ego). Reprezentuje on 艣redni膮 warto艣膰 wszystkich 64 pikseli w oryginalnym bloku, czyli jego og贸lny kolor i jasno艣膰. Jest to najwa偶niejsza informacja wizualna.
  • Wsp贸艂czynniki AC: Pozosta艂e 63 wsp贸艂czynniki to wsp贸艂czynniki AC (pr膮du zmiennego). Reprezentuj膮 one szczeg贸艂y, tekstury i kraw臋dzie w bloku. Wsp贸艂czynniki blisko lewego g贸rnego rogu reprezentuj膮 zmiany o niskiej cz臋stotliwo艣ci (艂agodne gradienty), podczas gdy wsp贸艂czynniki w prawym dolnym rogu reprezentuj膮 zmiany o wysokiej cz臋stotliwo艣ci (drobne szczeg贸艂y i ostre kraw臋dzie).

Kluczowym spostrze偶eniem jest to, 偶e dla typowego bloku 888 \times 8 z fotografii, wi臋kszo艣膰 "energii" wizualnej jest skoncentrowana we wsp贸艂czynniku DC i kilku niskocz臋stotliwo艣ciowych wsp贸艂czynnikach AC. Wysokocz臋stotliwo艣ciowe wsp贸艂czynniki AC s膮 cz臋sto bardzo bliskie zeru. Zadaniem DCT jest osi膮gni臋cie tej "kompakcji energii", co umo偶liwia kolejny krok.

Eksplorator jako艣ci JPEG

Przesuwaj suwak, aby zobaczy膰 jak mocna kwantyzacja zmniejsza plik i wprowadza znane artefakty.

Szac. wsp贸艂czynnik
2.40:1
Szac. rozmiar
3.13 MB
Szac. PSNR
42.4 dB
Artefakty
Lekka blokawo艣膰
Klatka testowaQ80

Symulacja zmniejsza rozdzielczo艣膰 sceny, podkre艣la granice blok贸w 8x8 i dodaje lekkie dzwonienie jak w JPEG.

Jako艣膰 vs kompresja2.40:1
Szac. wsp贸艂czynnikUstawienie jako艣ci

Krzywa przedstawia szacowany wsp贸艂czynnik kompresji dla typowego zdj臋cia 12 MP zapisanego jako JPEG.

Krok 4: Kwantyzacja: Krok Stratny

To tutaj dzieje si臋 prawdziwa magia kompresji stratnej i gdzie informacje s膮 trwale odrzucane. Ka偶dy z 64 wsp贸艂czynnik贸w w bloku DCT jest dzielony przez odpowiedni膮 warto艣膰 z 64-elementowej , a wynik jest zaokr膮glany do najbli偶szej liczby ca艂kowitej.

Ta tablica nie jest przypadkowa; zosta艂a zaprojektowana z uwzgl臋dnieniem zasad psychowizualnych.

  • Warto艣膰 w lewym g贸rnym rogu tablicy kwantyzacji (dla wsp贸艂czynnika DC) jest zazwyczaj ma艂a, zachowuj膮c kluczowe informacje o 艣rednim kolorze z du偶膮 precyzj膮.
  • Warto艣ci staj膮 si臋 stopniowo wi臋ksze dla wsp贸艂czynnik贸w o wy偶szych cz臋stotliwo艣ciach. Oznacza to, 偶e drobne szczeg贸艂y (wsp贸艂czynniki AC o wysokiej cz臋stotliwo艣ci) s膮 dzielone przez du偶e liczby, co powoduje, 偶e ich wynikowe warto艣ci s膮 zaokr膮glane do zera lub bardzo ma艂ych liczb ca艂kowitych.

Ustawienie "jako艣ci" przy zapisywaniu pliku JPEG (np. od 1 do 100) jest w istocie wsp贸艂czynnikiem skaluj膮cym dla tej tablicy kwantyzacji. Wysoka jako艣膰 (np. 95) u偶ywa mniejszych liczb w tablicy, zachowuj膮c wi臋cej szczeg贸艂贸w i skutkuj膮c wi臋kszym plikiem. Niska jako艣膰 (np. 20) u偶ywa bardzo du偶ych liczb w tablicy, odrzucaj膮c wiele szczeg贸艂贸w i tworz膮c bardzo ma艂y plik. Po tym kroku wiele z 63 wsp贸艂czynnik贸w AC, zw艂aszcza dla wysokich cz臋stotliwo艣ci, staje si臋 zerami.

Krok 5: Kodowanie Entropijne: Bezstratne Porz膮dki

Po kwantyzacji blok wsp贸艂czynnik贸w jest rzadk膮 macierz膮 z du偶膮 ilo艣ci膮 zer. Ostatnim krokiem jest efektywne uporz膮dkowanie i zakodowanie tych danych za pomoc膮 metod bezstratnych.

  1. Skanowanie Zygzakowate: 64 skwantyzowane wsp贸艂czynniki s膮 odczytywane w porz膮dku zygzakowatym, zaczynaj膮c od wsp贸艂czynnika DC w lewym g贸rnym rogu i przesuwaj膮c si臋 w kierunku prawego dolnego rogu. Celem tego skanowania jest zgrupowanie wielu zerowych wsp贸艂czynnik贸w wysokocz臋stotliwo艣ciowych w d艂ugie, kolejne serie.
  2. Kodowanie D艂ugo艣ci Serii (RLE): D艂ugie serie zer s膮 nast臋pnie efektywnie kodowane. Zamiast pisa膰 "0, 0, 0, 0, 0", RLE po prostu zapisuje kod, kt贸ry oznacza "pi臋膰 zer".
  3. Kodowanie Huffmana: Na koniec wynikowy strumie艅 kod贸w RLE i niezerowych wsp贸艂czynnik贸w AC, wraz z oddzielnie obs艂ugiwanymi wsp贸艂czynnikami DC, jest kompresowany za pomoc膮 kodowania Huffmana. Ten klasyczny algorytm bezstratny przypisuje kr贸tsze kody binarne do cz臋艣ciej wyst臋puj膮cych warto艣ci i d艂u偶sze kody do rzadszych, co ostatecznie pakuje dane w strumie艅 bit贸w JPEG.

Podr贸偶 Powrotna: Dekompresja JPEG

Aby wy艣wietli膰 obraz JPEG, urz膮dzenie musi przeprowadzi膰 ca艂y proces kompresji w odwrotnej kolejno艣ci. Dekoder odczytuje skompresowany strumie艅 bit贸w i:

  1. Dekodowanie Entropijne: Dekompresuje kody Huffmana i odtwarza dane zakodowane RLE, aby uzyska膰 z powrotem zygzakowat膮 sekwencj臋 skwantyzowanych wsp贸艂czynnik贸w DCT.
  2. Dekwantyzacja: Porz膮dkuje sekwencj臋 z powrotem w blok 888 \times 8 i mno偶y ka偶dy wsp贸艂czynnik przez odpowiedni膮 warto艣膰 z tej samej tablicy kwantyzacji u偶ytej podczas kodowania. Przywraca to przybli偶on膮 wielko艣膰 wsp贸艂czynnik贸w DCT, ale informacja utracona podczas zaokr膮glania jest stracona na zawsze.
  3. Odwrotna Dyskretna Transformata Kosinusowa (IDCT): Stosuje odwrotn膮 DCT do zdekwantyzowanego bloku wsp贸艂czynnik贸w, przekszta艂caj膮c dane z domeny cz臋stotliwo艣ci z powrotem do domeny przestrzennej, co daje blok warto艣ci pikseli 888 \times 8.
  4. Rekonstrukcja: Sk艂ada wszystkie bloki 888 \times 8, powi臋ksza kana艂y kolor贸w, je艣li u偶yto podpr贸bkowania chrominancji, i na koniec konwertuje obraz z YCbCr z powrotem na RGB, aby mo偶na go by艂o wy艣wietli膰 na ekranie.

Wynikiem jest obraz, kt贸ry wygl膮da bardzo podobnie do orygina艂u, ale jest zbudowany z u艂amka danych.

    Kompresja JPEG | Teleinf Edu