Witaj ponownie! Znalazłem ten artykuł, napisany jeszcze w maju 2019 roku. To jest kontynuacja serii artykułów o WAVE i JPEG, Oto . Ta publikacja zawiera informacje o algorytmie kodowania obrazów i o samym formacie w ogóle.
Szczypta historii
Łyżka stołowa artykułu z Wikipedii:
JPEG (Joint Photographic Experts Group) to jeden z popularnych formatów grafiki rastrowej, stosowany do przechowywania zdjęć i podobnych obrazów.
Standard ten został opracowany przez Zjednoczoną Grupę Ekspertów ds. Fotografii już w 1991 roku w celu efektywnego kompresowania obrazów.
Jak obrazy przekształcają się z surowego formatu do JPEG
Niektórzy uważają, że obrazy JPEG to skompresowane dane surowe metodą Huffmana, ale to nieprawda. Przed kontrolnym kompresowaniem dane przechodzą długą drogę.
Najpierw model kolorów zmienia się z RGB na YCbCr. W tym celu istnieje specjalny algorytm — . Y nie dotykamy, ponieważ odpowiada za jasność, a jego zmiana będzie zauważalna.
Pierwsze, co robią z obrazem — to "przycinanie" (subsampling). Rozumie się to łatwo: bierze się macierz 2x2 pikseli, następnie biorą się wartości Cb i Cr — średnie wartości każdego z komponentów YCbCr tych 4 pikseli. I tak, zaoszczędziliśmy 6 bajtów, zamiast 4 Y, 4 Cb, 4 Cr otrzymaliśmy 4 Y i te same dla każdego z nich Cb i Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). W skali nawet 2×2 kompresja stratna z współczynnikiem kompresji 2:1 brzmi solidnie. Dotyczy to całego obrazu. A więc - obcięliśmy połowę rozmiaru. I taki zabieg możemy zastosować dzięki naszemu postrzeganiu kolorów. Człowiek z łatwością zauważy różnicę w jasności, ale nie w kolorze, jeśli jest uśredniony w małym bloku pikseli. Przycinać można także w linii, 4 piksele w poziomie i pionie. Pierwsza opcja jest częściej stosowana. Jeśli jakość obrazu jest ważna, to przycinanie w ogóle się nie wykonuje.
Ilustracja próbkowania (Habr nie pozwolił wkleić gif-a) —
Główna część przygotowań
DCT
Teraz najtrudniejsza i najbardziej potrzebna część. Cały obrazek dzieli się na bloki 8×8 (stosuje się wypełnienie w przypadku, gdy rozdzielczość nie jest wielokrotnością boku bloku).
Teraz do każdego bloku stosuje się DCT (dyskretne przekształcenie kosinusowe). W tej części z obrazu wyjmowane jest wszystko zbędne. Używając DCT trzeba zrozumieć, czy dany blok (8×8) opisuje jakąś monotonną część obrazu: niebo, ścianę; czy zawiera złożoną strukturę (włosy, symbole itp.). Logiczne jest, że 64 podobne kolorystycznie piksele można opisać za pomocą jednego, ponieważ rozmiar bloku jest już znany. Oto kompresja: 64 do 1.
DCT przekształca blok w spektrum, i tam, gdzie wartości zmieniają się gwałtownie, współczynnik staje się dodatni, przy czym im ostrzejsze przejście, tym wyższy będzie wynik. Tam, gdzie współczynnik jest wyższy, na obrazku przedstawione są wyraźne przejścia w kolorze i jasności, gdzie jest niższy — słabe (płynne) zmiany wartości komponentów YCbCr w bloku.
Kwantowanie
Tutaj już stosuje się ustawienia kompresji. Każdy z współczynników w każdej z macierzy 8×8 dzieli się przez określoną liczbę. Jeśli jakość obrazu po wszystkich jego modyfikacjach nie ma być bardziej obniżana, to dzielnik powinien wynosić jeden. Jeśli ważniejsza jest pamięć zajmowana przez to zdjęcie, to dzielnik będzie większy od 1, a iloraz zaokrąglany. Tak wychodzi, że po zaokrągleniu często powstaje wiele zer.
Kwantowanie wykonuje się w celu stworzenia możliwości dalszej kompresji. Oto jak to wygląda na przykładzie kwantowania wykresu y = sin(x):

Kompresja
Najpierw przechodzimy przez macierz w zyg-zaku:

Otrzymujemy jednowymiarową tablicę z liczbami. Widzimy, że jest w niej wiele zer, które można usunąć. W tym celu zamiast sekwencji wielu zer wpisujemy 1 zero i po nim liczbę oznaczającą ich ilość w sekwencji. W ten sposób można zredukować do 1/3 rozmiaru całej tablicy. A następnie po prostu kompresuje tę tablicę metodą Huffmana i zapisujemy już w samym pliku.
Gdzie to jest używane
Wszędzie. Tak jak PNG, JPEG jest używany w aparatach fotograficznych, systemach operacyjnych (jako logotypy firm, ikony aplikacji, miniatury) i we wszystkich możliwych dziedzinach, gdzie należy efektywnie przechowywać obrazy.
Wnioski
Obecnie wiedza o JPEG jest cenna jedynie w celach edukacyjnych, ponieważ jest już wszędzie wbudowana i zoptymalizowana przez dużą grupę ludzi, ale granit nauki jest wciąż apetyczny.
Źródła
Źródło: habr.com
