AccueilđŸ‡«đŸ‡·Chercher

JPEG

JPEG (sigle de Joint Photographic Experts Group) 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.

JPEG
Une photo de fleur compressée en JPEG, avec des compressions de plus en plus fortes sur chacun des pétales, à partir de midi dans le sens antihoraire.
Caractéristiques
Extensions
.jpg, .jpeg, .JPG, .JPEG, .jpe, .JPE
Type MIME
image/jpeg
Type de format
Site web

Les extensions de nom de fichiers les plus communes pour les fichiers employant la compression JPEG sont .jpg et .jpeg, cependant .jpe, .jfif et .jif furent aussi utilisées.

Introduction au JPEG

JPEG est l’acronyme de Joint Photographic Experts Group. Il s'agit d'un comitĂ© d’experts qui Ă©dicte des normes de compression pour l’image fixe. La norme communĂ©ment appelĂ©e JPEG, de son vrai nom ISO/CEI 10918-1 UIT-T Recommendation T.81, est le rĂ©sultat de l’évolution de 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. La norme officielle et dĂ©finitive a Ă©tĂ© adoptĂ©e en 1992. Dans la pratique, 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 de codage quant Ă  lui est laissĂ© libre Ă  la compĂ©tition des industriels et des universitaires. La seule contrainte est que l’image produite doit pouvoir ĂȘtre dĂ©codĂ©e par un dĂ©codeur respectant le standard. La norme propose un jeu de fichiers de tests appelĂ©s fichiers de conformitĂ© qui permettent de vĂ©rifier qu'un dĂ©codeur respecte bien la norme. Un dĂ©codeur est dit conforme s’il est capable de dĂ©coder tous les fichiers de conformitĂ©.

Un brevet concernant la norme JPEG a été déposé par l'entreprise Forgent[1], mais a été remis en cause par le bureau américain des brevets (USPTO), qui l'a invalidé le pour antériorité existante à la suite d'une plainte de la Public Patent Foundation[2]. Mais depuis le , 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 Ă  8. Cette partie fait l’objet d’une norme spĂ©cifique appelĂ©e JPEG-LS.

Cet algorithme est trĂšs populaire, en particulier sur Internet oĂč la compression d'un fichier permet de rĂ©duire le coĂ»t en bande passante. Il est de plus possible d'enregistrer une image dans le format JPEG avec la majeure partie des appareils photo numĂ©riques et tĂ©lĂ©phones portables. Cependant, les pertes se produisant lors de la compression « classique » font qu'il est moins utilisĂ© dans certains domaines comme l'imagerie mĂ©dicale, oĂč la restitution fidĂšle de l'image initiale est plus importante.

Le format JPEG/JFIF supporte une taille d'image maximale de 65 535 × 65 535 pixels soit 4 294 836 225 pixels.

Fichiers JPEG

Extensions de nom de fichiers JPEG

Les extensions de nom de fichiers les plus communes pour les fichiers employant la compression JPEG sont .jpg et .jpeg, cependant .jpe, .jfif et .jif furent aussi utilisĂ©es. Il est aussi possible pour les donnĂ©es JPEG d'ĂȘtre embarquĂ©es dans d'autres types de fichiers - les fichiers codĂ©s en format TIFF contiennent souvent une image miniature JPEG de l'image principale ; et les fichiers MP3 peuvent contenir une image JPEG d'une couverture, contenue dans le tag ID3v2.

L'extension JPG est apparue dans les annĂ©es 1990 parce que certains systĂšmes d'exploitation de cette pĂ©riode (ex. : MS-DOS, Windows 95, 98, Me) ne permettaient pas d'utiliser d'extension de fichier de plus de 3 caractĂšres.

La compression JPEG

Le processus de compression et de décompression JPEG irréversibles comporte six étapes principales représentées ci-dessous :

Organigramme de compression
Figure 1 : Organigramme de compression.

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 car l’Ɠil humain est assez sensible Ă  la luminance (la luminositĂ©) mais peu Ă  la chrominance (la teinte) d'une image. Afin de pouvoir exploiter cette propriĂ©tĂ©, l'algorithme convertit l'image d'origine depuis son modĂšle colorimĂ©trique initial (en gĂ©nĂ©ral RVB) vers le modĂšle de type chrominance/luminance YCbCr. Dans ce modĂšle, Y est l'information de luminance, et Cb et Cr sont deux informations de chrominance, respectivement le bleu moins Y et le rouge moins Y.

Sous-Ă©chantillonnage de la chrominance

 Illustration des différents types de sous-échantillonnage
Illustration des différents types de sous-échantillonnage

Pour exploiter cette faible sensibilitĂ© de l’Ɠil humain Ă  la chrominance, on peut procĂ©der Ă  un sous-Ă©chantillonnage de ses signaux. Le principe de l'opĂ©ration est de rĂ©duire de la taille de plusieurs blocs de chrominance en un seul bloc. Un traitement identique est appliquĂ© aux blocs Cb et aux blocs Cr, tandis que les blocs de luminance (blocs Y) ne sont pas modifiĂ©s. Le sous-Ă©chantillonnage peut ĂȘtre rĂ©alisĂ© selon plusieurs modes diffĂ©rents. Le type de mode utilisĂ© dans une opĂ©ration de compression est spĂ©cifiĂ© par la notation « J:a:b ».

L’interprĂ©tation de la notation est la suivante :

J : représente la largeur de la plus petite matrice de pixels 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 Ă  l'absence d'application du sous-Ă©chantillonnage.

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. Pour cela, on calcule la valeur moyenne de chrominance de deux pixels voisins horizontalement.

Cas 4:2:0

La moyenne de la chrominance de quatre pixels voisins est calculĂ©e et stockĂ©e dans le bloc produit par le sous-Ă©chantillonnage. Les pixels voisins forment des blocs carrĂ©s de dimension 2 × 2 pixels. Le sous-Ă©chantillonnage 4:2:0 ajoute donc une rĂ©duction verticale Ă  la rĂ©duction horizontale du mode 4:2:2. Il conduit Ă  une division par 4 de la taille des blocs Cb/Cr.

Cas 4:1:1

Ce dernier cas est rare en compression JPEG, et est plutÎt appliqué dans des applications vidéo tel que les formats NTSC DV, DVCAM, DVCPRO.

Ce type de sous-Ă©chantillonnage permet de rĂ©duire de maniĂšre importante la taille des images. Cependant, il conduit Ă  une perte d'information qui ne peut ĂȘtre rĂ©cupĂ©rĂ©e dans la phase de dĂ©codage de l'image ; il s'agit donc d'une opĂ©ration de compression irrĂ©versible. À l'issue de cette phase, les donnĂ©es se prĂ©sentent sous la forme de blocs de coefficients Y, Cb et Cr, le nombre de blocs Cb et Cr Ă©tant Ă©gal au quart, Ă  la moitiĂ© ou Ă  100 % du nombre de blocs Y selon le mode sous-Ă©chantillonnage appliquĂ©.

DĂ©coupage en blocs

L’image est dĂ©coupĂ©e en blocs de 64 (8 Ă— 8) sous-pixels. Les informations de luminance n’étant pas sous-Ă©chantillonnĂ©es, chaque bloc correspond Ă  8 Ă— 8 pixels dans l’image d’origine. Les informations de chrominance, par contre, correspondent en fonction du sous-Ă©chantillonnage Ă  8 Ă— 8, 16 Ă— 8 ou 16 Ă— 16 pixels dans l’image d’origine.

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. Cette transformation est une variante de la transformĂ©e de Fourier. Elle dĂ©compose un bloc, considĂ©rĂ© comme une fonction numĂ©rique Ă  deux variables, en une somme de fonctions cosinus oscillant Ă  des frĂ©quences diffĂ©rentes. Chaque bloc est ainsi dĂ©crit en une carte de frĂ©quences et en amplitudes plutĂŽt qu'en pixels et coefficients de couleur. 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 pixels sont ainsi associĂ©es frĂ©quences

La transformĂ©e DCT s’exprime mathĂ©matiquement par :

Équation 1 : TransformĂ©e DCT directe.

Et la transformĂ©e DCT inverse s’exprime par :

Équation 2 : TransformĂ©e DCT inverse.

Dans les deux cas, la constante vaut :

É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 :

Équation 4 : Matrice d’origine.

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

Équation 5 : Matrice transformĂ©e DCT.

L'application de la DCT est une opĂ©ration thĂ©oriquement sans perte d'informations ; les coefficients initiaux peuvent ĂȘtre retrouvĂ©s en appliquant la « DCT inverse » au rĂ©sultat de la DCT. Dans la pratique, une certaine perte d'informations reste cependant possible en raison des erreurs d'arrondis introduites en cours de calcul.

Remarques

Le calcul d’une DCT 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 permet 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 avec les machines les plus puissantes.

À la suite de cette Ă©tape, les basses et hautes frĂ©quences sont distinguĂ©es. Les basses frĂ©quences constituent les donnĂ©es majeures prĂ©sentes dans une image, les hautes frĂ©quences, quant Ă  elles, caractĂ©risent les zones Ă  fort contraste, qui sont les changements brusques de couleur. Ces donnĂ©es Ă©tant moins visibles, c'est donc sur celles-ci que la compression s'effectuera.

Quantification

La quantification est l’étape de l'algorithme de compression JPEG au cours de laquelle se produit la majeure partie de la perte d'information (et donc de la qualitĂ© visuelle), mais c'est aussi celle qui permet de gagner le plus 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 spĂ©cifiquement 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 ; certains coefficients sont mĂȘme souvent ramenĂ©s Ă  0.

Le calcul permettant la quantification est le suivant :

entier le plus proche
Avec : entier directement inférieur à
Équation 6 : Calcul de la quantification.

Et pour la quantification inverse :

Équation 7 : Calcul de la quantification inverse.

Comme le montre l'exemple ci-dessous, la quantification ramĂšne beaucoup de coefficients Ă  0 (surtout en bas Ă  droite dans la matrice, lĂ  oĂč se trouvent les hautes frĂ©quences). Seules quelques informations essentielles (concentrĂ©es dans le coin en haut Ă  gauche) sont gardĂ©es pour reprĂ©senter le bloc. La redondance des donnĂ©es contenues dans le bloc augmente ainsi fortement, ce qui peut ĂȘtre exploitĂ© par un algorithme de compression : au moment de coder le rĂ©sultat dans le fichier, la longue suite de zĂ©ros nĂ©cessitera trĂšs peu de place. Cependant, 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. Le problĂšme apparaĂźtra lors du dĂ©codage nĂ©cessaire pour l'affichage de l'image : Ă  l’écran la division en blocs deviendra visible, et l'image aura un aspect « pixellisĂ© ».

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

Équation 8 : Matrice dĂ©finissant le niveau de quantification.

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

Équation 9 : Matrice quantifiĂ©e.

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 : .

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 :

Équation 10 : RĂ©sultat de la dĂ©compression.

Ainsi que la matrice d’erreur :

É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 le codage d'une image, soit le format de fichier. En effet, différents formats de fichiers (TIFF, PDF, JPG
) peuvent contenir une image codée en JPEG. On parlera dans ce paragraphe du format de fichier (aussi appelé JFIF pour JPEG File Interchange 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 0xFFD8aucunStart Of Image Premiers mots du fichier
SOF0 0xFFC0taille variableStart Of Frame (Baseline DCT) Indique une image codé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 0xFFC2taille variableStart Of Frame (Progressive DCT) Indique une image codé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 0xFFC4taille variableDefine Huffman Table(s) Spécifie une ou plusieurs tables d'Huffman.
DQT 0xFFDBtaille variableDefine Quantization Table(s) Spécifie une ou plusieurs tables de quantification.
DRI 0xFFDDdeux octetsDefine 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 0xFFDAtaille variableStart Of Scan Commence un parcours de haut en bas de l'image. Dans les codages 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. La taille n'est pas indiquĂ©e : il est immĂ©diatement suivi par des donnĂ©es codĂ©es entropiquement. Les octets 0xFF sont suivis par un octet 0x00 pour ne pas ĂȘtre confondus avec des marqueurs.
RSTn 0xFFD0 
 0xFFD7aucunRestart InsĂšre 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 0xFFEntaille variableApplication-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 0xFFFEtaille variableCommentaire Contient un commentaire textuel.
EOI 0xFFD9aucunEnd Of Image Derniers mot du fichier

Articles connexes

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 », sur pubpat.org, (consulté le )
  3. (en) Majid Rabbani et Paul W Jones, Digital Image Compression Techniques, Bellingham, Spie Optical Engineering Press, , 240 p. (ISBN 0-8194-0648-1, OCLC 23142891, lire en ligne)
  4. « ISO/IEC 10918-1 : 1993(E) p.36 »
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.