Powrót do strony głównej

JPEG i neurofizjologia wzroku: jak format oszukuje oko

Artykuł wyjaśnia, jak format JPEG opiera się na neurofizjologicznych cechach ludzkiego wzroku: stosunku pręcików i stożków, peryferyjnemu widzeniu kolorów, pracy neuronów V1 i wrażliwości kontrastowej (CSF). Podane są techniczne szczegóły YCbCr, chroma subsampling 4:2:0, DCT i kwantowania z przykładami kodu.

Jak JPEG modeluje twój wzrok: techniczny rozbiór
Advertisement 728x90

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:

Google AdInline article slot
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.

Google AdInline article slot

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.

Google AdInline article slot

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

Advertisement 728x90

Czytaj dalej