Jak JPEG oszukuje system wzroku: inżynieria oparta na neurofizjologii
JPEG to nie tylko format kompresji. To trójwymiarowy model ludzkiego wzroku zakodowany w algorytmie z 1992 roku. Nie optymalizuje danych pod kątem przechowywania – modeluje, co widzi oko, jak przetwarza mózg i gdzie system wzroku traci informacje. W rezultacie pliki są 5–10 razy mniejsze bez wyraźnej straty jakości percepcji. Ten efekt osiąga się nie poprzez uproszczenie matematyki, lecz dzięki dokładnemu dopasowaniu do biologicznych ograniczeń: gęstości fotoreceptorów, czułości kontrastowej oraz selektywności częstotliwościowej kory. Poniżej przedstawiam techniczny rozkład każdego etapu procesu JPEG przez pryzmat neurofizjologii wzroku.
YCbCr: rozdzielanie sygnału według biologicznej ważności
Pierwszym krokiem kodowania JPEG jest przekształcenie RGB na YCbCr. To nie ułatwienie techniczne, lecz bezpośredni odzwierciedlenie anatomii siatkówki. U człowieka znajduje się około 120 milionów pręcików (czułych na jasność) i zaledwie 6–7 milionów kolb (receptorów barwnych). Stosunek ten wynosi około 20:1. Dlatego system wzroku znacznie precyzyjniej rozróżnia stopnie jasności niż odcienie kolorów.
Formuła obliczenia kanalu Y:
Y = 0,299 × R + 0,587 × G + 0,114 × B
Współczynniki te nie są przypadkowe: 0,587 dla zielonego odzwierciedla pik czułości ludzkiego oka na długości fali około 555 nm – obszarze żółto-zielonego spektrum, ewolucyjnie dostosowanym do wykrywania dojrzałych owoców na tle liści. Dlatego czarno-białe obrazy z takimi wagami wyglądają głębszo i kontrastowo, podczas gdy równomierne uśrednienie (0,33R + 0,33G + 0,33B) daje płaski, „mydlany” obraz.
W YCbCr kanal Y zawiera całą informację krytyczną dla percepcji dotyczącą struktury, konturów i tekstur. Cb i Cr to jedynie korekty tonu barwnego. Można poddać je agresywnej obróbce bez ryzyka utraty jakości percepcji.
Chroma subsampling: kompresja koloru zgodnie z anatomią wzroku obwodowego
Po konwersji stosuje się chroma subsampling – obniżenie rozdzielczości kanałów barwnych. Najczęściej stosowany tryb 4:2:0 oznacza: jeden blok Cb i jeden blok Cr na cztery bloki Y (2×2 piksele). W rzeczywistości odrzuca się 75% informacji barwnych.
To bezpośrednie odzwierciedlenie anatomii siatkówki: kolby skupione są w jamce centralnej (fovea), a ich gęstość gwałtownie spada w stronę obwodu. Przestrzenna rozdzielczość wzroku barwnego jest średnio cztery razy mniejsza niż monochromowego. JPEG nie „traci” koloru – zachowuje dokładnie tyle, ile system wzroku potrafi rozróżnić w każdym lokalnym obszarze obrazu.
Aby sprawdzić to, wystarczy otworzyć dowolny plik JPEG w Photoshopie, rozłożyć go na kanale YCbCr i porównać jakość wizualną Y z Cb/Cr: ostatni będzie wyglądał rozmazanie i niskofrekwencyjnie – ale po nałożeniu na Y mózg automatycznie przywraca integralność obrazu. To nie wada formatu – to wykorzystanie pracy kory wzrokowej.
DCT i kwantyzacja: mapa częstotliwości słabych punktów
Dyskretna transformada cosinusowa (DCT) dzieli obraz na bloki 8×8 i dekomponuje każdy blok na 64 bazowe składowe – od niskofrekwencyjnych (pławe gradienty) po wysokofrekwencyjne (delikatne krawędzie, szum, tekstury). To nie abstrakcja: neurony pierwszej kory wzrokowej (V1) reagują na orientowane pasma o określonej częstotliwości przestrzennej – w istocie realizują biologiczną aproksymację DCT.
Następnie współczynniki podlegają kwantyzacji – dzieleniu przez wartości z tabeli kwantyzacji i zaokrąglaniu. Standardowa tabela dla kanalu Y ma następującą strukturę: najmniejsze dzielniki w lewym górnym rogu (niskie częstotliwości, wysoka czułość), największe – w prawym dolnym (wysokie częstotliwości, niska czułość). Ta tabela nie jest inżynierską domniemanką, lecz empiryczną mapą czułości kontrastowej (CSF), uzyskaną w eksperymentach psychowizualnych na ludziach. Pik CSF znajduje się na 3–5 cyklach na stopień kąta widzenia; poza ~60 cyklami/stopień człowiek fizycznie nie rozróżnia szczegółów.
Kiedy wybierasz quality=80 w Photoshopie, ustawiasz próg, poniżej którego kwantyzacja dotyka tylko tych częstotliwości, które znajdują się poniżej progu percepcji. Przy quality=5 algorytm zaczyna zerować również częstotliwości średnie – te, które mózg faktycznie wykorzystuje do rozpoznawania kształtu i tekstury. Stąd gwałtowny spadek jakości percepcji.
Eksperyment: wizualizacja tego, czego oko nie zauważa
Aby zobaczyć, które dokładnie składniki JPEG uważa za „niewidoczne”, można przeprowadzić prosty eksperyment: zapisać ten sam obraz w formacie JPEG z różnym quality, a następnie obliczyć różnicę między oryginałem (PNG) a wersją skompresowaną.
from PIL import Image
import numpy as np
original = np.array(Image.open("photo.png")).astype(np.float32)
for q in [95, 80, 50, 20, 5]:
Image.open("photo.png").save(f"q{q}.jpg", quality=q)
compressed = np.array(Image.open(f"q{q}.jpg")).astype(np.float32)
diff = original - compressed
diff_visual = ((diff - diff.min()) / (diff.max() - diff.min()) * 255)
Image.fromarray(diff_visual.astype(np.uint8)).save(f"diff_q{q}.png")
Rezultaty są bardzo wyraźne:
- Przy quality=95 mapa różnic jest niemal czarna – straty znajdują się w strefie szumu.
- Przy quality=80 różnice lokalizują się na konturach, cienkich linii i wysokofrekwencyjnych teksturach (włosy, tkaniny) – właśnie te składniki, które DCT umieszcza w wysokofrekwencyjnych współczynnikach i które kwantyzacja zeruje jako pierwsze.
- Przy quality=5 mapa różnic staje się rozpoznawalna jako „ziarnista wersja oryginalu” – algorytm już wykracza poza granice CSF i zaczyna usuwać informacje niezbędne do percepcji kształtu.
To nie artefakt kodowania – to mapa progów własnego wzroku.
Quality 80: punkt przełomu na krzywej CSF
Dlaczego akurat 80 – de facto standard sieci? Wykres zależności wielkości pliku i SSIM (structural similarity index) od quality pokazuje wyraźny punkt przełomu w okolicy wartości 80. Do niego wzrost jakości (SSIM) następuje przy niewielkim zwiększeniu rozmiaru. Po nim rozmiar podwoi się przy znikomym wzroście SSIM (mniej niż 0,001).
To pokrywa się z przejściem od „obcinania częstotliwości niewidocznych” do „obcinania częstotliwości widocznych”. Kwantyzacja przy quality < 80 działa w strefie, gdzie CSF jest bliska zeru; przy quality > 80 – w strefie, gdzie CSF gwałtownie wzrasta. Zatem reguła „quality=80” to nie magiczna liczba, lecz praktyczna aproksymacja progu czułości kontrastowej dla typowego obrazu przy standardowym oglądaniu (30 cm, 1080p).
Co jest ważne
- JPEG nie kompresuje „obrazu”, lecz modeluje pracę systemu wzroku: pręciki/kolby → Y/CbCr, obwodowe wzrok barwny → chroma subsampling, neuronalna częstotliwość wyboru V1 → DCT, progi czułości kontrastowej → tabela kwantyzacji.
- Współczynniki w formule Y = 0,299R + 0,587G + 0,114B to nie przybliżenie, lecz parametryzowany model czułości spektralnej ludzkiego oka.
- Tryb 4:2:0 chroma subsampling odpowiada rzeczywistemu stosunkowi rozdzielczości wzroku monochromowego i barwnego (~4:1), a nie technicznym ograniczeniom sprzętu.
- Tabela kwantyzacji to nie statyczna szablon, lecz empiryczna mapa CSF, uzyskana w warunkach laboratoryjnych na żywcych badanych.
- Quality=80 to nie „kompromis”, lecz punkt, w którym algorytm przestaje pracować w strefie niewidzialnych strat i zaczyna dotykać komponentów obrazu, które są widoczne.
— Editorial Team
Brak komentarzy.