JPEG


JPEG
Page d'aide sur les redirections Cet article concerne le format. Pour le groupe, voir Joint Photographic Experts Group.
JPEG
Extension .jpg, .jpeg
Une photo de fleur compressée en JPEG, avec des compressions de plus en plus fortes, de gauche à droite.

La norme JPEG est une norme qui définit le format d'enregistrement et l'algorithme de décodage pour une représentation numérique compressée d'une image fixe.

Sommaire

Introduction au JPEG

JPEG est l’acronyme de Joint Photographic Experts Group. C’est un comité d’experts qui édite des normes de compression pour l’image fixe. La norme communément appelée JPEG, de son vrai nom ISO/IEC IS 10918-1 | ITU-T Recommendation T.81, est le résultat de l’évolution des travaux qui ont débuté dans les années 1978 à 1980 avec les premiers essais en laboratoire de compression d’images.

Le groupe JPEG qui a réuni une trentaine d’experts internationaux, a spécifié la norme en 1991. Mais la norme officielle et définitive n'a été adoptée qu'en 1992. Pratiquement, seule la partie concernant le codage arithmétique est brevetée, et par conséquent protégée par IBM, son concepteur.

JPEG normalise uniquement l’algorithme et le format de décodage. Le processus d'encodage est laissé libre à la compétition des industriels et universitaires, du moment que l’image produite est décodable par un décodeur standard. La norme propose un jeu de fichiers de tests appelés fichiers de conformance qui permettent de vérifier qu'un décodeur respecte bien la norme. Un décodeur est alors dit conforme s’il est capable de décoder tous les fichiers de conformance.

Le brevet de la norme JPEG a été déposé par l'entreprise Forgent[1], mais il a été remis en cause par le bureau américain des brevets (USPTO), qui l'a invalidé le 24 mai 2006 pour antériorité existante à la suite d'une plainte de la Public Patent Foundation qui considère ce brevet invalide[2]. Mais depuis le 27 septembre 2007, la société Global Patent Holdings, filiale d'Acacia Research Corporation, a à son tour revendiqué la paternité de ce format.

JPEG définit deux classes de processus de compression :

  • avec pertes ou compression irréversible. C’est le JPEG « classique ». Il permet des taux de compression de 3 à 100.
  • sans pertes ou compression réversible. Il n’y a pas de pertes d’information et il est donc possible de revenir aux valeurs originales de l’image. Les gains en termes de compression sont alors plus modestes, avec un taux de compression de l’ordre de 2. Cette partie fait l’objet d’une norme spécifique JPEG-LS.

La compression JPEG

Nous allons maintenant nous intéresser à l’algorithme.

On peut diviser la compression et la décompression JPEG en six étapes, voici l’organigramme :

Organigramme de compression
Figure 1 : Organigramme de compression.

Attention, quand on suit l'algorithme du bas, on n'aboutit pas à l'image brute, mais à une image restituée, qui n'est en aucun cas l'image brute. Entre l'image brute et l'image restituée, il y a des écarts, qui seront d'autant plus importants que l'opération de quantification a été forte.

Découpage en blocs

Le format JPEG, comme le font généralement les algorithmes de compression à perte, commence par découper l’image en blocs ou carreaux généralement carrés de 64 (8 × 8) ou 256 (16 × 16) pixels.

Transformation des couleurs

JPEG est capable de coder les couleurs sous n’importe quel format, toutefois les meilleurs taux de compression sont obtenus avec des codages de couleur de type luminance/chrominance tels que YUV, YCbCr car l’œil humain est assez sensible à la luminance mais peu à la chrominance.

Sous-échantillonnage

 Différents type de sous-échantillonnage
Différents type de sous-échantillonnage

Pour exploiter cette faible sensibilité de l’œil humain à la chrominance, on procède à un sous-échantillonnage de ses signaux, et cela se fait par la réduction de la taille de plusieurs blocs de chrominance en un seul bloc. Un système de notation "J:a:b" est utilisé pour désigner le mode de sous-échantillonnage utilisé dans une compression et qui ressemble à cela: 4:2:2 ou 4:2:0 ..., c'est une notation qui peut porter à confusion, mais qui a une interprétation facile, comme on va le voir sur la figure suivante.

Pour ce qui est de l’interprétation de la notation;

J : représente la largeur de la plus petite matrice de pixel considérée (généralement 4)

a : le nombre de composantes de chrominance dans la première ligne

b : le nombre de composantes de chrominance supplémentaires dans la deuxième ligne

Cas 4:4:4

Ce cas correspond tout simplement au cas où aucun sous-échantillonnage n'est appliqué.

Cas 4:2:2

Ce cas Correspond à un sous-échantillonnage qui conduit à une réduction d'un facteur 1/2 de la taille des blocs Cb/Cr, et cela se fait horizontalement, en effet c'est la moyenne (Cb/Cr) des deux pixels voisins qui est prise en compte.

Cas 4:2:0

Remplace les valeurs des quatre pixels voisines par leur moyenne dans le bloc produit par le sous-échantillonnage.

Cas 4:1:1

Ce dernier cas est moins utilisé pour le JPEG, et on le trouve (quand c'est le cas) dans des applications vidéo tel que les formats NTSC DV, DVCAM, DVCPRO.


Vous l'auriez surement compris, ce type de sous-échantillonnage est très avantageux en ce qui concerne la compression de taille de l'image mais il n'est malheureusement pas réversible. Pour plus de détails sur cette partie, je vous renvoie sur la documentation suivante : [1]

Transformée DCT

La transformée DCT (Discrete Cosine Transform, en français transformée en cosinus discrète), est une transformation numérique qui est appliquée à chaque bloc et pour chaque « couleur ». Cette transformée est une variante de la transformée de Fourier. Cette méthode permet de décrire chaque bloc en une carte de fréquences et en amplitudes plutôt qu'en pixels et couleurs. La valeur d’une fréquence reflète l’importance et la rapidité d’un changement, tandis que la valeur d’une amplitude correspond à l’écart associé à chaque changement de couleur.

À chaque bloc de N\cdot N pixels sont ainsi associées N\cdot N fréquences

La transformée DCT s’exprime mathématiquement par :

\mathrm{DCT}(i, j)=\frac{2}{N}C(i)C(j)\sum_{x=0}^{N-1}\sum_{y=0}^{N-1}
\mathrm{pixel}(x, y) \cos\left[\frac{(2x+1)i\pi}{2N} \right] \cos\left[\frac{(2y+1)j\pi}{2N} \right]
Équation 1 : Transformée DCT directe.

Et la transformée DCT inverse s’exprime par :

\mathrm{pixel}(x, y)=\frac{2}{N}\sum_{i=0}^{N-1}\sum_{j=0}^{N-1}
C(i)C(j)\,\mathrm{ DCT}(i, j) \cos\left[\frac{(2x+1)i\pi}{2N} \right] \cos\left[\frac{(2y+1)j\pi}{2N} \right]
Équation 2 : Transformée DCT inverse.

Dans les deux cas, la constante C\,\! vaut :

C(x)=\left\{\begin{matrix}\frac{1}{\sqrt{2}}&
\mathrm{pour}~ x = 0 \\[1ex] 1 & \mathrm{pour}~ x > 0 \end{matrix}\right.
Équation 3 : Définition de la constante C.

Pour illustrer la compression, a été repris un exemple complet provenant de Digital Image Compression Techniques de Majid Rabbani et Paul W. Jones[3].

Matrice (bloc de pixels) de base :

f=\begin{bmatrix} 139 & 144 & 149 & 153 & 155 & 155 & 155 & 155 \\ 144 & 151 & 153 & 156 & 159 & 156 & 156 & 156 \\ 150 & 155 & 160 & 163 & 158 & 156 & 156 & 156 \\ 159 & 161 & 162 & 160 & 160 & 159 & 159 & 159 \\ 159 & 160 & 161 & 162 & 162 & 155 & 155 & 155 \\ 161 & 161 & 161 & 161 & 160 & 157 & 157 & 157 \\ 162 & 162 & 161 & 163 & 162 & 157 & 157 & 157 \\ 162 & 162 & 161 & 161 & 163 & 158 & 158 & 158 \end{bmatrix}
Équation 4 : Matrice d’origine.

En effectuant la transformée DCT, on obtient la matrice des fréquences suivante :

F=\begin{bmatrix} 1260 & -1 & -12 & -5 & 2 & -2 & -3 & 1 \\ -23 & -17 & -6 & -3 & -3 & 0 & 0 & -1 \\ -11 & -9 & -2 & 2 & 0 & -1 & -1 & 0 \\ -7 & -2 & 0 & 1 & 1 & 0 & 0 & 0 \\ -1 & -1 & 1 & 2 & 0 & -1 & 1 & 1 \\ 2 & 0 & 2 & 0 & -1 & 1 & 1 & -1 \\ -1 & 0 & 0 & -1 & 0 & 2 & 1 & -1 \\ -3 & 2 & -4 & -2 & 2 & 1 & -1 & 0 \end{bmatrix}
Équation 5 : Matrice transformée DCT.

Remarques

Le calcul d’une DCT est complexe. C’est l’étape qui coûte le plus de temps et de ressources dans la compression et la décompression JPEG, mais c’est peut-être la plus importante car elle nous a permis de séparer les basses fréquences et les hautes fréquences présentes dans l’image.

La puissance de calcul disponible aujourd’hui, alliée à des algorithmes de type FFT très efficaces, permet de rendre le temps de calcul tout à fait acceptable pour l’utilisateur courant, voire imperceptible pour les machines les plus puissantes.

Quantification

La quantification est l’étape dans laquelle on perd réellement des informations (et donc de la qualité visuelle), mais c'est celle qui fait gagner beaucoup de place (contrairement à la DCT, qui ne compresse pas).

La DCT a retourné, pour chaque bloc, une matrice de 8×8 nombres (dans l’hypothèse que les blocs de l’image font 8×8 pixels). La quantification consiste à diviser cette matrice par une autre, appelée matrice de quantification, et qui contient 8×8 coefficients savamment choisis par le codeur.

Le but est ici d’atténuer les hautes fréquences, c’est-à-dire celles auxquelles l’œil humain est très peu sensible. Ces fréquences ont des amplitudes faibles, et elles sont encore plus atténuées par la quantification (les coefficients sont même ramenés à 0).

Voici le calcul permettant la quantification :

F^*(u, v) = \left \lfloor { F(u, v) + \left \lfloor {Q(u, v) \over 2 } \right \rfloor \over Q(u, v) } \right \rfloor \cong entier le plus proche \left( { F(u, v) \over Q(u, v) } \right)
Avec :  \lfloor x \rfloor entier directement inférieur à x\,\!
Équation 6 : Calcul de la quantification.

Et pour la quantification inverse :

\hat F(u, v) = F^*(u, v) \cdot Q(u, v)
Équation 7 : Calcul de la quantification inverse.

Comme le montre l’image ci-dessous, la quantification ramène beaucoup de coefficients à 0 (surtout en bas à droite dans la matrice, là où sont les hautes fréquences). Seules quelques informations essentielles (coin en haut à gauche) sont gardées pour représenter le bloc.

L'intérêt est qu'au moment de coder le résultat dans le fichier, la longue suite de zéros nécessitera très peu de place !

Mais si la quantification est trop forte (= taux de compression trop élevé), il y aura trop peu de coefficients non nuls pour représenter fidèlement le bloc ; dès lors, à l’écran la division en blocs devient visible, et l'image apparaît « pixellisée ».

Dans notre exemple, nous avons pris la matrice de quantification suivante :

Q=\begin{bmatrix} 16 & 11 & 10 & 16 & 24 & 40 & 51 & 61 \\ 12 & 12 & 14 & 19 & 26 & 58 & 60 & 55 \\ 14 & 13 & 16 & 24 & 40 & 57 & 69 & 56 \\ 14 & 17 & 22 & 29 & 51 & 87 & 80 & 62 \\ 18 & 22 & 37 & 56 & 68 & 109 & 103 & 77 \\ 24 & 35 & 55 & 64 & 81 & 104 & 113 & 92 \\ 49 & 64 & 78 & 87 & 103 & 121 & 120 & 101 \\ 72 & 92 & 95 & 98 & 112 & 100 & 103 & 99 \end{bmatrix}
Équation 8 : Matrice définissant le niveau de quantification.

Ce qui donne comme matrice des fréquences quantifiée :

F^*=\begin{bmatrix} 79 & 0 & -1 & ~0~ & ~0~ & ~0~ & ~0~ & ~0~ \\ -2 & -1 & 0 & 0 & 0 & 0 & 0 & 0 \\ -1 & -1 & 0 & 0 & 0 & 0 & 0 & 0 \\  0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}
Équation 9 : Matrice quantifiée.

Remarques

Codage, compression RLE et Huffman

Le codage s’effectue en zigzag comme le montre la figure suivante et se termine par un caractère de fin :

Ordre de codage défini par la norme JPEG
Figure 2 : Ordre de codage défini par la norme JPEG.

Codage de notre exemple : 79, 0, -2, -1, -1, -1, 0, 0, -1, EOB\,\!.

Ce résultat est ensuite compressé selon un algorithme RLE basé sur la valeur 0 (le codage RLE intervient uniquement sur cette dernière), puis un codage entropique de type Huffman ou arithmétique.

Avec le schéma de codage très simplifié suivant, on remarque que le codage nous délivre deux tables (quatre pour une image couleur). Ces tables étant enregistrées dans le fichier final peuvent être choisies par le compresseur.

Schéma de codage simplifié
Figure 3 : Schéma de codage simplifié.

Décompression JPEG

Les étapes de la décompression s’effectuent dans l’ordre inverse de la compression suivant les méthodes définies précédemment (en même temps que la compression).

Voici dans notre exemple le résultat de la décompression :

 f=\begin{bmatrix} 144 & 146 & 149 & 152 & 154 & 156 & 156 & 156 \\ 148 & 150 & 152 & 154 & 156 & 156 & 156 & 156 \\ 155 & 156 & 157 & 158 & 158 & 157 & 156 & 155 \\ 160 & 161 & 161 & 162 & 161 & 159 & 157 & 155 \\ 163 & 163 & 164 & 164 & 162 & 160 & 158 & 156 \\ 163 & 163 & 164 & 164 & 162 & 160 & 158 & 157 \\ 160 & 161 & 162 & 162 & 162 & 161 & 159 & 158 \\ 158 & 159 & 161 & 161 & 162 & 161 & 159 & 158 \end{bmatrix}
Équation 10 : Résultat de la décompression.

Ainsi que la matrice d’erreur :

e=\begin{bmatrix} -5 & -2 & 0 & 1 & 1 & -1 & -1 & -1 \\ -4 & 1 & 1 & 2 & 3 & 0 & 0 & 0 \\ -5 & -1 & 3 & 5 & 0 & -1 & 0 & 1 \\ -1 & 0 & 1 & -2 & -1 & 0 & 2 & 4 \\ -1 & 0 & 1 & -2 & -1 & 0 & 2 & 4 \\ -2 & -2 & -3 & -3 & -2 & -3 & -1 & 0 \\ 2 & 1 & -1 & 1 & 0 & -4 & -2 & -1 \\ 4 & 3 & 0 & 0 & 1 & -3 & -1 & 0 \end{bmatrix}
Équation 11 : Matrice des erreurs réalisées par les pertes.

Remarques

Les erreurs sont au maximum de 5 et en moyenne 1,6 sur environ 150 ce qui nous donne une erreur moyenne d’environ 1 %, et tout cela pour un passage de 64 à 10 valeurs (avec le caractère de fin) ; à cela, il faut rajouter la matrice de quantification, mais comme généralement on compresse de gros fichiers, elle n’influence que peu.

JPEG, codage sans pertes

Ici, la précision p des échantillons varie de 2 à 16 bits. À la place de la DCT, le codage utilise un prédicteur P à trois échantillons.

Schéma de compression JPEG sans pertes
Figure 4 : Schéma de compression JPEG sans pertes.

Syntaxe et structure

JPEG peut désigner soit l'encodage d'une image, soit le format de fichier. En effet, différents formats de fichiers (TIFF, PDF, JPG, …) peuvent contenir une image encodée en JPEG. On parlera dans ce paragraphe du format de fichier (aussi appelé JIFF pour JPEG image file format). Un fichier JPEG est constitué d'une séquence de segments commençant par un marqueur. Un marqueur se compose de la valeur 0xFF suivie d'un octet identifiant le type de marqueur. Certains marqueurs ne contiennent que ces deux octets ; d'autres sont suivis de deux octets spécifiant la taille en octets des données du segment. Cette taille inclut ces deux octets de taille mais pas ceux du marqueur.

Marqueurs JPEG courants[4]
Abréviation Valeur Contenu Nom Commentaires
SOI 0xFFD8 aucun Start Of Image Premiers octets du fichier
SOF0 0xFFC0 taille variable Start Of Frame (Baseline DCT) Indique une image encodée par baseline DCT, et spécifie la largeur, la hauteur, le nombre de composantes et le sous-échantillonnage des composantes (par exemple 4:2:0).
SOF2 0xFFC2 taille variable Start Of Frame (Progressive DCT) Indique une image encodée par progressive DCT, et spécifie la largeur, la hauteur, le nombre de composantes et le sous-échantillonnage des composantes (par exemple 4:2:0).
DHT 0xFFC4 taille variable Define Huffman Table(s) Spécifie une ou plusieurs tables d'Huffman.
DQT 0xFFDB taille variable Define Quantization Table(s) Spécifie une ou plusieurs tables de quantification.
DRI 0xFFDD deux octets Define Restart Interval Spécifie l'intervalle entre les marqueurs RSTn, en macroblocs. Ce marqueur est suivi de deux octets indiquant sa taille de sorte qu'il puisse être traité comme n'importe quel segment de taille variable.
SOS 0xFFDA taille variable Start Of Scan Commence un parcours de haut en bas de l'image. Dans les encodages baseline DCT, il n'y a généralement qu'un seul parcours. Les images progressive DCT contiennent habituellement plusieurs parcours. Ce marqueur spécifie quelle tranche de données il contient et il est immédiatement suivi par des données codées entropiquement.
RSTn 0xFFD0 … 0xFFD7 aucun Restart Inséré tous les r macroblocs, où r est l'intervalle DRI (cf. marqueur DRI). Il n'est pas utilisé s'il n'y a pas de marqueur DRI. Les trois bits de poids faible du code de marqueur varient en boucle de 0 à 7.
APPn 0xFFEn taille variable Application-specific Ce marqueur permet d'inclure des informations qu'un programme de visualisation peut ignorer tout en restant capable de décoder l'image. Par exemple, un fichier JPEG Exif utilise un marqueur APP1 pour enregistrer des métadonnées, organisées selon une structure proche du formatage TIFF.
COM 0xFFFE taille variable Commentaire Contient un commentaire textuel.
EOI 0xFFD9 aucun End Of Image Derniers octets du fichier

Articles connexes

Voir aussi

  • jpegmini (en) : ce site propose de comprimer de manière plus optimisée les fichiers JPEG, gratuitement et automatiquement.

Notes et références

  1. (en) Site de Asure Software - nouveau nom de Forgent depuis 2007
  2. (en) Patent Asserted Against JPEG Standard Rejected by Patent Office as Result of PUBPAT Request
  3. (en) Majid Rabbani et Paul W Jones, Digital Image Compression Techniques, Bellingham, Spie Optical Engineering Press, 1991, 240 p. (ISBN 0819406481) (OCLC 23142891) 
  4. ISO/IEC 10918-1 : 1993(E) p.36
Série JPEG
Groupe JPEG JFIF JPEG-LS JPEG JPEG 2000 Compression par ondelettes

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article JPEG de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • Jpeg — (произносится «джейпег»[1], англ. Joint Photographic Experts Group  объединённая группа экспертов в области фотографии)  является широкоиспользуемым методом сжатия фотоизображений. Формат файла, который содержит сжатые данные обычно также… …   Википедия

  • .jpeg — File Interchange Format JPEG File Interchange Format Extension de fichier .jpeg, .jpg, .jpe, .jfif, .jfi Type MIME image/jpeg Développé par Joint Photographic Experts Group Type de format format d’image matriciel avec perte …   Wikipédia en Français

  • Jpeg-ls — (souvent surnommé Lossless JPEG) est une norme de compression sans perte (donc réversible), basée sur l algorithme LOCO I (LOw COmplexity LOssless COmpression for Images) et évaluée par le Joint Photographic Experts Group, dont la notoriété est… …   Wikipédia en Français

  • JPEG-LS — (souvent surnommé Lossless JPEG) est une norme de compression sans perte (donc réversible), basée sur l algorithme LOCO I (LOw COmplexity LOssless COmpression for Images) et évaluée par le Joint Photographic Experts Group, dont la notoriété est… …   Wikipédia en Français

  • JPEG XR — (connu précédemment sous le nom Windows Media Photo et HD Photo) est un format graphique bitmap comprenant un algorithme de compression, créé par Microsoft. Il permet la compression avec perte ou sans perte. Il a été examiné et adopté comme… …   Wikipédia en Français

  • JPEG XR — Расширение .jxr[1], .hdp[2], .wdp[2] MIME image/vnd.ms photo Разработан JPEG Microsoft Опубликован …   Википедия

  • JPEG —   [sprich dschäipäg; Abk. für Joint Photographic Expert Group, dt. »vereinigte Fotoexpertengruppe«], internationales Forum zur Schaffung von Normen im Bereich der digitalen Bildspeicherung, die Mitglieder stammen aus nationalen Normungsbehörden… …   Universal-Lexikon

  • JPEG XR — (antes llamado Windows Media Photo y HD Photo) es un formato gráfico creado y adoptado por Microsoft. Este nuevo formato de codificación de imágenes fijas ofrece mayor calidad en menor tamaño que el formato JPEG. La reducción puede alcanzar hasta …   Wikipedia Español

  • JPEG — (jāʹpĕg ) n. Computer Science 1. The standard algorithm for the compression of digital images. 2. A digital image stored as a file so compressed: e mailed me a JPEG of her house.   [J(oint) P(hotographic) E(xperts) G(roup).] * * * in full Joint… …   Universalium

  • JPEG — (Joint Photographic Experts Group) es un algoritmo diseñado para comprimir imágenes con 24 bits de profundidad o en escala de grises. JPEG es también el formato de fichero que utiliza este algoritmo para comprimir imágenes. JPEG sólo trata… …   Enciclopedia Universal

  • JPEG — n. [Acronym from Joint Picture Experts Group.] (Computers) A standardized format for storing graphic data in binary computer files, allowing over 16 million different colors. It allows for lossy compression, i. e. the compression of data into a… …   The Collaborative International Dictionary of English