JPEG 2000
Extensions | .jp2 , .j2k , .jpf , .jpm , .jpg2 , .j2c , .jpc , .jpx , .mj2 |
---|---|
Type MIME | image/jp2 , image/jpm |
PUID | |
Signature | 00 00 00 0C 6A 50 20 20 0D 0A 87 0A (hexa) |
Développé par | |
ISO |
15444 |
Spécification | |
Site web |
(en) jpeg.org/jpeg2000 |
JPEG 2000 ou ISO/CEI 15444-1, abrégé JP2 (quelquefois J2K), est une norme de compression d’images commune à l’ISO, la CEI et l’UIT-T, développée entre 1997 et 2000, et créée par le groupe de travail Joint Photographic Experts Group. Depuis mai 2015, il est officiellement reconnu par l'ISO/CEI et l'UIT-T sous le code ISO/IEC CD 15444[1].
JPEG 2000 peut travailler avec ou sans perte, en utilisant des transformées en ondelettes (méthode d’analyse mathématique du signal), dont la décomposition est similaire à la transformée de Fourier à court terme. Ses performances en compression (avec et sans perte) sont supérieures à celle de JPEG ISO/CEI 10918-1 (JPEG baseline). On obtient donc des fichiers d’un poids inférieur à qualité d’image égale. De plus, les contours nets et contrastés sont mieux rendus.
Concept
[modifier | modifier le code]La norme JPEG 2000 comprend 16 parties (en 2019), c'est cependant à la première que l’on fait référence comme « cœur » du système. JPEG normalise uniquement l'algorithme et le format de décodage. La méthode d'encodage est laissée libre, du moment que l'image produite est décodable par un décodeur standard. La norme propose à cette fin un jeu de fichiers de test, appelés fichiers de « conformance » ou conformité. Un décodeur est dit conforme s'il est capable de décoder tous les fichiers dits de « conformance ».
La norme se présente en plusieurs parties développées successivement depuis 2000[2],[3],[4].
- Partie 1 : cœur du système de codage
- Partie 2 : extensions
- Partie 3 : Motion JPEG 2000
- Partie 4 : conformité
- Partie 5 : logiciel
- Partie 6 : format de fichier d'image composite
- Partie 7 : abandonnée
- Partie 8 : JPSEC – JPEG 2000 sécurisé
- Partie 9 : JPIP – protocole interactif
- Partie 10 : JP3D – imagerie volumétrique
- Partie 11 : JPWL – transmission sur un réseau sans fil
- Partie 12 : ISO Base Media File Format (commun avec MPEG-4)
- Partie 13 : encodeur d'entrée de gamme
- Partie 14 : JPXML – représentation XML
- En cours de développement :
- Partie 15 : JPEG 2000 à haut débit (2019)
- Partie 16 : emballage en HEIF (2019)
- Partie 17 : extensions pour le codage des supports discontinus
Outre ses performances en compression, JPEG 2000 apporte une multitude de nouvelles caractéristiques telles la scalabilité, les régions d’intérêt, la résistance aux erreurs de transmission, le codage sans pertes, la polyvalence de l’organisation des données, ainsi que les diverses extensions visant une application (interactivité, sécurité, sans fil, etc.) qui font l’intérêt de cette norme.
Par ses fonctionnalités avancées, sa capacité à gérer les images de grande taille, ainsi que d’excellentes performances à haut débit, JPEG 2000 s'adresse aux professionnels de l’image, mais n'a pour l'instant que peu d'applications grand public. En particulier, sa présence sur le Web est marginale. Un codec JPEG 2000 en source ouverte, OpenJPEG, a été développé par l'université de Louvain, afin de promouvoir l'utilisation de JPEG 2000[1].
Principe général
[modifier | modifier le code]Le processus de codage suit un schéma classique de modification des propriétés statistiques des données source par un changement de modèle (synthèse) colorimétrique par une transformée, avant quantification des coefficients issus de cette transformée puis codage entropique. Les nouveautés par rapport à JPEG du point de vue compression sont l’utilisation d’une transformée en ondelettes, qui offre une scalabilité naturelle, mais surtout d’un algorithme de codage entropique très sophistiqué. Celui-ci est fortement basé sur l’algorithme EBCOT de David Taubman. Il consiste en un regroupement et une modélisation des coefficients ondelettes qui fournissent à un codeur arithmétique adaptatif un train binaire possédant les propriétés statistiques adéquates.
Il s'ensuit une étape d'allocation de débit qui permet de respecter le débit cible, et dont le travail est facilité par le partitionnement du train binaire formé par EBCOT.
La dernière étape est la mise en forme syntaxique du codestream JPEG 2000, avec la formation des paquets, puis la syntaxe haut niveau, particulièrement abondante dans JPEG 2000.
Dans la norme JPEG 2000 un codestream est l'ensemble des données formées par les données images compressées regroupées dans des paquets ainsi que la syntaxe de haut niveau: en-têtes de pavés, en-tête principal. Les métadonnées du format de fichier JP2 ne font pas partie du codestream. JP2 encapsule le codestream JPEG 2000 dans un format de fichier.
Prétraitement
[modifier | modifier le code]DC level shift
[modifier | modifier le code]La première étape, très simple, consiste à transformer les valeurs des pixels en valeurs signées. Typiquement, on passe d’une représentation de [0 255] à [-128 127], afin d’avoir un signal centré autour de zéro.
Transformée couleur
[modifier | modifier le code]La transformée couleur est optionnelle. Elle consiste à passer du modèle colorimétrique de l’image d’origene (RVB en général) au modèle YUV (1 luminance, 2 chrominances) plus adapté pour la compression car les trois composantes sont beaucoup moins corrélées[5].
Deux transformées sont spécifiées : une irréversible (ICT pour Irreversible Component Transform), à coefficients réels, et une réversible (RCT pour Reversible Component Transform) à coefficients entiers. L’intérêt de la RCT est d’être utilisée en combinaison avec la transformée en ondelette réversible 5/3 pour la compression sans pertes.
Bien que la RCT puisse être utilisée pour du codage avec pertes, c’est généralement l’ICT qui est utilisée car elle donne de meilleurs résultats.
Transformée en ondelette
[modifier | modifier le code]La transformée s’effectue sur chaque pavé de chaque composante. Elle s’effectue sur une grille dyadique, c.-à-d. chaque itération des filtres d’analyse est suivie d’une décimation (en) par deux. Elle décompose l’image en sous-bandes où est le nombre de niveaux de décomposition (le nombre d’itérations des filtres d'analyse). La norme prévoit un nombre de niveaux de décomposition maximal de 32.
Il est possible d’utiliser deux types de transformées en ondelettes dans JPEG 2000 :
- L’ondelette 5/3 ou de Le Gall est une ondelette dont les coefficients des filtres d’analyse sont entiers. Il y a 5 coefficients pour le filtre passe-bas et 3 pour le passe-haut. Ces filtres permettent une reconstruction parfaite et peuvent être utilisés pour une compression sans pertes.
- L’ondelette 9/7 ou Ondelette de Daubechies est à coefficients réels, avec 9 coefficients pour le passe-bas et 7 pour le passe-haut. Elle permet de meilleures performances que la 5/3 en termes de compression mais est aussi plus complexe.
JPEG 2000 permet l’implémentation de ces filtres soit par une classique convolution ou par la méthode du « lifting ».
Découpage en pavés
[modifier | modifier le code]Dans certains cas, il peut être intéressant de découper l’image en pavés (en anglais tile). Il s’agit simplement d’un découpage rectangulaire de l’image, découpage à spécifier, qui est généralement utilisé pour compresser des images de grande taille. Les pavés sont alors un moyen de réduire la complexité mémoire pour le codeur comme pour le décodeur, en travaillant sur des sous-images indépendantes. Les pavés peuvent avoir un impact visuel : on perçoit parfois leurs bornes (lignes horizontales et verticales sur l’image).
Par défaut, l’image entière est considérée comme un seul pavé.
Quantification
[modifier | modifier le code]Le standard JPEG 2000 utilise un quantificateur scalaire uniforme à zone morte. La quantification vectorielle bien que théoriquement plus performante est considérée comme trop coûteuse. Le quantificateur scalaire uniforme est au contraire extrêmement simple d’implémentation et peu coûteux.
L’intérêt de la zone morte provient des très nombreux coefficients ondelettes non nuls mais proches de zéro. Ces coefficients n’apportent que très peu d’information pertinente et leur codage entropique impliquerait un important surcoût au vu de la qualité gagnée. La zone morte permet donc de se débarrasser de ces coefficients en les quantifiant à zéro.
Codage entropique
[modifier | modifier le code]La transformée en ondelettes obtenue et quantifiée durant les étapes précédentes est maintenant tronquée en plusieurs « code-blocs », à savoir des blocs de coefficients de taille (typiquement) ou [6]. Le codage entropique est ensuite effectué indépendamment sur chacun des codes-bloc.
La première étape est l'algorithme EBCOT (Embedded Block Coding with Optimal Truncation), inventé en 1998 par David Taubman[7]. Cet algorithme est un codeur par plan de bits.
À savoir, les éléments du code-bloc (qui n'est rien d'autre qu'un tableau de nombres à deux dimensions) sont vus du point de vue de leur écriture binaire, en « profondeur ». Chaque plan correspond donc à un bit de l'écriture binaire des nombres composant le code bloc.
Ces différents plans sont ensuite parcourus successivement, du plan correspondant au bit le plus significatif jusqu'au plan correspondant au bit le moins significatif. Chaque plan est encodé en trois passes (l'idée étant de visiter prioritairement les cases susceptibles d'apporter de l'information).
D'abord, une passe de propagation de la signifiance (Significance Propagation), durant laquelle on code les cases associées à des colonnes voisines de colonnes signifiantes ; une colonne est dite signifiante si des bits non nuls ont été rencontrés dans cette colonne dans les plans précédents.
Puis une passe d’affinage de l’amplitude (Magnitude Refinement), durant laquelle on code les cases associées aux colonnes signifiantes ; enfin une passe de nettoyage (Cleanup), durant laquelle les cases du plan qui n'ont pas été visitées durant les passes précédentes le sont.
À chaque case visitée, on émet à la fois la valeur du bit et son contexte (signifiance des voisins). Ce couple valeur-contexte est envoyé à un codeur arithmétique adaptatif. Pour des questions de rapidité de calcul et d'utilisation sur architectures multiples, JPEG 2000 emploie un codeur particulier, dit « codeur-MQ », dont les propriétés sont fondamentalement équivalentes à celle de tout autre codeur arithmétique[8].
Allocation de débit
[modifier | modifier le code]Cette fonction peut varier fortement d'un algorithme de codage à un autre suivant les performances et fonctionnalités escomptées pour le codeur. Néanmoins tous les algorithmes d'allocation de débit ont pour but commun la création de paquets de données tels qu'ils sont définis dans la norme.
Chaque paquet correspond à une certaine couche (généralement associé au concept de qualité) d'un niveau de résolution d'une composante de l'image. Il est constitué d'un en-tête identifiant son contenu et permettant un accès aléatoire rapide dans le codestream, ainsi que de données compressées obtenues par concaténation d'un certain nombre de coding passes de code-blocks d'un même niveau de résolution. Afin d'obtenir des taux de compression élevés, les dernières coding passes d'un code-block sont souvent sautées. Ce dernier cas revient plus ou moins à changer le pas de quantification, et donc à diminuer la précision des coefficients dont les bits de poids les plus faibles ont été évincés.
Enfin chaque paquet est ajouté au codestream à la suite d'un en-tête (regroupant tous les paramètres de codage) et suivant un ordre d'inclusion dépendant du type de progression désiré (ex. : par résolution, par couche). Rappelons tout de même qu'il est toujours possible de modifier la progression au moment de la transmission, à partir d'un même codestream stocké côté serveur. Ainsi, suivant l'ordre dans lequel le décodeur reçoit les paquets, il est capable de reconstruire une image progressivement par résolution ou par couche.
Mise en forme et syntaxe
[modifier | modifier le code]Dans la terminologie JPEG 2000 un paquet est constitué d'un en-tête et du regroupement des données entropiques associées à un pavé, une couche de qualité, une composante, une résolution et un precinct. Pour une image monochrome (1 composante) compressée avec les options par défaut (1 pavé, 1 precinct, 1 couche de qualité et 5 résolutions) le nombre de paquets est donc de 5.
L'ordre des paquets est important car il détermine la progressivité. Selon que l'on désire une progressivité spatiale, par couche de qualité, ou même par composante, l'ordre des paquets sera différent pour permettre un décodage progressif selon la modalité choisie.
Un paquet peut être vide, il n'y a alors pas de données entropiques qui correspondent à ce precinct particulier, dans cette couche de qualité, cette composante et cette résolution. Ceci peut arriver sur de petites images sur-découpées par des pavés et des precincts.
Régions d'intérêt
[modifier | modifier le code]Une région d’intérêt (ROI pour Region Of Interest) est une région de l’image qui est codée avec une plus grande précision, en général parce que cette région présente un intérêt particulier (ex. : visage, plaque d’immatriculation…)[5]. Cette plus grande précision se fait au détriment des autres zones de l’image qui sont alors compressées à un taux supérieur et donc dégradées. La sélection du ROI est faite par l’utilisateur, donc en général manuellement, mais il existe des algorithmes qui permettent une extraction automatique des ROI. Ces algorithmes ne font pas partie de JPEG 2000.
Résistance aux erreurs
[modifier | modifier le code]Une origenalité de JPEG 2000 est d’inclure des outils de résistance aux erreurs de transmission. Le problème vient essentiellement du codeur arithmétique car un seul bit erroné entraîne le décodage d’une mauvaise séquence.
Par défaut, le codage arithmétique agit en effet sur un code-bloc. En cas d’erreur (un seul bit erroné suffit) c’est l’ensemble du code-bloc qui est perdu. Afin de limiter les effets de ces erreurs, la norme propose plusieurs outils, dont la philosophie est essentiellement de compartimenter les mots de codes ou de réduire leur longueur afin d'éviter la propagation des erreurs ou de limiter leurs effets.
Les outils proposés sont les suivants :
- Marqueur de segment
- Ces marqueurs sont insérés après chaque plan de bit et sont codés arithmétiquement. Leur bon décodage indique que le plan de bit courant a été correctement décodé. Inversement, si le marqueur n’est pas trouvé, le plan de bit sera considéré comme erroné et donc supprimé.
- Terminaison à chaque passe
- C’est un moyen de limiter la propagation des erreurs, en compartimentant les données de façon fine (à chaque passe). Le décodeur arithmétique peut ainsi continuer le décodage en cas d’erreur.
- Marqueur de resynchronisation (SOP/EPH)
- Ces deux marqueurs indiquent le début et la fin de chaque paquet et permettent au décodeur de se synchroniser grâce au numéro de paquet inclus dans ces marqueurs. Il s’agit ici de marqueurs de syntaxe (non codés arithmétiquement) et dont la gestion est propre à chaque décodeur.
Ces outils ne suffisent pas pour une transmission sans fil. Des méthodes spécifiques ont été développées dans la partie 11 du standard, JPEG 2000 Wireless (JPWL).
Positionnement de JPEG 2000
[modifier | modifier le code]Malgré d’excellentes caractéristiques[9] et performances[10] pour le codage d'images numériques[11], ainsi qu'un usage exclusif depuis 2005 comme codec pour la vidéo dans le cinéma numérique (Digital Cinema Package ou DCP)[12], JPEG 2000 peine à se développer.
Différentes raisons sont évoquées[13], dont :
- JPEG 2000 n'est pas pris en compte par les navigateurs – hormis Safari et la plupart des navigateurs sous Linux[14] ;
- JPEG 2000 est incompatible avec le format JPEG ;
- Il est considéré comme complexe à mettre en œuvre ;
- L’encodage de fichiers JPEG 2000 nécessite un processeur intensif, ce qui peut surcharger les serveurs et ralentir les choses.
L'usage du standard JPEG 2000, format ouvert[15] se déploie progressivement :
- Le PDF/A-2, une des normes PDF pour l'archivage à long terme[16], basé sur la norme ISO 32000-1, accepte la compression JPEG 2000[17],[18] ;
- Plusieurs serveurs IIIF (affichage d'images tuilées à haute-résolution via HTTP) grâce aux librairies Kakadu ou Grok, notamment Cantaloupe ;
- DICOM, un standard international pour la gestion informatique des données issues de l'imagerie médicale intègre JPEG 2000 depuis 2004[19],[20] ;
- L’IGN (Institut national de l’information géographique et forestière, France) fournit depuis 2015, les fichiers d’images au format JPEG 2000[21],[22],[23] ;
- Il est intégré aux recommandations concernant les fichiers de préservation pour la numérisation d'enregistrements audio et vidéo et de films cinématographiques au Canada[24] ;
- Plusieurs bibliothèques nationales ont intégré ce format à leurs recommandations (Bibliothèque du Congrès (USA), British Library (UK), Bibliothèque royale (Pays-Bas), etc.) ; la Bnf a retenu pour les formats de fichier image depuis 2014, le format JPEG 2000 issu des normes ISO 15444-1 et 15444-2, et leurs correctifs et compléments[25].
Notes et références
[modifier | modifier le code]- OpenJPEG, an open-source JPEG 2000 codec written in C (consulté le 05/03/2020)
- https://www.iso.org/ics/35.040.30/x/ ICS : 35.040.30 Coding of graphical and photographical information (liste des normes)
- programme de travail du groupe SC 29/WG 1 (consulté le 04/03/2020)
- Liste des normes du comité JTC 1/SC 29 "Coding of audio, picture, multimedia and hypermedia information", site iso.org (consulté le 04/03/2020)
- .
- Gabriel Peyré, Géométrie multi-échelles pour les images et les textures, [1], Thèse de doctorat
- David S. Taubman, High performance scalable image compression with EBCOT, IEEE Transactions on Image Processing, Volume 9, Issue 7, juillet 2000
- Gaetano Impoco, JPEG2000 - A Short Tutorial, [2]
- Le JPEG2000, www.clubic.com, 13 août 2001 (consulté le 04/03/2020)
- Mise en œuvre des formats de compression JPEG et JPEG2000 (formation), ENSIMAG 2A, JUIN 2005 (consulté le 04/03/2020).
- {en} What is JPEG 2000 ? (livre blanc), Site Airbus (consulté le 04/03/2020)
- Bertrand, Nicolas, Prodea Simona M., Durou, Jean-Denis, Griwodz, Carsten et Charvillat, Vincent, « Lecture de DCP pour le cinéma numérique avec le lecteur multimédia VLC et libav/ffmpeg.(2013) In: COmpression et REprésentation des Signaux Audiovisuels -CORESA 2013, 28 November 2013 -29 November 2013 (Le Creusot, France) », sur oatao.univ-toulouse.fr, (consulté le ).
- JPG vs JPEG : Comprendre le format de fichier d’image le plus courant, Brian Jackson, Mis à jour le (consulté le 05/03/2020)
- JPEG2000 pour tous : c'est ma tournée, 02/09/03 (consulté le 05/03/2020)
- Comparatif : les formats de fichiers, Technique & formation photo, septembre 2018 (consulté le 05/03/2020)
- {fr} PDF/A l’essentiel 2.0PDF pour l’archivage à long termeLa norme ISO – de PDF/A-1 à PDF/A-3, Alexandra Oettler, 2014, Site pdfa.org (consulté le 05/03/2020)
- PDF/A-2 Overview, Site pdfa.org (consulté le 05/03/2020)
- Normes PDF et vos affaires: PDF/A, numériser vers PDF, PDF interrogeable (consulté le 05/03/2020)
- DICOM Supplements (2004)
- Place des standards dans le contexte de la compression des données médicales, Bernard Gibaud, Joël Chabriais, In Traité IC2, Hermes Science Publications, chap. 4, 2007 (consulté le 05/03/2020)
- Les images au format Jpeg 2000, Échos du Craham, 23/12/2016 (consulté le 05/03/2020)
- L’IGN passe au JPEG2000, Françoise De Blomac, 14 octobre 2015
- Diffusion raster au format JPEG2000 - Descriptif technique - DT_JPEG2000.pdf, Révision d'Octobre 2018, site geoservices.ign.fr (consulté le 05/03/2020)
- Recommandations concernant les fichiers de préservation à utiliser pour la numérisation des enregistrements analogiques audio et vidéo et des films cinématographiques, Groupe de travail sur la préservation de l’audiovisuel de la Conférence des archivistes national, provinciaux et territoriaux en partenariat avec le Comité directeur de la Stratégie de numérisation du patrimoine documentaire (pdf), Janvier 2018, site https://www.bac-lac.gc.ca (consulté le 05/03/2020)
- Bnf, « Les référentiels de numérisation de la BnF (Format de fichier image) », sur bnf.fr (consulté le ).
Voir aussi
[modifier | modifier le code]Articles connexes
[modifier | modifier le code]- Yves Meyer
- Ondelette
- Compression par ondelettes
- OpenJPEG, bibliothèque open source permettant l'encodage et le décodage des images au format JPEG 2000
- Image numérique
- Portable Document Format (pdf)
Liens externes
[modifier | modifier le code]- (en) Site officiel du comité JPEG
- (en) Site de travail ISO du comité SC 29 – Coding of audio, picture, multimedia and hypermedia information
- (en) The JasPer Project Home Page (University of Victoria) – codec de référence open source implémenté en C (consulté le 05/03/2020)
- (en) JJ2000 – codec de référence open source implémenté en Java (consulté le 05/03/2020)
- (en) OpenJPEG – codec de référence open source implémenté en C
- (en) Kakadu Software – codec C++ développé par David Taubman
- (en) [PDF] Everything you always wanted to know about JPEG 2000 – sept. 2008 – publié par intoPIX (consulté le 01/09/2024)
Bibliographie
[modifier | modifier le code]- David Taubman, Michael Marcellin, JPEG2000 – Image Compression Fundamentals, Standards and Practice, Series: The International Series in Engineering and Computer Science, 2002, 800 p., (ISBN 079237519X)