Retour à l'accueil

JPEG et neurophysiologie visuelle : comment le format trompe l'œil

L'article explique comment le format JPEG est basé sur des caractéristiques neurophysiologiques de la vision humaine : le rapport entre bâtonnets et cônes, la vision des couleurs périphérique, l'activité des neurones V1 et la sensibilité au contraste (CSF). Des détails techniques sur YCbCr, sous-échantillonnage chroma 4:2:0, DCT et quantification avec des exemples de code sont fournis.

Comment JPEG modélise votre vision : analyse technique
Advertisement 728x90

Comment le JPEG trompe le système visuel : une ingénierie ancrée en neurophysiologie

Le JPEG n’est pas seulement un format de compression. C’est un modèle tridimensionnel de la vision humaine, codé dans un algorithme datant de 1992. Il ne s’agit pas d’optimiser les données pour le stockage ; il simule ce que l’œil voit, comment le cerveau le traite et où le système visuel perd des informations. Le résultat ? Des fichiers 5 à 10 fois plus petits sans aucune perte perceptible. Cet effet n’est pas obtenu en simplifiant les calculs — il est atteint en respectant précisément les contraintes biologiques : densité des photorécepteurs, sensibilité au contraste et sélectivité en fréquence spatiale du cortex. Vous trouverez ci-dessous une analyse technique de chaque étape du pipeline JPEG sous l’angle de la neurophysiologie visuelle.

YCbCr : séparer les signaux selon leur importance biologique

La première étape de l’encodage JPEG consiste à convertir le RGB en YCbCr. Ce n’est pas une simple commodité technique ; c’est une mise en œuvre directe de l’anatomie rétinienne. Les humains possèdent environ 120 millions de bâtonnets (sensibles à la luminosité) et seulement 6 à 7 millions de cônes (récepteurs de couleur), soit un ratio d’environ 20:1. Par conséquent, le système visuel peut distinguer les nuances de luminosité bien plus précisément que les nuances de couleur.

La formule de calcul du canal Y est la suivante :

Google AdInline article slot
Y = 0,299 × R + 0,587 × G + 0,114 × B

Ces coefficients ne sont pas arbitraires : le 0,587 pour le vert reflète la sensibilité maximale de l’œil humain autour de 555 nm — la région jaune-verte du spectre, adaptée par l’évolution pour repérer les fruits mûrs parmi le feuillage. C’est pourquoi les images en noir et blanc avec ces pondérations paraissent volumineuses et très contrastées, tandis qu’une moyenne uniforme (0,33R + 0,33G + 0,33B) produit une image plate et « savonneuse ».

Dans le YCbCr, le canal Y contient toutes les informations essentielles à la perception — structure, contours et textures. Cb et Cr ne sont que des ajustements pour la tonalité de couleur. Ils peuvent être traités de manière agressive sans compromettre la qualité perceptive.

Sous-échantillonnage de la chrominance : compresser la couleur en fonction de l’anatomie de la vision périphérique

Après la conversion, on applique le sous-échantillonnage de la chrominance — on réduit la résolution des canaux de couleur. Le mode le plus courant, 4:2:0, signifie un bloc Cb et un bloc Cr pour quatre blocs Y (2×2 pixels). En pratique, 75 % des informations de couleur sont éliminées.

Google AdInline article slot

Cela correspond directement à l’anatomie rétinienne : les cônes sont concentrés dans la fovéa, tandis que leur densité diminue brusquement vers la périphérie. La résolution spatiale de la vision des couleurs est en moyenne quatre fois inférieure à celle de la vision monochrome. Le JPEG ne « perd » pas la couleur ; il préserve exactement autant que le système visuel peut discerner dans chaque zone locale de l’image.

Pour vérifier cela, ouvrez simplement n’importe quel JPEG dans Photoshop, séparez-le en canaux YCbCr et comparez la qualité visuelle du Y avec celle de Cb/Cr : ces derniers apparaîtront flous et peu détaillés — mais lorsqu’ils sont superposés au Y, le cerveau restaure automatiquement l’intégrité de l’image. Ce n’est pas un défaut du format ; c’est tirer parti du fonctionnement du cortex visuel.

DCT et quantification : une carte de fréquences des zones aveugles

La Transformée Cosinus Discrète (DCT) divise l’image en blocs de 8×8 et décompose chaque bloc en 64 composantes de base — des gradients de basse fréquence aux bords, au bruit et aux textures de haute fréquence. Ce n’est pas abstrait : les neurones du cortex visuel primaire (V1) répondent à des bandes orientées avec des fréquences spatiales spécifiques — en fait, c’est une approximation biologique de la DCT.

Google AdInline article slot

Ensuite, les coefficients subissent une quantification — division par des valeurs issues d’une table de quantification et arrondissement. La table standard pour le canal Y a la structure suivante : des diviseurs minimaux dans le coin supérieur gauche (fréquences basses, haute sensibilité), des diviseurs maximaux dans le coin inférieur droit (fréquences élevées, faible sensibilité). Cette table n’est pas une hypothèse d’ingénierie ; c’est une carte empirique de la sensibilité au contraste (CSF) issue d’expériences psychovisuelles sur des humains. Le pic de la CSF se situe entre 3 et 5 cycles par degré d’angle visuel ; au-delà d’environ 60 cycles/degree, les humains ne peuvent physiquement plus distinguer les détails.

Lorsque vous réglez la qualité à 80 dans Photoshop, vous fixez un seuil auquel la quantification n’affecte que les fréquences situées en dessous du seuil perceptuel. À 5, l’algorithme commence à zéroiser même les fréquences intermédiaires — celles que le cerveau utilise réellement pour reconnaître la forme et la texture. D’où la chute brutale de la qualité perçue.

Expérience : visualiser ce que l’œil ne remarque pas

Pour voir exactement quelles composantes le JPEG considère comme « invisibles », vous pouvez réaliser une expérience simple : enregistrez la même image en JPEG à différentes qualités, puis calculez la différence entre l’original (PNG) et la version compressée.

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")

Les résultats sont frappants :

  • À 95, la carte des différences est presque noire — les pertes se limitent au bruit.
  • À 80, les différences se concentrent autour des contours, des lignes fines et des textures de haute fréquence (cheveux, tissus) — exactement les composantes que la DCT place dans les coefficients de haute fréquence et que la quantification zéroise en premier.
  • À 5, la carte des différences devient reconnaissable comme une « version granuleuse de l’original » — l’algorithme a déjà dépassé les limites de la CSF et commence à supprimer des informations essentielles à la perception de la forme.

Ce n’est pas un artefact de codage ; c’est une cartographie de vos propres seuils visuels.

Qualité 80 : le point d’inflexion sur la courbe de la CSF

Pourquoi précisément 80 — la norme de facto sur le web ? Le graphique montrant la taille du fichier en fonction de l’SSIM (indice de similarité structurelle) selon la qualité révèle un net point d’inflexion autour de 80. Avant cela, augmenter la qualité (SSIM) entraîne une légère augmentation de la taille du fichier. Après cela, la taille double pour un gain négligeable de l’SSIM (moins de 0,001).

Cela coïncide avec le passage de la suppression des fréquences invisibles à la suppression des fréquences visibles. La quantification à une qualité inférieure à 80 opère dans la zone où la CSF est proche de zéro ; à une qualité supérieure à 80, elle opère dans la zone où la CSF augmente brusquement. Ainsi, la règle « qualité=80 » n’est pas un chiffre magique ; c’est une approximation pratique du seuil de sensibilité au contraste pour une image typique vue dans des conditions standard (30 cm, 1080p).

Ce qui compte

  • Le JPEG ne compresse pas « l’image » ; il modélise le fonctionnement du système visuel : bâtonnets/cônes → Y/CbCr, vision périphérique des couleurs → sous-échantillonnage de la chrominance, sélectivité neuronale en fréquence dans V1 → DCT, seuils de sensibilité au contraste → table de quantification.
  • Les coefficients dans la formule Y = 0,299R + 0,587G + 0,114B ne sont pas des approximations ; ils constituent un modèle paramétrique de la sensibilité spectrale de l’œil humain.
  • Le mode de sous-échantillonnage 4:2:0 correspond au rapport réel de résolution entre la vision monochrome et la vision des couleurs (~4:1), et non aux limitations techniques du matériel.
  • La table de quantification n’est pas un modèle statique ; c’est une carte empirique de la CSF issue d’expériences en laboratoire sur des sujets vivants.
  • La qualité 80 n’est pas un « compromis » ; c’est le point où l’algorithme cesse de travailler dans la zone des pertes invisibles et commence à affecter des composantes perceptibles dans l’image.

— Editorial Team

Advertisement 728x90

Lire ensuite