JPEG jest algorytmem stratnej kompresji grafiki rastrowej. Może być używany do kompresji pojedynczych obrazów oraz ich sekwencji (wideo).
W standardzie JPEG kompresowany obraz jest dzielony na bloki pikseli o wymiarach 8 x 8. Każdy z nich jest dalej do pewnego momentu przetwarzany osobno. Na początku jest obliczana dwuwymiarowa transformata kosinusowa dla N = M = 8 opisana wzorem (wzór dla postaci dwuwymiarowej).
W praktyce przy pomocy DCT można rozłożyć dowolny obraz na sumę składowych, zależnych od częstotliwości funkcji bazowych - kosinusów. Składowe te odpowiadają za poziom szczegółowości obrazu. Ten etap nie odpowiada jeszcze za docelową kompresję i jest całkowicie odwracalny.
Poniższy rysunek obrazuje wszystkie funkcje bazowe transformacji DCT dla bloku 8 x 8 pikseli. Obraz (blok 8 x 8) zrekonstruowany z jego reprezentacji częstotliwościowej DCT będzie ważoną sumą wszystkich 64 obrazków.
![](assets/img/dctjpeg.png)
![](assets/img/image.jpg)
![](assets/img/image2.jpg)
Po przeprowadzeniu transformaty algorytm dokonuje kwantyzacji współczynników
![](assets/img/equation_15.png)
![](assets/img/equation_16.png)
Aby lepiej zobrazować koncentrację informacji w składnikach o niskich częstotliwościach warto przyjrzeć się animacji:
![](assets/img/animation.gif)
Na tym etapie w wyniku zastosowanych operacji obraz reprezentowany jest przez bloki macierzy, które zawierają współczynniki energetyczne określające "wagę" czyli zawartość składowej harmonicznej w danym bloku obrazu - już po procesie kompresji (wyzerowane składowe o wysokich częstostliwościach). W tym momencie można już przekształcić liczby na ciągi bitowe, oraz zakodować je entropijnym koderem Huffmana.
Należy pamiętać, że współczynniki DC (lewy górny narożnik) bloków 8x8 pikseli są najczęściej duże i skorelowane (z powodu składowej stałej obrazu), dlatego są one traktowane specjalnie: współczynnik DC pierwszego bloku oraz różnice tych współczynników pomiędzy kolejnymi blokami są zapisywane w kodzie VLI (Variable Length Integers). Pozostałe współczynniki tzw. AC, każdego bloku są kodowane oddzielnie. Ich wartości skanuje się wzdłuż linii ukośnych prostopadłych do głównej diagonali macierzy współczynników transformaty, zaczynając od lewego górnego rogu, czyli porządkuje od najniższych do najwyższych częstotliwości. Ponieważ w wyniku kwantyzacji większość współczynników AC jest wyzerowanych, uzyskuje się długie sekwencje zer, poprzedzielane nielicznymi wartościami niezerowymi.
Schemat JPEG zaprezentowano na poniższym rysunku.
![](assets/img/jpeg_scheme.png)
![](assets/img/equation_17.png)
![](assets/img/equation_18.png)