JPEG - JPEG

JPEG
Logo au format JPEG.svg
Felis silvestris silvestris petite diminution progressive de la qualité.png
Une photo d'un chat sauvage européen dont la qualité augmente, de gauche à droite
Extension de nom de fichier .jpg, .jpeg, .jpe
.jif, .jfif,.jfi
Type de média Internet
image/jpeg
Tapez le code JPEG
Identificateur de type uniforme (UTI) public.jpeg
nombre magique ff d8 ff
Développé par Joint Photographic Experts Group , IBM , Mitsubishi Electric , AT&T , Canon Inc. , ITU-T Study Group 16
Première version 18 septembre 1992 ; il y a 29 ans ( 1992-09-18 )
Type de format Format de compression d'image avec perte
Standard UIT-T T.81, UIT-T T.83, UIT-T T.84, UIT-T T.86, ISO/CEI 10918
Site Internet www .jpeg .org / jpeg /
Compression JPEG à variation continue (entre Q=100 et Q=1) pour un scanner abdominal

JPEG ou JPEG ( / p ɛ ɡ / JAY PEG ) est une méthode couramment utilisée pour la compression avec perte pour des images numériques , en particulier pour les images produites par photographie numérique . Le degré de compression peut être ajusté, permettant un compromis sélectionnable entre la taille de stockage et la qualité de l'image . JPEG atteint généralement une compression de 10:1 avec peu de perte perceptible de qualité d'image. Depuis son introduction en 1992, JPEG est la norme de compression d'image la plus utilisée au monde et le format d'image numérique le plus utilisé , avec plusieurs milliards d'images JPEG produites chaque jour depuis 2015.

Le terme "JPEG" est un sigle/acronyme pour le Joint Photographic Experts Group , qui a créé la norme en 1992. La base de JPEG est la transformée en cosinus discrète (DCT), une technique de compression d'image avec perte qui a été proposée pour la première fois par Nasir Ahmed en 1972. JPEG était en grande partie responsable de la prolifération des images numériques et des photos numériques sur Internet, et plus tard sur les médias sociaux .

La compression JPEG est utilisée dans un certain nombre de formats de fichiers image . JPEG/ Exif est le format d'image le plus couramment utilisé par les appareils photo numériques et autres appareils de capture d'images photographiques ; avec JPEG/ JFIF , c'est le format le plus courant pour stocker et transmettre des images photographiques sur le World Wide Web . Ces variations de format ne sont souvent pas distinguées et sont simplement appelées JPEG.

Le type de média MIME pour JPEG est image/jpeg , sauf dans les anciennes versions d' Internet Explorer , qui fournit un type MIME d' image/pjpeg lors du téléchargement d'images JPEG. Les fichiers JPEG ont généralement une extension de nom de fichier.jpg ou .jpeg. JPEG/JFIF prend en charge une taille d'image maximale de 65 535 × 65 535 pixels, soit jusqu'à 4 gigapixels. En 2000, le groupe JPEG a introduit un format destiné à lui succéder, JPEG 2000 , mais il n'a pas été en mesure de remplacer le JPEG d'origine en tant que norme d'image dominante.

Histoire

Fond

La spécification JPEG originale publiée en 1992 met en œuvre les processus de divers documents de recherche et brevets antérieurs cités par le CCITT (maintenant ITU-T , via ITU-T Study Group 16 ) et le Joint Photographic Experts Group. La base principale de l'algorithme de compression avec perte de JPEG est la transformée en cosinus discrète (DCT), qui a été proposée pour la première fois par Nasir Ahmed comme technique de compression d'image en 1972. Ahmed a développé un algorithme DCT pratique avec T. Natarajan de l'Université d'État du Kansas et KR Rao de l' Université du Texas à Arlington en 1973. Leur article fondateur de 1974 est cité dans la spécification JPEG, ainsi que plusieurs articles de recherche ultérieurs qui ont approfondi le DCT, y compris un article de 1977 de Wen-Hsiung Chen, CH Smith et SC Fralick qui décrivait un algorithme DCT rapide, ainsi qu'un article de 1978 de NJ Narasinha et SC Fralick, et un article de 1984 de BG Lee. La spécification cite également un article de 1984 de Wen-Hsiung Chen et WK Pratt comme influence sur son algorithme de quantification , et l'article de David A. Huffman de 1952 pour son algorithme de codage Huffman .

La spécification JPEG cite des brevets de plusieurs sociétés. Les brevets suivants ont fourni la base de son algorithme de codage arithmétique .

  • IBM
    • Brevet américain 4,652,856 - 4 février 1986 - Kottappuram MA Mohiuddin et Jorma J. Rissanen - Code arithmétique multi-alphabet sans multiplication
    • Brevet américain 4 905 297 – 27 février 1990 – G. Langdon, JL Mitchell, WB Pennebaker et Jorma J. Rissanen – Système d'encodeur et de décodeur de codage arithmétique
    • Brevet américain 4 935 882 - 19 juin 1990 - WB Pennebaker et JL Mitchell - Adaptation de probabilité pour les codeurs arithmétiques
  • Mitsubishi Électrique
    • JP H02202267  ( 1021672 ) – 21 janvier 1989 – Toshihiro Kimura, Shigenori Kino, Fumitaka Ono, Masayuki Yoshida – Système de codage
    • JP H03247123  ( 2-46275 ) - 26 février 1990 - Fumitaka Ono, Tomohiro Kimura, Masayuki Yoshida et Shigenori Kino - Appareil de codage et méthode de codage

La spécification JPEG cite également trois autres brevets d'IBM. D' autres sociétés citées comme titulaires de brevets comprennent AT & T (deux brevets) et Canon Inc. En l' absence de la liste est le brevet américain 4.698.672 , déposée par compression Labs Wen-Hsiung Chen et Daniel J. Klenke de en Octobre 1986. Le brevet décrit une base TCD algorithme de compression d'image, et serait plus tard une cause de controverse en 2002 (voir Controverse sur les brevets ci-dessous). Cependant, la spécification JPEG citait deux documents de recherche antérieurs de Wen-Hsiung Chen, publiés en 1977 et 1984.

Norme JPEG

"JPEG" signifie Joint Photographic Experts Group, le nom du comité qui a créé la norme JPEG ainsi que d'autres normes de codage d'images fixes. Le "Joint" signifiait ISO TC97 WG8 et CCITT SGVIII. Fondé en 1986, le groupe a développé le standard JPEG à la fin des années 1980. Parmi plusieurs techniques de codage par transformée qu'ils ont examinées, ils ont sélectionné la transformée en cosinus discrète (DCT), car c'était de loin la technique de compression pratique la plus efficace. Le groupe a publié la norme JPEG en 1992.

En 1987, l'ISO TC 97 est devenu l'ISO/CEI JTC1 et, en 1992, le CCITT est devenu l'UIT-T. Actuellement du côté du JTC1, JPEG est l'un des deux sous-groupes du comité technique mixte ISO / IEC 1 , sous-comité 29, groupe de travail 1 ( ISO/IEC JTC 1/SC 29 /WG 1) – intitulé Codage des images fixes . Du côté de l'UIT-T, l'UIT-T SG16 est l'organisme respectif. Le groupe JPEG original a été organisé en 1986 et a publié la première norme JPEG en 1992, qui a été approuvée en septembre 1992 en tant que Recommandation UIT-T T.81 et, en 1994, en tant qu'ISO/CEI 10918-1 .

La norme JPEG spécifie le codec , qui définit comment une image est compressée en un flux d' octets et décompressée en une image, mais pas le format de fichier utilisé pour contenir ce flux. Les normes Exif et JFIF définissent les formats de fichiers couramment utilisés pour l'échange d'images compressées JPEG.

Les normes JPEG sont officiellement nommées Technologies de l' information – Compression et codage numériques d'images fixes à tons continus . L'ISO/CEI 10918 comprend les parties suivantes :

Compression numérique et codage d'images fixes à tons continus – Parties
Partie Norme ISO/CEI UIT-T Rec. Première date de sortie publique Dernière modification Titre La description
Partie 1 ISO/CEI 10918-1:1994 T.81 (09/92) 18 sept. 1992 Exigences et directives
Partie 2 ISO/CEI 10918-2:1995 T.83 (11/94) 11 novembre 1994 Tests de conformité Règles et contrôles de conformité du logiciel (à la partie 1).
Partie 3 ISO/CEI 10918-3:1997 T.84 (07/96) 3 juillet 1996 1 avr. 1999 Rallonges Ensemble d'extensions pour améliorer la partie 1, y compris le format de fichier d'échange d'images fixes (SPIFF).
Partie 4 ISO/CEI 10918-4:1999 T.86 (06/98) 18 juin 1998 29 juin 2012 Enregistrement des profils JPEG, des profils SPIFF, des balises SPIFF, des espaces colorimétriques SPIFF, des marqueurs APPn, des types de compression SPIFF et des autorités d'enregistrement (REGAUT) méthodes pour enregistrer certains des paramètres utilisés pour étendre JPEG
Partie 5 ISO/CEI 10918-5:2013 T.871 (05/11) 14 mai 2011 Format d'échange de fichiers JPEG (JFIF) Un format populaire qui a été le format de fichier de facto pour les images codées par la norme JPEG. En 2009, le comité JPEG a officiellement créé un groupe ad hoc pour normaliser JFIF en tant que JPEG Part 5.
Partie 6 ISO/CEI 10918-6:2013 T.872 (06/12) juin 2012 Application aux systèmes d'impression Spécifie un sous-ensemble de fonctionnalités et d'outils d'application pour l'échange d'images codées conformément à la norme ISO/IEC 10918-1 pour l'impression.
Partie 7 ISO/CEI 10918-7:2019 T.873 (05/19) Mai 2019 Compression numérique et codage d'images fixes à tons continus Fournit un logiciel de référence pour la technologie de codage spécifiée dans la Recommandation UIT-T T.81 – ISO/CEI 10918-1. Bien que les implémentations de référence fournissent également un codeur, les tests de conformité de leur processus de codage dépassent le cadre de la présente Spécification.

Ecma International TR /98 spécifie le format d'échange de fichiers JPEG (JFIF); la première édition a été publiée en juin 2009.

Controverse sur les brevets

En 2002, Forgent Networks a affirmé qu'il détenait et ferait respecter les droits de brevet sur la technologie JPEG, découlant d'un brevet qui avait été déposé le 27 octobre 1986 et accordé le 6 octobre 1987 : le brevet américain 4 698 672 par Compression Labs' Wen- Hsiung Chen et Daniel J. Klenke. Alors que Forgent ne possédait pas Compression Labs à l'époque, Chen a ensuite vendu Compression Labs à Forgent, avant que Chen ne travaille pour Cisco . Cela a conduit Forgent à acquérir la propriété du brevet. L'annonce de Forgent en 2002 a créé une fureur rappelant les tentatives d' Unisys pour faire valoir ses droits sur la norme de compression d'image GIF.

Le comité JPEG a enquêté sur les revendications du brevet en 2002 et a estimé qu'elles étaient invalidées par l'art antérieur , un point de vue partagé par divers experts. Le brevet décrit un algorithme de compression d'image basé sur la transformée en cosinus discrète (DCT), une technique de compression d'image avec perte issue d'un article de 1974 de Nasir Ahmed, T. Natarajan et KR Rao . Wen-Hsiung Chen a développé sa technique DCT, décrivant un algorithme DCT rapide dans un article de 1977 avec CH Smith et SC Fralick. La spécification JPEG de 1992 cite à la fois l'article d'Ahmed de 1974 et l'article de Chen de 1977 pour son algorithme DCT, ainsi qu'un article de 1984 de Chen et WK Pratt pour son algorithme de quantification . Compression Labs a été fondée par Chen et a été la première entreprise à commercialiser la technologie DCT. Au moment où Chen a déposé son brevet pour un algorithme de compression d'image basé sur DCT avec Klenke en 1986, la plupart de ce qui deviendrait plus tard la norme JPEG avait déjà été formulée dans la littérature antérieure. Le représentant de JPEG, Richard Clark, a également affirmé que Chen lui-même siégeait dans l'un des comités JPEG, mais Forgent a nié cette affirmation.

Entre 2002 et 2004, Forgent a pu obtenir environ 105 millions de dollars US en licenciant leur brevet à une trentaine d'entreprises. En avril 2004, Forgent a poursuivi 31 autres sociétés pour imposer d'autres paiements de licence. En juillet de la même année, un consortium de 21 grandes sociétés informatiques a déposé une contre-poursuite, dans le but d'invalider le brevet. En outre, Microsoft a lancé une action en justice distincte contre Forgent en avril 2005. En février 2006, l' Office américain des brevets et des marques a accepté de réexaminer le brevet JPEG de Forgent à la demande de la Public Patent Foundation . Le 26 mai 2006, l'USPTO a déclaré le brevet invalide sur la base de l'art antérieur. L'USPTO a également constaté que Forgent connaissait l'état de la technique, mais il a intentionnellement évité d'en informer l'Office des brevets. Cela rend tout appel en faveur du rétablissement du brevet hautement improbable.

Forgent possède également un brevet similaire délivré par l' Office européen des brevets en 1994, bien qu'il ne soit pas clair dans quelle mesure il est exécutoire.

Au 27 octobre 2006, la durée de 20 ans du brevet américain semble avoir expiré, et en novembre 2006, Forgent a accepté d'abandonner l'application des revendications de brevet contre l'utilisation de la norme JPEG.

Le comité JPEG a comme l'un de ses objectifs explicites que leurs normes (en particulier leurs méthodes de base) soient implémentables sans paiement de frais de licence, et ils ont obtenu les droits de licence appropriés pour leur norme JPEG 2000 auprès de plus de 20 grandes organisations.

À partir d'août 2007, une autre société, Global Patent Holdings, LLC a affirmé que son brevet (brevet américain 5 253 341 ) délivré en 1993 était violé par le téléchargement d'images JPEG sur un site Web ou par courrier électronique. S'il n'est pas invalidé, ce brevet pourrait s'appliquer à tout site Web affichant des images JPEG. Le brevet était en cours de réexamen par l'Office américain des brevets et des marques de 2000 à 2007; en juillet 2007, l'Office des brevets a révoqué toutes les revendications initiales du brevet, mais a constaté qu'une revendication supplémentaire proposée par Global Patent Holdings (revendication 17) était valide. Global Patent Holdings a alors déposé un certain nombre de poursuites sur la base de la revendication 17 de son brevet.

Dans ses deux premiers procès après le réexamen, tous deux déposés à Chicago, dans l'Illinois, Global Patent Holdings a poursuivi les Packers de Green Bay , CDW , Motorola , Apple , Orbitz , Officemax , Caterpillar , Kraft et Peapod en tant que défendeurs. Une troisième action en justice a été déposée le 5 décembre 2007 dans le sud de la Floride contre ADT Security Services , AutoNation , Florida Crystals Corp., HearUSA, MovieTickets.com , Ocwen Financial Corp. et Tire Kingdom , et une quatrième action en justice le 8 janvier 2008, dans le sud de la Floride contre le Boca Raton Resort & Club . Une cinquième action en justice a été déposée contre Global Patent Holdings au Nevada. Cette action en justice a été déposée par Zappos.com , Inc., qui aurait été menacée par Global Patent Holdings, et a demandé une déclaration judiciaire selon laquelle le brevet '341 est invalide et non contrefait.

Global Patent Holdings avait également utilisé le brevet '341 pour poursuivre ou menacer les critiques virulents de larges brevets logiciels, y compris Gregory Aharonian et l'opérateur anonyme d'un blog de site Web connu sous le nom de " Patent Troll Tracker ". Le 21 décembre 2007, l'avocat en brevets Vernon Francissen de Chicago a demandé au US Patent and Trademark Office de réexaminer la seule revendication restante du brevet '341 sur la base d'un nouvel art antérieur.

Le 5 mars 2008, l'Office américain des brevets et des marques a accepté de réexaminer le brevet '341, estimant que le nouvel art antérieur soulevait de nouvelles questions substantielles concernant la validité du brevet. À la lumière du réexamen, les contrefacteurs accusés dans quatre des cinq poursuites en instance ont déposé des requêtes pour suspendre (suspendre) leurs affaires jusqu'à la fin de l'examen du brevet '341 par l'Office américain des brevets et des marques. Le 23 avril 2008, un juge présidant les deux procès à Chicago, dans l'Illinois, a accordé les requêtes dans ces affaires. Le 22 juillet 2008, l'Office des brevets a émis la première « Action de l'Office » du deuxième réexamen, déclarant la revendication invalide sur la base de dix-neuf motifs distincts. Le 24 novembre 2009, un certificat de réexamen a été délivré annulant toutes les réclamations.

À partir de 2011 et jusqu'au début de 2013, une entité connue sous le nom de Princeton Digital Image Corporation, basée dans l'est du Texas, a commencé à poursuivre un grand nombre d'entreprises pour violation présumée du brevet américain 4 813 056 . Princeton affirme que la norme de compression d'image JPEG enfreint le brevet '056 et a poursuivi un grand nombre de sites Web, de détaillants, de fabricants et de revendeurs d'appareils photo et d'appareils. Le brevet était à l'origine détenu et cédé à General Electric. Le brevet a expiré en décembre 2007, mais Princeton a poursuivi un grand nombre d'entreprises pour « contrefaçon passée » de ce brevet. (En vertu des lois américaines sur les brevets, un propriétaire de brevet peut poursuivre pour « contrefaçon passée » jusqu'à six ans avant le dépôt d'une action en justice, de sorte que Princeton aurait théoriquement pu continuer à poursuivre les entreprises jusqu'en décembre 2013.) En mars 2013, Princeton avait des poursuites en instance dans New York et Delaware contre plus de 55 entreprises. L'implication de General Electric dans la poursuite est inconnue, bien que les archives judiciaires indiquent qu'elle a cédé le brevet à Princeton en 2009 et conserve certains droits sur le brevet.

Utilisation typique

L'algorithme de compression JPEG fonctionne au mieux sur les photographies et les peintures avec des variations douces de tons et de couleurs. Il est préférable de l'utiliser pour les images fixes en couleur et en niveaux de gris, mais pas pour les images binaires . Pour l'utilisation du Web, où la réduction de la quantité de données utilisées pour une image est importante pour une présentation réactive, les avantages de la compression JPEG rendent JPEG populaire. JPEG/Exif est également le format le plus courant enregistré par les appareils photo numériques.

Cependant, JPEG n'est pas bien adapté aux dessins au trait et autres graphiques textuels ou iconiques, où les contrastes nets entre les pixels adjacents peuvent provoquer des artefacts notables. De telles images sont mieux enregistrées dans un format graphique sans perte tel que TIFF , GIF ou PNG , et bien que la norme JPEG inclue un mode de codage sans perte, le mode n'est pas pris en charge dans de nombreux produits en raison de l'infériorité de son schéma de compression par rapport à d'autres sans perte. formatage. L'ISO a développé son propre format de fichier appelé JPEG-LS à cette fin.

Étant donné que JPEG est une méthode de compression avec perte, qui réduit la fidélité de l'image, il est inapproprié pour la reproduction exacte des données d'imagerie (telles que certaines applications d'imagerie scientifique et médicale et certains travaux techniques de traitement d'images ). Les fichiers JPEG ne sont pas non plus adaptés pour subir plusieurs modifications, car une certaine qualité d'image est perdue à chaque fois que l'image est recompressée - voir Perte de génération numérique pour plus de détails. Pour éviter la perte d'informations sur l'image lors de l'édition séquentielle et répétitive, la première édition peut être enregistrée dans un format sans perte, puis éditée dans ce format, puis publiée au format JPEG pour la distribution.

Compression JPEG

JPEG utilise une forme de compression avec perte basée sur la transformée en cosinus discrète (DCT). Cette opération mathématique convertit chaque image/champ de la source vidéo du domaine spatial (2D) dans le domaine fréquentiel (alias domaine de transformation). Un modèle perceptif basé vaguement sur le système psychovisuel humain rejette les informations à haute fréquence, c'est-à-dire les transitions nettes d'intensité et de teinte de couleur . Dans le domaine de la transformation, le processus de réduction de l'information est appelé quantification. En termes plus simples, la quantification est une méthode pour réduire de manière optimale une grande échelle de nombres (avec différentes occurrences de chaque nombre) en une plus petite, et le domaine de transformation est une représentation pratique de l'image car les coefficients haute fréquence, qui contribuent moins à l'image globale que d'autres coefficients, sont typiquement de petites valeurs avec une compressibilité élevée. Les coefficients quantifiés sont ensuite séquencés et compressés sans perte dans le flux binaire de sortie . Presque toutes les implémentations logicielles de JPEG permettent à l'utilisateur de contrôler le taux de compression (ainsi que d'autres paramètres facultatifs), permettant à l'utilisateur de troquer la qualité de l'image pour une taille de fichier plus petite. Dans les applications embarquées (telles que miniDV, qui utilise un schéma de compression DCT similaire), les paramètres sont présélectionnés et fixés pour l'application.

La méthode de compression est généralement avec perte, ce qui signifie que certaines informations d'origine de l'image sont perdues et ne peuvent pas être restaurées, ce qui peut affecter la qualité de l'image. Il existe un mode sans perte optionnel défini dans la norme JPEG. Cependant, ce mode n'est pas largement pris en charge dans les produits.

Il existe également un format JPEG progressif entrelacé , dans lequel les données sont compressées en plusieurs passes de plus en plus détaillées. Ceci est idéal pour les grandes images qui seront affichées lors du téléchargement via une connexion lente, permettant un aperçu raisonnable après avoir reçu seulement une partie des données. Cependant, la prise en charge des JPEG progressifs n'est pas universelle. Lorsque des JPEG progressifs sont reçus par des programmes qui ne les prennent pas en charge (comme les versions d' Internet Explorer antérieures à Windows 7 ), le logiciel n'affiche l'image qu'une fois qu'elle a été complètement téléchargée.

Édition sans perte

Un certain nombre de modifications d'une image JPEG peuvent être effectuées sans perte (c'est-à-dire sans recompression ni perte de qualité associée) tant que la taille de l'image est un multiple de 1 bloc MCU (Unité de codage minimum) (généralement 16 pixels dans les deux sens, pour le sous-échantillonnage de chrominance 4:2:0 ). Les utilitaires qui implémentent cela incluent:

  • jpegtran et son interface graphique, Jpegcrop.
  • IrfanView utilisant "JPG Lossless Crop (PlugIn)" et "JPG Lossless Rotation (PlugIn)", qui nécessitent l'installation du plugin JPG_TRANSFORM.
  • FastStone Image Viewer utilisant "Recadrage sans perte dans un fichier" et "Rotation sans perte JPEG".
  • XnViewMP utilisant des "transformations sans perte JPEG".
  • ACDSee prend en charge la rotation sans perte (mais pas le recadrage sans perte) avec son option « Forcer les opérations JPEG sans perte ».

Les blocs peuvent être tournés par incréments de 90 degrés, retournés dans les axes horizontaux, verticaux et diagonaux et déplacés dans l'image. Tous les blocs de l'image d'origine n'ont pas besoin d'être utilisés dans l'image modifiée.

Les bords supérieur et gauche d'une image JPEG doivent se trouver sur une limite de bloc de 8 × 8 pixels, mais les bords inférieur et droit n'ont pas besoin de le faire. Cela limite les opérations de recadrage sans perte possibles et empêche également les retournements et les rotations d'une image dont le bord inférieur ou droit ne se trouve pas sur une limite de bloc pour tous les canaux (car le bord se retrouverait en haut ou à gauche, où - comme mentionné ci-dessus - un limite de bloc est obligatoire).

Les rotations où la largeur et la hauteur de l'image ne sont pas un multiple de 8 ou 16 (selon le sous-échantillonnage de chrominance) ne sont pas sans perte. La rotation d'une telle image provoque un recalcul des blocs ce qui entraîne une perte de qualité.

Lors de l'utilisation du recadrage sans perte, si le bas ou le côté droit de la zone de recadrage ne se trouve pas sur une limite de bloc, le reste des données des blocs partiellement utilisés sera toujours présent dans le fichier recadré et pourra être récupéré. Il est également possible de transformer entre les formats de base et progressifs sans aucune perte de qualité, puisque la seule différence est l'ordre dans lequel les coefficients sont placés dans le fichier.

De plus, plusieurs images JPEG peuvent être jointes sans perte, tant qu'elles ont été enregistrées avec la même qualité et que les bords coïncident avec les limites des blocs.

Fichiers JPEG

Le format de fichier dit « JPEG Interchange Format » (JIF) est spécifié dans l'annexe B de la norme. Cependant, ce format de fichier "pur" est rarement utilisé, principalement en raison de la difficulté de programmer des encodeurs et des décodeurs qui implémentent pleinement tous les aspects de la norme et en raison de certaines lacunes de la norme :

Plusieurs normes supplémentaires ont évolué pour résoudre ces problèmes. Le premier d'entre eux, sorti en 1992, était le JPEG File Interchange Format (ou JFIF), suivi ces dernières années par le format de fichier image échangeable (Exif) et les profils de couleurs ICC . Ces deux formats utilisent la disposition d'octets JIF réelle, composée de différents marqueurs , mais en plus, emploient l'un des points d'extension du standard JIF, à savoir les marqueurs d'application : JFIF utilise APP0, tandis qu'Exif utilise APP1. Dans ces segments du fichier qui ont été laissés pour une utilisation future dans la norme JIF et ne sont pas lus par celle-ci, ces normes ajoutent des métadonnées spécifiques.

Ainsi, à certains égards, JFIF est une version simplifiée de la norme JIF en ce qu'elle spécifie certaines contraintes (comme ne pas autoriser tous les différents modes d'encodage), tandis que d'autres manières, c'est une extension de JIF en raison de l'ajout métadonnées. La documentation de la norme JFIF originale indique :

Le format d'échange de fichiers JPEG est un format de fichier minimal qui permet d'échanger des flux de bits JPEG entre une grande variété de plates-formes et d'applications. Ce format minimal n'inclut aucune des fonctionnalités avancées trouvées dans la spécification TIFF JPEG ni dans aucun format de fichier spécifique à une application. Il ne devrait pas non plus, car le seul but de ce format simplifié est de permettre l'échange d'images compressées JPEG.

Les fichiers image qui utilisent la compression JPEG sont communément appelés "fichiers JPEG" et sont stockés dans des variantes du format d'image JIF. La plupart des appareils de capture d'images (tels que les appareils photo numériques) qui produisent des fichiers JPEG créent en fait des fichiers au format Exif, le format sur lequel l'industrie de l'appareil photo a normalisé l'échange de métadonnées. D'autre part, comme la norme Exif n'autorise pas les profils de couleurs, la plupart des logiciels de retouche d'images stockent le JPEG au format JFIF et incluent également le segment APP1 du fichier Exif pour inclure les métadonnées de manière presque conforme ; la norme JFIF est interprétée de manière assez flexible.

À proprement parler, les normes JFIF et Exif sont incompatibles, car chacune spécifie que son segment marqueur (APP0 ou APP1, respectivement) apparaît en premier. En pratique, la plupart des fichiers JPEG contiennent un segment marqueur JFIF qui précède l'en-tête Exif. Cela permet aux lecteurs plus anciens de gérer correctement le segment JFIF de format plus ancien, tandis que les lecteurs plus récents décodent également le segment Exif suivant, en exigeant moins qu'il apparaisse en premier.

Extensions de nom de fichier JPEG

Les extensions de nom de fichier les plus courantes pour les fichiers utilisant la compression JPEG sont .jpget .jpeg, bien que .jpe, .jfifet .jifsont également utilisées. Il est également possible que les données JPEG soient incorporées dans d'autres types de fichiers – les fichiers codés TIFF intègrent souvent une image JPEG en tant que vignette de l'image principale ; et les fichiers MP3 peuvent contenir un JPEG de la pochette dans la balise ID3v2 .

Profil de couleur

De nombreux fichiers JPEG intègrent un profil de couleur ICC ( espace colorimétrique ). Les profils de couleurs couramment utilisés incluent sRGB et Adobe RGB . Étant donné que ces espaces colorimétriques utilisent une transformation non linéaire, la plage dynamique d'un fichier JPEG 8 bits est d'environ 11 arrêts ; voir courbe gamma .

Syntaxe et structure

Une image JPEG se compose d'une séquence de segments , chacun commençant par un marqueur , chacun commençant par un octet 0xFF, suivi d'un octet indiquant de quel type de marqueur il s'agit. Certains marqueurs se composent uniquement de ces deux octets ; d'autres sont suivis de deux octets (haut puis bas), indiquant la longueur des données de charge utile spécifiques au marqueur qui suivent. (La longueur inclut les deux octets pour la longueur, mais pas les deux octets pour le marqueur.) Certains marqueurs sont suivis de données codées par entropie ; la longueur d'un tel marqueur n'inclut pas les données codées par entropie. Notez que des octets 0xFF consécutifs sont utilisés comme octets de remplissage à des fins de remplissage , bien que ce remplissage d'octets de remplissage ne doive jamais avoir lieu que pour les marqueurs immédiatement après les données de balayage codées par entropie (voir les spécifications JPEG, section B.1.1.2 et E.1.2 pour plus de détails ; spécifiquement "Dans tous les cas où des marqueurs sont ajoutés après les données compressées, des octets de remplissage 0xFF facultatifs peuvent précéder le marqueur").

Dans les données codées par entropie, après tout octet 0xFF, un octet 0x00 est inséré par l'encodeur avant l'octet suivant, de sorte qu'il ne semble pas y avoir de marqueur là où aucun n'est prévu, évitant ainsi les erreurs de cadrage. Les décodeurs doivent sauter cet octet 0x00. Cette technique, appelée bourrage d'octets (voir la section de spécification JPEG F.1.2.3), n'est appliquée qu'aux données codées par entropie, pas aux données de charge utile de marqueur. Notez cependant que les données codées par entropie ont quelques marqueurs qui leur sont propres ; en particulier les marqueurs de réinitialisation (0xD0 à 0xD7), qui sont utilisés pour isoler des morceaux indépendants de données codées par entropie pour permettre un décodage parallèle, et les encodeurs sont libres d'insérer ces marqueurs de réinitialisation à intervalles réguliers (bien que tous les encodeurs ne le fassent pas).

Marqueurs JPEG courants
Nom court Octets Charge utile Nom commentaires
DONC JE 0xFF, 0xD8 rien Début de l'image
SOF0 0xFF, 0xC0 taille variable Début de trame (DCT de base) Indique qu'il s'agit d'un JPEG de base basé sur DCT et spécifie la largeur, la hauteur, le nombre de composants et le sous-échantillonnage des composants (par exemple, 4:2:0).
SOF2 0xFF, 0xC2 taille variable Début de trame (DCT progressif) Indique qu'il s'agit d'un JPEG progressif basé sur DCT et spécifie la largeur, la hauteur, le nombre de composants et le sous-échantillonnage des composants (par exemple, 4:2:0).
DHT 0xFF, 0xC4 taille variable Définir les tables de Huffman Spécifie une ou plusieurs tables de Huffman.
DQT 0xFF, 0xDB taille variable Définir les tables de quantification Spécifie une ou plusieurs tables de quantification.
DRI 0xFF, 0xDD 4 octets Définir l'intervalle de redémarrage Spécifie l'intervalle entre les marqueurs RST n , en unités codées minimales (MCU). Ce marqueur est suivi de deux octets indiquant la taille fixe afin qu'il puisse être traité comme n'importe quel autre segment de taille variable.
SOS 0xFF, 0xDA taille variable Début de l'analyse Commence une analyse de haut en bas de l'image. Dans les images JPEG DCT de base, il y a généralement un seul balayage. Les images JPEG DCT progressives contiennent généralement plusieurs numérisations. Ce marqueur spécifie quelle tranche de données il contiendra et est immédiatement suivi par des données codées par entropie.
RST n 0xFF, 0xD n ( n =0..7) rien Redémarrage Inséré tous les r macroblocs, où r est l'intervalle de redémarrage défini par un marqueur DRI. Non utilisé s'il n'y avait pas de marqueur DRI. Les trois bits de poids faible du code marqueur ont une valeur de 0 à 7.
APP m 0xFF, 0xE n taille variable Spécifique à l'application Par exemple, un fichier JPEG Exif utilise un marqueur APP1 pour stocker des métadonnées, disposées dans une structure étroitement basée sur TIFF .
COM 0xFF, 0xFE taille variable Commenter Contient un commentaire de texte.
EOI 0xFF, 0xD9 rien Fin de l'image

Il existe d'autres marqueurs de début d'image qui introduisent d'autres types d'encodages JPEG.

Étant donné que plusieurs fournisseurs peuvent utiliser le même type de marqueur APP n , les marqueurs spécifiques à l'application commencent souvent par un nom standard ou de fournisseur (par exemple, « Exif » ou « Adobe ») ou une autre chaîne d'identification.

À un marqueur de redémarrage, les variables prédictives de bloc à bloc sont réinitialisées et le flux binaire est synchronisé sur une limite d'octet. Les marqueurs de redémarrage fournissent des moyens de récupération après une erreur de flux binaire, telle qu'une transmission sur un réseau peu fiable ou une corruption de fichier. Etant donné que les séquences de macroblocs entre les marqueurs de redémarrage peuvent être décodées indépendamment, ces séquences peuvent être décodées en parallèle.

Exemple de codec JPEG

Bien qu'un fichier JPEG puisse être encodé de différentes manières, le plus souvent il est fait avec l'encodage JFIF. Le processus d'encodage comprend plusieurs étapes :

  1. La représentation des couleurs de l'image est converti en Y'C B C R , consistant en une luma composant (Y '), qui représente la luminosité, et deux chroma composants, (C B et C R ), représentant la couleur. Cette étape est parfois ignorée.
  2. La résolution des données de chrominance est réduite, généralement d'un facteur 2 ou 3. Cela reflète le fait que l'œil est moins sensible aux détails de couleur fins qu'aux détails de luminosité fins.
  3. L'image est divisée en blocs de 8x8 pixels, et pour chaque bloc, chacune des données Y, C B et CR subit la transformée en cosinus discrète (DCT). Une DCT est similaire à une transformée de Fourier dans le sens où elle produit une sorte de spectre de fréquences spatiales.
  4. Les amplitudes des composantes fréquentielles sont quantifiées. La vision humaine est beaucoup plus sensible aux petites variations de couleur ou de luminosité sur de grandes surfaces qu'à la force des variations de luminosité à haute fréquence. Par conséquent, les amplitudes des composantes haute fréquence sont stockées avec une précision inférieure à celle des composantes basse fréquence. Le réglage de qualité de l'encodeur (par exemple 50 ou 95 sur une échelle de 0 à 100 dans la bibliothèque de l'Independent JPEG Group) affecte dans quelle mesure la résolution de chaque composante de fréquence est réduite. Si un réglage de qualité excessivement faible est utilisé, les composants haute fréquence sont complètement supprimés.
  5. Les données résultantes pour tous les blocs 8 × 8 sont encore compressées avec un algorithme sans perte, une variante de l' encodage Huffman .

Le processus de décodage inverse ces étapes, à l'exception de la quantification car elle est irréversible. Dans le reste de cette section, les processus de codage et de décodage sont décrits plus en détail.

Codage

La plupart des options de la norme JPEG ne sont pas couramment utilisées et, comme mentionné ci-dessus, la plupart des logiciels d'image utilisent le format JFIF plus simple lors de la création d'un fichier JPEG, qui spécifie entre autres la méthode d'encodage. Voici une brève description de l'une des méthodes d'encodage les plus courantes lorsqu'elle est appliquée à une entrée qui a 24 bits par pixel (huit chacun de rouge, vert et bleu). Cette option particulière est une méthode de compression de données avec perte .

Transformation de l'espace colorimétrique

Tout d'abord, l'image doit être convertie de RVB dans un espace colorimétrique différent appelé Y′C B C R (ou, de manière informelle, YCbCr). Il a trois composantes Y', C B et C R : la composante Y' représente la luminosité d'un pixel, et les composantes C B et C R représentent la chrominance (divisée en composantes bleue et rouge). Il s'agit essentiellement du même espace colorimétrique que celui utilisé par la télévision couleur numérique ainsi que la vidéo numérique, y compris les DVD vidéo , et est similaire à la façon dont la couleur est représentée dans la vidéo PAL analogique et MAC (mais pas par NTSC analogique , qui utilise l' espace colorimétrique YIQ ). La conversion de l'espace colorimétrique Y′C B C R permet une compression plus importante sans effet significatif sur la qualité de l'image perceptive (ou une meilleure qualité de l'image perceptuelle pour la même compression). La compression est plus efficace car les informations de luminosité, qui sont plus importantes pour la qualité perceptive éventuelle de l'image, sont confinées à un seul canal. Cela correspond plus étroitement à la perception de la couleur dans le système visuel humain. La transformation des couleurs améliore également la compression par décorrélation statistique .

Une conversion particulière en Y′C B C R est spécifiée dans la norme JFIF et doit être effectuée pour que le fichier JPEG résultant ait une compatibilité maximale. Cependant, certaines implémentations JPEG en mode "qualité la plus élevée" n'appliquent pas cette étape et conservent les informations de couleur dans le modèle de couleur RVB, où l'image est stockée dans des canaux séparés pour les composants de luminosité rouge, vert et bleu. Cela entraîne une compression moins efficace et ne serait probablement pas utilisé lorsque la taille du fichier est particulièrement importante.

Sous-échantillonnage

En raison de la densité des récepteurs sensibles à la couleur et à la luminosité dans l'œil humain, les humains peuvent voir des détails beaucoup plus fins dans la luminosité d'une image (la composante Y') que dans la teinte et la saturation des couleurs d'une image (la composante Cb et composants Cr). En utilisant cette connaissance, les encodeurs peuvent être conçus pour compresser les images plus efficacement.

La transformation en la Y'C B C R modèle de couleur permet à la prochaine étape habituelle, qui est de réduire la résolution spatiale des composantes Cb et Cr (appelée « sous - échantillonnage » ou « chroma sous - échantillonnage »). Les ratios auxquels le sous-échantillonnage est généralement effectué pour les images JPEG sont 4:4:4 (pas de sous-échantillonnage), 4:2:2 (réduction d'un facteur 2 dans le sens horizontal) ou (le plus souvent) 4:2 : 0 (réduction d'un facteur 2 dans les deux sens horizontal et vertical). Pour le reste du processus de compression, Y', Cb et Cr sont traités séparément et de manière très similaire.

Fractionnement de blocs

Après sous - échantillonnage , chaque canal doit être divisé en blocs de 8×8. En fonction du sous-échantillonnage de chrominance, cela donne des blocs d'unités codées minimales (MCU) de taille 8 × 8 (4:4:4 - pas de sous-échantillonnage), 16 × 8 (4:2:2) ou le plus souvent 16 × 16 (4 : 2:0). En compression vidéo, les MCU sont appelés macroblocs .

Si les données d'un canal ne représentent pas un nombre entier de blocs, le codeur doit alors remplir la zone restante des blocs incomplets avec une certaine forme de données factices. Le remplissage des bords avec une couleur fixe (par exemple, le noir) peut créer des artefacts de sonnerie le long de la partie visible de la bordure ; la répétition des pixels de bord est une technique courante qui réduit (mais n'élimine pas nécessairement) de tels artefacts, et des techniques de remplissage de bordure plus sophistiquées peuvent également être appliquées.

Transformée en cosinus discrète

La sous-image 8 × 8 affichée en niveaux de gris 8 bits

Ensuite, chaque bloc 8 × 8 de chaque composant (Y, Cb, Cr) est converti en une représentation dans le domaine fréquentiel , en utilisant une transformée en cosinus discrète de type II normalisée et bidimensionnelle (DCT), voir la citation 1 dans la transformée en cosinus discrète . La DCT est parfois appelée "DCT de type II" dans le contexte d'une famille de transformations comme dans la transformée en cosinus discrète , et l'inverse correspondant (IDCT) est désigné par "DCT de type III".

À titre d'exemple, une telle sous-image 8 × 8 8 bits pourrait être :

Avant de calculer le DCT du bloc 8x8, ses valeurs sont décalées d'une plage positive à une centrée sur zéro. Pour une image 8 bits, chaque entrée du bloc d'origine se situe dans la plage . Le point médian de la plage (dans ce cas, la valeur 128) est soustrait de chaque entrée pour produire une plage de données centrée sur zéro, de sorte que la plage modifiée est . Cette étape réduit les exigences de plage dynamique dans l'étape de traitement DCT qui suit.

Cette étape donne les valeurs suivantes :

Le DCT transforme un bloc 8 × 8 de valeurs d'entrée en une combinaison linéaire de ces 64 modèles. Les modèles sont appelés fonctions de base DCT bidimensionnelles et les valeurs de sortie sont appelées coefficients de transformation . L'index horizontal est et l'index vertical est .

L'étape suivante consiste à prendre le DCT bidimensionnel, qui est donné par :

  • est la fréquence spatiale horizontale , pour les entiers .
  • est la fréquence spatiale verticale, pour les entiers .
  • est un facteur d'échelle de normalisation pour rendre la transformation orthonormée
  • est la valeur du pixel aux coordonnées
  • est le coefficient DCT aux coordonnées

Si nous effectuons cette transformation sur notre matrice ci-dessus, nous obtenons ce qui suit (arrondi aux deux chiffres les plus proches au-delà de la virgule) :

Notez l'entrée dans le coin supérieur gauche avec la magnitude plutôt grande. Il s'agit du coefficient DC (également appelé composante constante), qui définit la teinte de base pour l'ensemble du bloc. Les 63 coefficients restants sont les coefficients AC (également appelés composants alternatifs). L'avantage du DCT est sa tendance à agréger la majeure partie du signal dans un coin du résultat, comme on peut le voir ci-dessus. L'étape de quantification à suivre accentue cet effet tout en réduisant simultanément la taille globale des coefficients DCT, résultant en un signal facile à compresser efficacement dans l'étage d'entropie.

Le DCT augmente temporairement la profondeur de bits des données, car les coefficients DCT d'une image à 8 bits/composants prennent jusqu'à 11 bits ou plus (selon la fidélité du calcul DCT) à stocker. Cela peut forcer le codec à utiliser temporairement des nombres de 16 bits pour conserver ces coefficients, doublant ainsi la taille de la représentation de l'image à ce stade ; ces valeurs sont généralement ramenées à des valeurs de 8 bits par l'étape de quantification. L'augmentation temporaire de la taille à ce stade n'est pas un problème de performances pour la plupart des implémentations JPEG, car généralement, seule une très petite partie de l'image est stockée sous forme DCT complète à un moment donné pendant le processus de codage ou de décodage de l'image.

Quantification

L'œil humain est doué pour voir de petites différences de luminosité sur une zone relativement grande, mais pas si bon pour distinguer la force exacte d'une variation de luminosité à haute fréquence. Cela permet de réduire considérablement la quantité d'informations dans les composants à haute fréquence. Cela se fait en divisant simplement chaque composante dans le domaine fréquentiel par une constante pour cette composante, puis en arrondissant à l'entier le plus proche. Cette opération d'arrondi est la seule opération avec perte dans l'ensemble du processus (autre que le sous-échantillonnage de chrominance) si le calcul DCT est effectué avec une précision suffisamment élevée. En conséquence, c'est typiquement le cas que la plupart des composantes de fréquence plus élevée sont arrondies à zéro, et beaucoup des autres deviennent de petits nombres positifs ou négatifs, qui prennent beaucoup moins de bits à représenter.

Les éléments de la matrice de quantification contrôlent le taux de compression, des valeurs plus élevées produisant une compression plus importante. Une matrice de quantification typique (pour une qualité de 50 % telle que spécifiée dans la norme JPEG originale) est la suivante :

Les coefficients DCT quantifiés sont calculés avec

où sont les coefficients DCT non quantifiés ; est la matrice de quantification ci-dessus ; et sont les coefficients DCT quantifiés.

L'utilisation de cette matrice de quantification avec la matrice de coefficients DCT ci-dessus donne :

A gauche : une image finale est construite à partir d'une série de fonctions de base. A droite : chacune des fonctions de base DCT qui composent l'image, et le coefficient de pondération correspondant. Milieu : la fonction de base, après multiplication par le coefficient : cette composante est ajoutée à l'image finale. Pour plus de clarté, le macrobloc 8×8 dans cet exemple est agrandi par 10x à l'aide d'une interpolation bilinéaire.

Par exemple, en utilisant -415 (le coefficient DC) et en arrondissant à l'entier le plus proche

Notez que la plupart des éléments de fréquence plus élevée du sous-bloc (c'est-à-dire ceux avec une fréquence spatiale x ou y supérieure à 4) sont quantifiés en valeurs nulles.

Codage entropique

Ordre en zigzag des composants d'image JPEG

Le codage entropique est une forme spéciale de compression de données sans perte . Il s'agit d'organiser les composants de l'image dans un ordre en « zigzag » en utilisant un algorithme de codage de longueur d'exécution (RLE) qui regroupe des fréquences similaires, en insérant des zéros de codage de longueur, puis en utilisant le codage de Huffman sur ce qui reste.

La norme JPEG permet également, mais n'exige pas, que les décodeurs prennent en charge l'utilisation du codage arithmétique, qui est mathématiquement supérieur au codage Huffman. Cependant, cette fonctionnalité a rarement été utilisée, car elle était historiquement couverte par des brevets nécessitant des licences payantes et parce qu'elle est plus lente à coder et à décoder que le codage Huffman. Le codage arithmétique rend généralement les fichiers environ 5 à 7 % plus petits.

Le coefficient DC quantifié précédent est utilisé pour prédire le coefficient DC quantifié actuel. La différence entre les deux est codée plutôt que la valeur réelle. Le codage des 63 coefficients AC quantifiés n'utilise pas une telle différenciation de prédiction.

La séquence en zigzag des coefficients quantifiés ci-dessus est illustrée ci-dessous. (Le format indiqué est juste pour faciliter la compréhension/la visualisation.)

−26
-3 0
-3 -2 -6
2 -4 1 -3
1 1 5 1 2
-1 1 -1 2 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

Si le i- ème bloc est représenté par et les positions dans chaque bloc sont représentées par , où et , alors tout coefficient dans l'image DCT peut être représenté par . Ainsi, dans le schéma ci-dessus, l'ordre de codage des pixels (pour le i- ème bloc) est , , , , , , , et ainsi de suite.

Processus d'encodage et de décodage JPEG séquentiels de base

Ce mode de codage est appelé codage séquentiel de base . Le JPEG de base prend également en charge l' encodage progressif . Alors que le codage séquentiel code les coefficients d'un seul bloc à la fois (en zigzag), le codage progressif code un lot de coefficients positionnés de manière similaire de tous les blocs en une seule fois (appelé balayage ), suivi du prochain lot de coefficients de tous les blocs , etc. Par exemple, si l'image est divisée en N blocs 8x8 , alors un codage progressif à 3 balayages code la composante continue pour tous les blocs (c'est-à-dire pour tous , au premier balayage). Ceci est suivi par le deuxième balayage, qui encode (en supposant quatre autres composants) en , toujours en zigzag. À ce stade, la séquence de coefficients est : ), suivie des coefficients restants de tous les blocs du dernier balayage.

Une fois que tous les coefficients de position similaire ont été codés, la prochaine position à coder est celle qui se produit ensuite dans le parcours en zigzag comme indiqué dans la figure ci-dessus. Il a été constaté que l' encodage JPEG progressif de base donne généralement une meilleure compression par rapport au JPEG séquentiel de base en raison de la possibilité d'utiliser différentes tables de Huffman (voir ci-dessous) adaptées à différentes fréquences sur chaque "scan" ou "passe" (qui inclut des coefficients positionnés), bien que la différence ne soit pas trop importante.

Dans la suite de l'article, on suppose que le motif de coefficient généré est dû au mode séquentiel.

Afin de coder le modèle de coefficient généré ci-dessus, JPEG utilise le codage Huffman. La norme JPEG fournit des tables de Huffman à usage général, bien que les encodeurs puissent également choisir de générer dynamiquement des tables de Huffman optimisées pour les distributions de fréquence réelles dans les images en cours de codage.

Le processus de codage des données quantifiées en zigzag commence par un codage de longueur d'exécution, où :

  • x est le coefficient AC quantifié non nul.
  • RUNLENGTH est le nombre de zéros qui précèdent ce coefficient AC différent de zéro.
  • SIZE est le nombre de bits requis pour représenter x .
  • AMPLITUDE est la représentation binaire de x .

Le codage de longueur de séquence fonctionne en examinant chaque coefficient AC non nul x et en déterminant combien de zéros sont venus avant le coefficient AC précédent. Avec ces informations, deux symboles sont créés :

Symbole 1 Symbole 2
(LONGUEUR, TAILLE) (AMPLITUDE)

Les deux RUNLENGTH et SIZE reste sur le même octet, ce qui signifie que seulement chacun contient quatre bits d'information. Les bits supérieurs traitent du nombre de zéros, tandis que les bits inférieurs indiquent le nombre de bits nécessaires pour coder la valeur de x .

Cela a pour implication immédiate que le symbole 1 ne peut stocker que des informations concernant les 15 premiers zéros précédant le coefficient AC non nul. Cependant, JPEG définit deux mots de code Huffman spéciaux. L'un sert à terminer prématurément la séquence lorsque les coefficients restants sont nuls (appelés « End-of-Block » ou « EOB »), et un autre lorsque la série de zéros dépasse 15 avant d'atteindre un coefficient AC non nul. Dans un tel cas où 16 zéros sont rencontrés avant un coefficient AC non nul donné, le symbole 1 est codé sous la forme (15, 0)(0).

Le processus global se poursuit jusqu'à ce que "EOB" - noté (0, 0) - soit atteint.

Dans cet esprit, la séquence de plus tôt devient :

  • (0, 2)(-3);(1, 2)(-3);(0, 1)(-2);(0, 2)(-6);(0, 1)(2);( 0, 1)(-4);(0, 1)(1);(0, 2)(-3);(0, 1)(1);(0, 1(1));
  • (0, 2)(5);(0, 1)(1);(0, 1)(2);(0, 1)(-1);(0, 1)(1);(0, 1 )(-1);(0, 1)(2);(5, 1)(-1);(0, 1)(-1);(0, 0);

(La première valeur de la matrice, −26, est le coefficient DC ; il n'est pas codé de la même manière. Voir ci-dessus.)

À partir de là, des calculs de fréquence sont effectués sur la base des occurrences des coefficients. Dans notre exemple de bloc, la plupart des coefficients quantifiés sont de petits nombres qui ne sont pas immédiatement précédés d'un coefficient nul. Ces cas plus fréquents seront représentés par des mots de code plus courts.

Taux de compression et artefacts

Cette image montre les pixels qui sont différents entre une image non compressée et la même image JPEG compressée avec un paramètre de qualité de 50. Plus sombre signifie une plus grande différence. Notez en particulier les changements se produisant près des arêtes vives et ayant une forme de bloc.
L'image originale
Les carrés compressés de 8 × 8 sont visibles sur l'image agrandie, ainsi que d'autres artefacts visuels de la compression avec perte .

Le taux de compression résultant peut être varié selon les besoins en étant plus ou moins agressif dans les diviseurs utilisés dans la phase de quantification. Une compression de dix à un donne généralement une image qui ne peut pas être distinguée à l'œil nu de l'original. Un taux de compression de 100:1 est généralement possible, mais semblera nettement artefacté par rapport à l'original. Le niveau de compression approprié dépend de l'utilisation qui sera faite de l'image.

Image externe
icône d'image Illustration de l'activité de bord

Ceux qui utilisent le World Wide Web peuvent être familiers avec les irrégularités connues sous le nom d'artefacts de compression qui apparaissent dans les images JPEG, qui peuvent prendre la forme de bruit autour des bords contrastés (en particulier les courbes et les coins) ou les images "en blocs". Celles-ci sont dues à l'étape de quantification de l'algorithme JPEG. Ils sont particulièrement visibles autour des angles vifs entre des couleurs contrastées (le texte en est un bon exemple, car il contient de nombreux angles de ce type). Les artefacts analogues dans la vidéo MPEG sont appelés bruit de moustique , car l'« agitation des bords » qui en résulte et les points parasites, qui changent avec le temps, ressemblent à des moustiques grouillant autour de l'objet.

Ces artefacts peuvent être réduits en choisissant un niveau de compression inférieur ; ils peuvent être complètement évités en enregistrant une image à l'aide d'un format de fichier sans perte, bien que cela entraîne une taille de fichier plus importante. Les images créées avec des programmes de lancer de rayons ont des formes en blocs visibles sur le terrain. Certains artefacts de compression de faible intensité peuvent être acceptables lors de la simple visualisation des images, mais peuvent être accentués si l'image est ensuite traitée, ce qui entraîne généralement une qualité inacceptable. Considérez l'exemple ci-dessous, démontrant l'effet de la compression avec perte sur une étape de traitement de détection de contour .

Image Compression sans perte La compression avec perte
Original Lossless-circle.png Lossy-circle.jpg
Traité par le
détecteur de bord Canny
Lossless-circle-canny.png Lossy-circle-canny.png

Certains programmes permettent à l'utilisateur de faire varier la quantité de compression des blocs individuels. Une compression plus forte est appliquée aux zones de l'image qui présentent moins d'artefacts. De cette façon, il est possible de réduire manuellement la taille du fichier JPEG avec moins de perte de qualité.

Étant donné que l'étape de quantification entraîne toujours une perte d'informations, la norme JPEG est toujours un codec de compression avec perte. (Des informations sont perdues à la fois lors de la quantification et de l'arrondi des nombres à virgule flottante.) Même si la matrice de quantification est une matrice de uns , des informations seront toujours perdues lors de l'étape d'arrondi.

Décodage

Le décodage pour afficher l'image consiste à faire tout ce qui précède à l'envers.

Prendre la matrice de coefficients DCT (après avoir rajouté la différence du coefficient DC)

et en prenant le produit entrée pour entrée avec la matrice de quantification ci-dessus, on obtient

qui ressemble beaucoup à la matrice de coefficients DCT d'origine pour la partie supérieure gauche.

L'étape suivante consiste à prendre le DCT inverse bidimensionnel (un DCT 2D de type III), qui est donné par :

  • est la ligne de pixels, pour les entiers .
  • est la colonne de pixels, pour les entiers .
  • est défini comme ci-dessus, pour les entiers .
  • est le coefficient approximatif reconstruit aux coordonnées
  • est la valeur du pixel reconstruit aux coordonnées

Arrondir la sortie à des valeurs entières (puisque l'original avait des valeurs entières) donne une image avec des valeurs (toujours décalée de 128)

De légères différences sont perceptibles entre l'image originale (en haut) et l'image décompressée (en bas), qui est plus facilement visible dans le coin inférieur gauche.

et en ajoutant 128 à chaque entrée

C'est la sous-image décompressée. En général, le processus de décompression peut produire des valeurs en dehors de la plage d'entrée d'origine de . Si cela se produit, le décodeur doit écrêter les valeurs de sortie afin de les maintenir dans cette plage pour éviter tout débordement lors du stockage de l'image décompressée avec la profondeur de bits d'origine.

La sous-image décompressée peut être comparée à la sous-image d'origine (voir également les images à droite) en prenant la différence (original - non compressé) dans les valeurs d'erreur suivantes :

avec une erreur absolue moyenne d'environ 5 valeurs par pixel (c'est-à-dire ).

L'erreur est plus visible dans le coin inférieur gauche où le pixel en bas à gauche devient plus sombre que le pixel à sa droite immédiate.

Précision requise

La conformité du codage et du décodage, et donc les exigences de précision, sont spécifiées dans l'ISO/CEI 10918-2, c'est-à-dire la partie 2 de la spécification JPEG. Ces spécifications exigent, par exemple, que les coefficients DCT (transformés vers l'avant) formés à partir d'une image d'une implémentation JPEG en cours de test aient une erreur qui se situe dans une précision d'un seau de quantification par rapport aux coefficients de référence. À cette fin, l'ISO/CEI 10918-2 fournit des flux de test ainsi que les coefficients DCT auxquels le flux codé doit décoder.

De même, ISO/IEC 10918-2 définit les précisions du codeur en termes d'erreur maximale admissible dans le domaine DCT. Ceci est dans la mesure où de nombreuses autres normes ne définissent que la conformité du décodeur et n'exigent que du codeur de générer un flux codé syntaxiquement correct.

Les images de test trouvées dans ISO/IEC 10918-2 sont des modèles (pseudo-) aléatoires, pour vérifier les pires cas. Comme ISO/IEC 10918-1 ne définit pas les espaces colorimétriques et n'inclut pas non plus la transformation YCbCr en RVB de JFIF (maintenant ISO/IEC 10918-5), la précision de cette dernière transformation ne peut pas être testée par ISO/IEC 10918-2.

Afin de prendre en charge une précision de 8 bits par sortie de composant de pixel, la déquantification et les transformations DCT inverses sont généralement mises en œuvre avec une précision d'au moins 14 bits dans des décodeurs optimisés.

Effets de la compression JPEG

Compression répétée d'une image (options de qualité aléatoire)

Les artefacts de compression JPEG se fondent bien dans les photographies avec des textures détaillées non uniformes, permettant des taux de compression plus élevés. Remarquez comment un taux de compression plus élevé affecte d'abord les textures à haute fréquence dans le coin supérieur gauche de l'image et comment les lignes contrastées deviennent plus floues. Le taux de compression très élevé affecte gravement la qualité de l'image, bien que les couleurs globales et la forme de l'image soient toujours reconnaissables. Cependant, la précision des couleurs souffre moins (pour un œil humain) que la précision des contours (basée sur la luminance). Cela justifie le fait que les images doivent d'abord être transformées dans un modèle couleur séparant la luminance de l'information chromatique, avant de sous-échantillonner les plans chromatiques (qui peuvent également utiliser une quantification de moindre qualité) afin de préserver la précision du plan de luminance avec plus de bits d'information .

Exemples de photographies

Impact visuel d'une compression jpeg dans Photoshop sur une image de 4480x4480 pixels

Pour information, l'image bitmap RVB 24 bits non compressée ci-dessous (73 242 pixels) nécessiterait 219 726 octets (à l'exclusion de tous les autres en-têtes d'informations). Les tailles de fichiers indiquées ci-dessous incluent les en-têtes d'informations JPEG internes et certaines métadonnées . Pour des images de la plus haute qualité (Q=100), environ 8,25 bits par pixel de couleur sont nécessaires. Sur les images en niveaux de gris, un minimum de 6,5 bits par pixel est suffisant (une information couleur de qualité Q=100 comparable nécessite environ 25 % de bits encodés en plus). L'image de la plus haute qualité ci-dessous (Q=100) est codée à neuf bits par pixel de couleur, l'image de qualité moyenne (Q=25) utilise un bit par pixel de couleur. Pour la plupart des applications, le facteur de qualité ne doit pas descendre en dessous de 0,75 bit par pixel (Q=12,5), comme le montre l'image de faible qualité. L'image à la qualité la plus basse n'utilise que 0,13 bit par pixel et affiche des couleurs très médiocres. Ceci est utile lorsque l'image sera affichée dans une taille considérablement réduite. Une méthode pour créer de meilleures matrices de quantification pour une qualité d'image donnée en utilisant PSNR au lieu du facteur Q est décrite dans Minguillón & Pujol (2001).

Remarque : les images ci-dessus ne sont pas des images de test IEEE / CCIR / EBU  et les paramètres de l'encodeur ne sont pas spécifiés ou disponibles.
Image Qualité Taille (octets) Ratio de compression Commenter
exemple JPEG JPG RIP 100.jpg La plus haute qualité (Q = 100) 81 447 2,7:1 Artéfacts extrêmement mineurs
exemple JPEG JPG RIP 050.jpg Haute qualité (Q = 50) 14 679 15:1 Signes initiaux d'artefacts de sous-image
exemple JPEG JPG RIP 025.jpg Qualité moyenne (Q = 25) 9 407 23:1 Artéfacts plus forts ; perte d'informations à haute fréquence
exemple JPEG JPG RIP 010.jpg Faible qualité (Q = 10) 4 787 46:1 Une perte de haute fréquence sévère conduit à des artefacts évidents sur les limites des sous-images ("macroblocage")
exemple JPEG JPG RIP 001.jpg Qualité la plus basse (Q = 1) 1 523 144:1 Perte extrême de couleur et de détail ; les feuilles sont presque méconnaissables.

La photo de qualité moyenne n'utilise que 4,3 % de l'espace de stockage requis pour l'image non compressée, mais présente peu de pertes de détails ou d'artefacts visibles. Cependant, une fois un certain seuil de compression dépassé, les images compressées présentent des défauts de plus en plus visibles. Voir l'article sur la théorie taux-distorsion pour une explication mathématique de cet effet de seuil. Une limitation particulière de JPEG à cet égard est sa structure de transformation de bloc 8x8 non superposée. Les conceptions plus modernes telles que JPEG 2000 et JPEG XR présentent une dégradation plus progressive de la qualité à mesure que l'utilisation des bits diminue - en utilisant des transformations avec une plus grande étendue spatiale pour les coefficients de fréquence inférieurs et en utilisant des fonctions de base de transformation qui se chevauchent.

Compression supplémentaire sans perte

De 2004 à 2008, de nouvelles recherches ont émergé sur les moyens de compresser davantage les données contenues dans les images JPEG sans modifier l'image représentée. Cela a des applications dans des scénarios où l'image originale n'est disponible qu'au format JPEG et sa taille doit être réduite pour l'archivage ou la transmission. Les outils de compression standard à usage général ne peuvent pas compresser de manière significative les fichiers JPEG.

En règle générale, ces schémas tirent parti des améliorations apportées au schéma naïf de codage des coefficients DCT, qui ne prend pas en compte :

  • Corrélations entre les grandeurs des coefficients adjacents dans le même bloc ;
  • Corrélations entre les grandeurs du même coefficient dans des blocs adjacents ;
  • Corrélations entre les grandeurs du même coefficient/bloc dans différents canaux ;
  • Les coefficients DC lorsqu'ils sont pris ensemble ressemblent à une version à échelle réduite de l'image originale multipliée par un facteur d'échelle. Des schémas bien connus de codage sans perte d'images à tons continus peuvent être appliqués, obtenant une compression quelque peu meilleure que le DPCM codé Huffman utilisé dans JPEG.

Certaines options standard mais rarement utilisées existent déjà en JPEG pour améliorer l'efficacité du codage des coefficients DCT : l'option de codage arithmétique et l'option de codage progressif (qui produit des débits binaires inférieurs car les valeurs de chaque coefficient sont codées indépendamment et chaque coefficient a un Distribution). Les méthodes modernes ont amélioré ces techniques en réordonnant les coefficients pour regrouper les coefficients de plus grande amplitude ; utiliser des coefficients et des blocs adjacents pour prédire de nouvelles valeurs de coefficient ; diviser des blocs ou des coefficients parmi un petit nombre de modèles codés indépendamment sur la base de leurs statistiques et de leurs valeurs adjacentes ; et plus récemment, en décodant des blocs, en prédisant les blocs suivants dans le domaine spatial, puis en les codant pour générer des prédictions pour les coefficients DCT.

En règle générale, ces méthodes peuvent compresser les fichiers JPEG existants entre 15 et 25 %, et pour les fichiers JPEG compressés avec des paramètres de faible qualité, peuvent produire des améliorations allant jusqu'à 65 %.

Un outil disponible gratuitement appelé packJPG est basé sur l'article de 2007 "Improved Redundancy Reduction for JPEG Files". Un article de 2016 intitulé "JPEG sous stéroïdes" utilisant ISO libjpeg montre que les techniques actuelles, avec perte ou non, peuvent rendre le JPEG presque aussi efficace que le JPEG XR ; mozjpeg utilise des techniques similaires. JPEG XL est un nouveau format de fichier qui peut ré-encoder sans perte un JPEG avec une rétro-conversion efficace en JPEG.

Formats dérivés

Pour la 3D stéréoscopique

JPEG Stéréoscopique

Un exemple de fichier .JPS stéréoscopique

JPEG Stereoscopic (JPS, extension .jps) est un format basé sur JPEG pour les images stéréoscopiques . Il a une gamme de configurations stockées dans le champ marqueur JPEG APP3, mais contient généralement une image de double largeur, représentant deux images de taille identique dans les yeux croisés (c'est-à-dire le cadre gauche sur la moitié droite de l'image et vice versa) disposition à côté. Ce format de fichier peut être visualisé au format JPEG sans aucun logiciel spécial, ou peut être traité pour le rendu dans d'autres modes.

Format JPEG multi-images

JPEG Multi-Picture Format (MPO, extension .mpo) est un format basé sur JPEG pour stocker plusieurs images dans un seul fichier. Il contient au moins deux fichiers JPEG concaténés. Il définit également un segment marqueur JPEG APP2 pour la description de l'image. Divers appareils l'utilisent pour stocker des images 3D, tels que Fujifilm FinePix Real 3D W1 , HTC Evo 3D , JVC GY-HMZ1U AVCHD/MVC extension caméscope, Nintendo 3DS , Sony PlayStation 3 , Sony PlayStation Vita , Panasonic Lumix DMC-TZ20 , DMC- TZ30 , DMC-TZ60 , DMC-TS4 (FT4) et Sony DSC-HX7V. D'autres appareils l'utilisent pour stocker des « images d'aperçu » qui peuvent être affichées sur un téléviseur.

Au cours des dernières années, en raison de l'utilisation croissante des images stéréoscopiques, de nombreux efforts ont été consacrés par la communauté scientifique pour développer des algorithmes de compression d'images stéréoscopiques.

JPEG XT

JPEG XT (ISO/IEC 18477) a été publié en juin 2015 ; il étend le format JPEG de base avec la prise en charge de profondeurs de bits entières plus élevées (jusqu'à 16 bits), d'imagerie à plage dynamique élevée et de codage à virgule flottante, de codage sans perte et de codage de canal alpha. Les extensions sont rétrocompatibles avec le format de fichier de base JPEG/JFIF et l'image compressée avec perte de 8 bits. JPEG XT utilise un format de fichier extensible basé sur JFIF. Les couches d'extension sont utilisées pour modifier la couche de base JPEG 8 bits et restaurer l'image haute résolution. Le logiciel existant est compatible avec l'avenir et peut lire le flux binaire JPEG XT, bien qu'il ne décode que la couche de base 8 bits.

Normes JPEG incompatibles

Le Joint Photography Experts Group est également responsable de certains autres formats portant le nom JPEG, notamment JPEG 2000 , JPEG XR et JPEG XS .

JPEG XL

JPEG XL est un autre format avec une meilleure efficacité de compression et des fonctionnalités plus modernes par rapport au JPEG. Il est conçu pour dépasser les performances de compression d'images fixes montrées par HEVC HM, Daala et WebP , et contrairement aux efforts précédents visant à remplacer JPEG, pour fournir une option de transport et de stockage de recompression plus efficace et sans perte pour les images JPEG traditionnelles. Le format n'est pas directement compatible avec les décodeurs JPEG : une étape de transcodage doit être effectuée pour restituer le bitstream JPEG traditionnel.

Implémentations

Une implémentation très importante d'un codec JPEG était la bibliothèque de programmation gratuite libjpeg du groupe Independent JPEG. Il a été publié pour la première fois en 1991 et a été la clé du succès de la norme. Les versions récentes introduisent des extensions propriétaires qui rompent la compatibilité ABI avec les versions précédentes . Dans de nombreux projets logiciels importants, libjpeg a été remplacé par libjpeg-turbo , qui offre des performances supérieures, une compatibilité SIMD et une rétrocompatibilité avec les versions originales de libjpeg.

En mars 2017, Google a publié le projet open source Guetzli , qui compense un temps d'encodage beaucoup plus long pour une taille de fichier plus petite (similaire à ce que Zopfli fait pour PNG et d'autres formats de données sans perte).

L'ISO/IEC Joint Photography Experts Group maintient une implémentation logicielle de référence qui peut coder à la fois les extensions JPEG de base (ISO/IEC 10918-1 et 18477-1) et JPEG XT (ISO/IEC 18477 Parties 2 et 6-9), ainsi que JPEG-LS (ISO/IEC 14495).

Voir également

Les références

Liens externes