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.
Extensions | .jpg , .jpeg , .JPG , .JPEG , .jpe , .JPE |
---|---|
Type MIME | image/jpeg |
Type de format | |
Site web |
(en) jpeg.org/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.
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 :
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
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 :
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.
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.
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.
Abréviation | Valeur | Contenu | Nom | Commentaires |
---|---|---|---|---|
SOI | 0xFFD8 | aucun | Start Of Image | Premiers mots du fichier |
SOF0 | 0xFFC0 | taille variable | Start 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 | 0xFFC2 | taille variable | Start 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 | 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 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 ⊠0xFFD7 | aucun | Restart | 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 | 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 mot du fichier |
Articles connexes
Notes et références
- (en) Site de Asure Software - nouveau nom de Forgent depuis 2007
- (en)« Patent Asserted Against JPEG Standard Rejected by Patent Office as Result of PUBPAT Request », sur pubpat.org, (consulté le )
- (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)
- « ISO/IEC 10918-1 : 1993(E) p.36 »