JPEG 2000 - la nouvelle norme pour le codage d'images

diego.santacruz@epfl.ch raphael.grosbois@epfl.ch touradj.ebrahimi@epfl.ch

Lorsqu'on aborde le sujet de la compression d'images, la première norme qui nous vient à l'esprit est JPEG. Celle-ci est en effet l'une des plus utilisées dans le domaine de la compression d'images photographiques et fut créée par le Joint Photographic Experts Group (JPEG), il y a maintenant plus de dix ans. Elle s'avère d'ailleurs encore aujourd'hui très compétitive lorsqu'elle est utilisée à des taux de compression faibles ou moyens, mais la piètre qualité des images obtenues à des taux de compression plus élevés ainsi que son manque de flexibilité et de fonctionnalités témoignent de son incapacité à satisfaire toutes les exigences des applications d'aujourd'hui.

C'est à partir de ce constat que les membres du groupe JPEG se sont remis à plancher sur l'élaboration d'une nouvelle norme de codage d'images plus flexible et performante: JPEG2000. Maintenant que le processus de normalisation de plusieurs des parties composant JPEG2000 est arrivé à son terme, il paraît opportun de présenter les fonctionnalités de cette norme, l'algorithme utilisé, ses performances vis-à-vis de JPEG ainsi que ses applications potentielles.

Qu'apporte JPEG 2000 ?

Une norme en sept parties

La première remarque que nous pouvons faire à propos de cette norme est qu'elle ne définit que l'algorithme de décodage et le format des données compressées (codestream ). Ceci laisse une assez grande liberté dans le choix du système de codage et ouvre la porte à la compétition pour l'élaboration de codeurs optimaux, pour autant que ceux-ci produisent des codestreams conformes aux spécifications de la norme. Cette dernière correspond en réalité à sept parties relativement indépendantes:

Partie 1
Elle définit la technologie minimale de l'algorithme de décodage ainsi que le format du codestream devant être compris par tous les produits se réclamant compatibles avec la norme. En outre, cette partie introduit le format de fichier JP2 qui permet d'associer au codestream des informations additionnelles sur l'image. Enfin, elle a pour but de couvrir une grande majorité des applications touchant au domaine de l'imagerie numérique (archivage, diffusion sur Internet...).

Partie 2
Celle-ci définit des extensions à la partie précédente afin d'améliorer les performances ou augmenter le nombre de fonctionnalités. Elle est surtout dédiée à des applications plus spécifiques telles que le codage de données hyper-spectrales (ex: images satellite).

Partie 3
Elle correspond à Motion JPEG2000. Elle définit un format de codage de séquences audiovisuelles et d'animations en tant que succession d'images indépendantes compressées par un système compatible avec JPEG2000 Partie1.
Partie 4
Elle définit les règles de compatibilité avec la norme JPEG2000.

Partie 5
Elle correspond au logiciel de référence de la Partie 1. Il y a en tout deux implémentations. La première, appelée JJ2000, est en Java et est élaborée dans le cadre d'un partenariat entre l'EPFL, Canon Research France et Ericsson (http://jj2000.epfl.ch ), alors que la seconde, appelée JasPer, est écrite en C (http://www.imagepower.com).

Partie 6
Elle spécifie un format de fichier pour les images compound (i.e. contenant à la fois du texte, des photographies, des graphiques...).

Partie 7
Elle définit un support minimal de compatibilité pour des appareils à puissance limitée (ex: appareils photo numériques...).


Il est à noter qu'à ce jour, seule la Partie 1 a atteint le stade de norme internationale. C'est d'ailleurs essentiellement cette partie que nous détaillons dans le reste de cet article. Le lecteur aura déjà remarqué qu'une de deux implémentations de référence, JJ2000, est développée à l'EPFL, plus précisément au Laboratoire de Traitement des Signaux (LTS). En effet, le LTS participe activement à la définition de cette norme et a contribué, entre autres, au développement des technologies telles que le codage par régions d'intérêt. D'autres projets du LTS, en rapport direct avec JPEG2000, ont été NexImage (http://ltswww.epfl.ch /~neximage/) et Eurostill (http://eurostill.epfl.ch/). Le premier a vu comme résultat le développement du premier décodeur JPEG2000 public. Il était alors basé sur une version expérimentale de l'algorithme de JPEG2000 mais inspira, par la suite, la création de JJ2000.

Les principales fonctionnalités de JPEG2000

L'énorme avantage de JPEG2000 par rapport aux autres normes est qu'il définit, déjà dans sa Partie 1, une pléiade d'outils pouvant servir aux applications de tous les jours.

Parmi ceux-ci, le plus important est très certainement le décodage progressif. Pour cela, les codestreams JPEG2000 sont, de par leur nature, multi-résolutionels. En effet, comme nous le verrons par la suite, l'image est compressée résolution par résolution, sans redondance, ce qui permet ensuite la transmission ou le décodage direct de la résolution la plus adaptée au système d'affichage. De plus, il est possible d'ordonner l'information dans le codestream de manière croissante en qualité, grâce au concept de layers expliqué un peu plus loin, ou encore de grouper l'information par rapport à la position qu'elle occupe dans une résolution de l'image.

De plus, ces trois types de progression peuvent être combinés et former, par exemple, un codestream où le décodage direct se fait par résolution et où, dans chaque résolution, l'information apparaît de manière progressive en qualité. Enfin, il est à noter que la structure des codestreams JPEG2000 facilite l'accès aléatoire aux données. Ceci offre la possibilité de réordonner l'information au moment de la transmission et d'obtenir ainsi n'importe quel type de progression à partir d'un seul et unique codestream contenant un nombre de résolutions et de qualités suffisamment grand.

Une des caractéristiques nouvelles de JPEG2000 est la possibilité de définir des régions d'intérêt. Ces dernières permettent une affectation non uniforme du budget de qualité dans une image. Il est ainsi possible d'atteindre des taux de compression très élevés tout en gardant une très bonne précision dans les régions les plus importantes aux yeux de l'utilisateur.

Les autres fonctionnalités les plus marquantes de cette norme sont, d'une part, la possibilité de compresser sans perte ou avec pertes en utilisant le même algorithme ou encore l'intégration d'un mécanisme de détection d'erreurs très efficace pour les transmissions en environnements bruités. D'autre part, comme évoqué précédemment, elle permet l'accès aléatoire rapide aux données d'une image compressée, ce qui permet de ne décoder uniquement qu'une certaine zone d'une image lorsque celle-ci est très grande. Elle permet encore la plupart des manipulations géométriques élémentaires (flip, permutation paysage/portrait...) directement dans le domaine compressé et sans aucune perte en qualité. Enfin, une autre caractéristique de JPEG2000 est que le même algorithme de codage s'applique à une grande variété de types d'images (couleurs, niveaux de gris, multi-composantes...).

Pour finir, notons qu'un certain nombre d'autres fonctionnalités sont apportées par le format de fichier présenté ci-après.

Format de fichier

Comme il a été mentionné auparavant, JPEG2000 Partie1 spécifie un format de fichier optionnel, appelé JP2. Celui-ci encapsule le codestream JPEG2000 et peut contenir d'autres informations importantes sur l'image. Le format de ce fichier est basé sur le concept de boîtes, où chaque boîte est une séquence contiguë de données, contenant des informations de type et longueur. Quelques boîtes - les superboîtes - peuvent en contenir d'autres, ce qui donne une structure hiérarchique. Les boîtes de base fournissent l'identification du type de fichier, un moyen de détection d'erreurs de transmission (e-mail 7 bits, transferts ftp ASCII, et similaires), la taille de l'image, le nombre de composantes, et leur gammes de valeurs, aussi bien que la résolution d'acquisition et d'affichage par défaut. JP2 fournit aussi deux méthodes pour identifier l'espace de couleurs de façon précise. La méthode énumérée (par nom) impose à toutes les applications de pouvoir interpréter chacun des espaces possibles, ce qui rend son implémentation difficile dans le cas où il y en aurait un nombre important. Pour cette raison, cette méthode a été limitée à deux espaces: sRGB et niveaux de gris non-linéaires. Pour les autres espaces de couleurs, JP2 supporte une forme restreinte des profils ICC (International Color Consortium), qui autorisent une courbe de non-linéarité ainsi qu'un matrice de transformation 3x3.

En plus d'un espace couleur précis, JP2 permet de spécifier une palette de couleurs, qui peut contenir jusqu'à 1024 entrées, ainsi que l'information de transparence (plan alpha). Ce format de fichier permet aussi d'inclure des informations spécifiques à certaines applications avec des boîtes XML et UUID (Universally Unique Identifier), qui peuvent êtres interprétées par ces applications, et ignorées par d'autres, sans conséquences. Finalement, il y a aussi une boîte qui permet d'inclure des informations sur la propriété intellectuelle.

Quel est l'algorithme utilisé ?

Comme évoqué précédemment, seul l'algorithme de décodage est décrit dans cette norme. Cependant, pour faciliter l'introduction de la terminologie et celle des techniques mises en uvre, nous présentons ici un algorithme de codage typique compatible avec JPEG2000 Partie 1. Enfin, pour éviter d'alourdir les explications, nous n'aborderons pas ici certaines fonctionnalités avancées telles que les régions d'intérêt, le décodage progressif par position ou les outils de détection et correction d'erreurs, pour lesquels il est conseillé de se reporter aux références en fin d'article.

La figure 1 présente le schéma bloc d'un codeur JPEG2000. Comme on peut le constater, un algorithme typique de codage JPEG2000 se divise essentiellement en 5 modules: transformée couleur, transformée en ondelettes discrète, quantification, codage entropique et allocation de débit. Chacune de ces opération est brièvement abordée dans la suite, mais notons tout d'abord que l'image de départ peut être divisée en tiles (pour des raisons d'usage de mémoire) qui sont ensuite codés de manière totalement indépendants mais réunis finalement dans un seul et même codestream (au moment de l'allocation de débit).

fig.1 - Schéma typique d'un codeur JPEG 2000

Transformée couleur

Cette transformée est optionnelle mais peut s'avérer intéressante dans le cas où l'image (ou le tile) à coder appartient à l'espace de couleurs R, G et B. Elle permet alors d'obtenir une représentation de l'image dans un espace luminance/chrominance plus adaptée à la compression des données. Cette transformée est soit réversible et alors les données restent entières (ce qui autorise un éventuel codage sans perte), soit elle est irréversible et les données sont alors représentées en virgule flottante (ce qui implique déjà des pertes lors du codage). Il est à noter que l'image à coder peut être dans un tout autre espace couleur que ceux cités précédemment. Celui-ci doit alors être signalé grâce au format de fichier JP2.

>Transformée en ondelettes discrète

JPEG 2000 utilise une transformée séparable pour effectuer une décomposition dyadique de l'image entière (en réalité, chaque composante de chaque tile) en sous-bandes de fréquences (voir figure 2).

fig.2 - Division dyadique d'une image (a) en sous-bandes de fréquences après un (b) et deux (c) niveaux de décomposition.

Ainsi les lignes et les colonnes sont successivement décomposées suivant l'algorithme récursif de Mallat, ce qui donne autant de sous-bandes BB (basses fréquences horizontales et verticales), BH (basses fréquences horizontales et hautes fréquences verticales), HB (hautes fréquences horizontales et basses fréquences verticales) et HH (hautes fréquences horizontales et verticales) qu'il y a de niveaux de décompositions .

Les filtres autorisés sont soit la paire (9,7) irréversible de Daubechies ou la paire (5,3) réversible de Le Gall. La première définit un filtre passe-bas à 9 coefficients et un filtre passe-haut à 7 coefficients, tous deux à coefficients irrationnels. D'un autre côté, la paire (5,3) de filtres passe-haut et passe-bas est à coefficients rationnels. En règle générale, la première permet des taux de compression plus élevés pour une qualité donnée, mais seule la seconde est utilisable pour compresser sans perte.

Quantification

Lors du codage avec pertes, la précision sur les coefficients d'ondelettes est réduite par quantification scalaire uniforme. Cette étape permet, d'une part, de mettre à zéro les coefficients de faibles amplitudes (influant peu la qualité de l'image) mais fixe aussi le taux de compression minimal de l'image (i.e lorsque l'information quantifiée est intégralement incluse dans le codestream). La fonction de quantification est présentée à la figure 3 où est le pas de quantification de la sous-bande (chaque sous-bande peut avoir un pas de quantification différent), w est le coefficient d'ondelettes à quantifier et Q(w) l'index de quantification obtenu.

figure 3 - Fonction de quantification dans JPEG 2000

Dans le cas d'un codage sans perte, le pas de quantification est égal à 1, ce qui signifie qu'aucune quantification n'est appliquée.

Codage entropique

JPEG2000 code les index de quantification obtenus précédemment grâce à un codeur arithmétique adaptatif avec contexte. Les coefficients quantifiés sont préalablement groupés, dans chaque sous-bande, en blocs rectangulaires (code-blocks) typiquement de taille 64x64 ou 32x32. Puis chaque code-block est codé plan de bits par plan de bits, en commençant par les bits de poids le plus fort. En réalité, dans chaque plan de bits, les bits sont d'abord séparés en trois groupes, en fonction de leur voisinage, puis codés en trois passes (coding passes) successives.

Il est important de constater ici que le bit stream obtenu après un tel type de codage peut être tronqué à la fin de chacune des coding passes (il y a donc trois points de troncature possible par plan de bits) qui correspondent alors à des qualités progressives de chaque code-block. Cette propriété est la base de l'algorithme EBCOT et est largement exploitée par tous les types d'allocations de débits tel que celui présenté ci-dessous.

Allocation de débit

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 à un certain layer (généralement associé au concept de qualité) d'un niveau de résolution d'une composante de l'image. Il est constitué d'une 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. Il est à noter que, pour 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'une 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 layer). 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ésolutions ou par layers.

Performances comparatives

Comparer les performances des systèmes de codage d'image est une affaire difficile. Il y a beaucoup de facteurs qui entrent en ligne de compte, tels que le taux de compression, la qualité de l'image, le temps de codage, la quantité de mémoire, etc. Le fait de varier quelques paramètres peut affecter certains aspects, mais en améliorer d'autres. Pour cette raison nous nous limitons à quelques comparaisons de base avec JPEG. La première chose qui vient à l'esprit est la qualité de l'image. La figure 4 montre une photographie noir et blanc scannée, codée à des taux de compression élevés et très élevés. Il est clair que JPEG2000 présente un avantage considérable, en particulier à de très hauts taux de compression. A des taux moins élevés la différence est déjà moins importante et ne serait de toute façon pas visible sur la version imprimée ici. Les résultats peuvent varier selon l'image, mais, en général, sans ajustement spécifique, JPEG2000 délivre une meilleure qualité que JPEG, aussi bien pour les faibles que les forts taux de compression, tout en offrant une plus grande flexibilité d'usage.

(a)(b)
(a)(b)

fig. 4 - Comparaison d'images compressées avec JPEG et JPEG 2000, à des rapports de compression de 86 et 41pour 1. L'image a 375 colonnes et 245 lignes: (a) JPEG 86:1, (b) JPEG 41:1, (c) JPEG 2000 86:1 et (d) JPEG2000 41:1.

Un autre aspect important pour beaucoup d'utilisateurs est le temps nécessaire au codage et décodage d'une image. Le tableau 1 montre les temps d'exécution sur un PC PentiumII 300 MHz, en utilisant le logiciel JPEG du Independent JPEG Group (IJG) et le Verification Model (VM) de JPEG2000. Les deux sont écrits en C. On peut facilement voir que JPEG2000 nécessite, approximativement, entre deux et six fois plus de cycles CPU que JPEG. Cependant, JPEG2000 offre une flexibilité plus grande d'utilisation et une meilleure qualité d'image. Il est probable que ce rapport diminue un peu lorsque des logiciels JPEG2000, aussi optimisés que celui de IJG, seront disponibles. Il est important de remarquer aussi que, lorsque JPEG a été introduit il y a une dizaine d'années, selon la loi de Moore, les ordinateurs étaient 100 fois moins puissants que maintenant.

codage (ms.)décodage (ms.)
JPEG10030
JPEG 2000 irréversible180160
JPEG 2000 réversible - 90

table 1 - Temps de codage et de décodage JPEG et JPEG2000, pour l'image de la figure 4, à un taux de compression de 41 pour 1. Pour JPEG 2000, les résultats montrés sont obtenus avec les deux paires de filtres, réversible et irréversible. Des temps de codage significatifs pour la paire de filtres réversible ne peuvent pas être calculés avec le logiciel VM de JPEG 2000.

Malgré la brièveté de la comparaison présentée, on constate que l'on peut atteindre un taux de compression plus important, pour une même qualité d'image, mais ceci vient au prix d'une puissance de calcul plus importante. Cette augmentation est acceptable pour la plupart des applications sur ordinateur. Par contre, la situation est probablement différente pour des applications embarquées, mais, étant donnée la constante augmentation de la puissance disponible, il est fort probable que ce ne soit plus un problème dans un futur proche.

Applications potentielles

JPEG 2000 amène de nouvelles fonctionnalités dans le domaine du stockage et de la transmission d'images, mais quelles sont les applications qui utiliseront ce format dans un futur proche? Bien que celles-ci soient difficiles à prédire, nous décrivons brièvement quelques applications qui pourraient bénéficier de cette nouvelle technologie. De nos jours, la première chose qui vient à l'esprit est le Web. Comme nous l'avons vu, JPEG2000 atteint, en général, des meilleurs taux de compression que JPEG, mais la différence n'est pas extrêmement significative pour les qualités couramment utilisées. Cependant, le visionnage d'images et la maintenance des sites peuvent être améliorés sensiblement grâce à l'utilisation des fonctionnalités de décodage progressifs (résolution, qualité), ainsi que l'accès aléatoire dans le codestream. Par exemple, un navigateur Web pourrait télécharger une version basse résolution de l'image pour la visualisation sur un moniteur. Puis, si l'utilisateur décide de l'imprimer, le navigateur téléchargerait automatiquement plus d'informations du même fichier, pour avoir une résolution plus importante, et donc une meilleure qualité d'impression. Et si l'on désire une qualité encore plus élevée, voir sans pertes, pour l'édition, le navigateur continuerait à charger le reste du fichier.

Pour exploiter ces fonctionnalités, HTML et HTTP 1.1 suffisent. Les attributs de hauteur et de largeur du marqueur HTML indiqueraient au navigateur quelle résolution il doit charger en premier. Puis, les range requests d'HTTP 1.1 seraient utilisées pour charger les données supplémentaires, nécessaires à l'augmentation de la résolution. Ceci nécessiterait un seul fichier JPEG 2000 pour chaque image sur le serveur Web, au lieu de plusieurs fichiers contenant des résolutions et des qualités différentes ou l'utilisation d'un transcodeur dynamique. Ceci réduirait les coûts de maintenance du site, ainsi que la quantité totale d'informations à transmettre.

D'une façon similaire, des résolutions ou qualités différentes pourraient être transmises à des appareils avec des caractéristiques d'affichage différentes (téléphones mobiles, PDAs, PCs, TVs, etc.).

Dans l'Internet mobile, encore balbutiant, JPEG 2000 rend possible une utilisation dynamique des images compressées. Par exemple, un portail WAP pourrait transcoder une image JPEG 2000 d'une page HTML dans une taille et qualité adéquate pour l'appareil sur lequel l'image sera affichée. On pourrait aussi envisager d'associer des qualités de service réseau différentes à des layers d'une codestream JPEG 2000. En cas de congestion dans le réseau, les layers seraient éliminées en commençant par la dernière, donc réduisant la qualité de l'image, mais sans affecter sa decodabilité. De cette manière, la qualité de l'image peut être ajustée en fonction de la bande passante disponible, ceci à des endroits multiples sur le réseau, et non seulement au niveau du serveur. Le visionnage à distance de grandes images peut aussi bénéficier de JPEG2000, grâce à l'accès aléatoire et à la multirésolution afin de permettre le pan & zoom.

Il y a sûrement beaucoup d'autres applications qui peuvent tirer avantage des fonctionnalités offertes par JPEG 2000, mais celles citées ci-dessus donnent déjà un aperçu de ce qui est possible.

Conclusions

JPEG 2000 a le potentiel pour amener l'imagerie numérique un pas plus loin, surtout grâce à sa flexibilité d'utilisation. Cependant, l'adoption à une large échelle de JPEG2000 dépend, entre autres, de deux aspects essentiels: les brevets et le support dans les logiciels.

Un des facteurs clés dans le succès de JPEG est le fait que, dans sa forme la plus utilisée, la technologie n'est pas couverte par des brevets. Le comité JPEG est conscient de ceci, et a déployé des efforts importants pour faire JPEG2000 Partie 1 libre de droits sur tous ses brevets. A cet effet, tous les contributeurs à JPEG2000 ont signé des accords par lesquels ils s'engagent à permettre une utilisation de leur technologie brevetée, dans des applications JPEG2000, sans devoir leur payer de droits. Il est à noter que pendant le processus de normalisation, quelques technologies ont même été enlevées de la Partie 1, parce que leurs implications à cet égard n'étaient pas claires. Même s'il n'est jamais possible de garantir qu'aucune autre compagnie ne détient un brevet applicable à une certaine technologie, même dans le cas de JPEG, des implémentations JPEG2000 libres de tout problème de brevet devraient être possibles.

Le support dans des logiciels est aussi un facteur clé pour le succès de tout format d'image. Pour ce faire, deux implémentations sont fournies comme logiciel de référence, avec des licences suffisamment libérales. En ce moment nous ne sommes pas au courant d'un engagement quelconque de la part des éditeurs de navigateurs Web en ce qui concerne le support JPEG2000, mais plusieurs compagnies ont déjà annoncé des plans pour fournir des logiciels JPEG2000. Espérons que le support JPEG2000 apparaîtra prochainement.

Remerciements

JPEG2000 a été développé par un effort de collaboration entre des centaines de personnes. Bien qu'il ne soit pas possible de remercier tous ceux qui ont participé, nous voudrions mentionner Daniel Lee, le responsable JPEG, David Taubman, l'auteur de l'algorithme de base et du logiciel d'expérimentation initial, Michael Marcellin, pour des contributions importantes à l'algorithme, Tom Flohr, qui maintient le logiciel d'expérimentation, Martin Boliek, Eric Majani et Charilaos Christopoulos, éditeurs de la norme, Majid Rabani, pour sa direction technique, Bernie Brower, pour mener la définition de compliance, Joel Askelöf et David Bouchard, contributeurs de l'implémentation de référence Java, et Michael Adams, auteur de l'implémentation de référence C.

Pour approfondir



  1. Un codestream est déni dans JPEG 2000 comme le résultat de la juxtaposition d'en-têtes contenant les paramètres du codage et de bit streams (formes compressées des données de l'image)
  2. En réalité, pour le mode de décomposition dyadique, la décomposition s'applique d'abord sur l'image puis récursivement sur la sous-bande BB obtenue précédemment. Ce qui fait que seul le dernier niveau de décomposition dispose encore de sa sous-bande BB.
  3. Le Verication Model est le logiciel d'expérimentation utilisé pour le développement de la norme.


retour au sommaire du Flash informatique du mois de mars 1
retour à la page principale des Flash informatique
Vos commentaires
© FI-3-1 du 27 mars 1