« Compression de données/Le format JPEG 2000 » : différence entre les versions

+images
Contenu supprimé Contenu ajouté
+images
Ligne 1 :
{{En cours}}
[[Image:Jpeg2000 wikibooks img1.jpg|thumb|right|Différence entre le JPEG et le JPEG 2000 pour un fichier de même taille.]]
 
== Aperçu ==
Le format [[figure en tête du hit-parade des formats d'images, accompagné par l'équivalent non-destructif, le PNG. Malgré sa grand popularité, il n'est pas exempt de défauts et les spécialistes se sont penchés sur ses problèmes pour concevoir son successeur : le [[:w:JPEG 2000|JPEG 2000]]. Cet article devrait vous permettre de mieux cerner les algorithmes utilisés par ce format récent. Il doit encore s'imposer sur le web grâce aux navigateurs populaires qui ne l'intègrent pas encore. L'utilisation par le grand public reste donc marginale malgré un nombre croissant d'applications qui permettent de travailler avec ce format .
Ligne 60 :
 
== Décomposition selon la base de Haar ==
[[Image:Jpeg2000 wikibooks img2.png|thumb|right|Décomposition du signal en une série de coefficients]]
En [[:w:1909|1909]], [[:w:Alfred Haar|Alfred Haar]] propose ce que l'on considère comme la première ondelette même si ce terme apparaît bien plus tard. L'ondelette de Haar est la plus simple à comprendre et à implémenter.
 
Ligne 67 ⟶ 68 :
Comment retrouver les détails ? Il suffit de regarder la différence entre les moyennes obtenues et les valeurs originales du signal. Le premier couple d'éléments (1,23) a une moyenne de 12. La différence entre 1 et 12 est de -11, entre 12 et 23, elle se monte à 11. Bien entendu, les différences sont simplement opposées et il n'est pas nécessaire de conserver les deux valeurs car l'une est négative, l'autre positive, on ne conserve ainsi que la première valeur. En répétant cette opération avec le deuxième couple (9,5), nous obtenons une différence de <math>(9-7) = +2</math>. Il ne nous reste plus qu'à créer un nouveau signal commençant avec les moyennes suivies par les différences : <math>S1 = [12, 7, -11, 2]</math>, il est essentiel ici de conserver le signe des coefficients.
 
[[Image:Jpeg2000 wikibooks img3.png|thumb|right|Reconstruction du signal à partir des coefficients]]
Pour retrouver le signal original, il suffit de prendre un coefficient représentant une moyenne et d'y ajouter/soustraire la différence respective. Dans le cas de notre signal, nous prenons la moyenne qui vaut 12, nous y ajoutons son coefficient de détail qui vaut -11 pour obtenir la première valeur du signal initial : <math>12 + (-11) = 1</math>. Nous soustrayons ce même coefficient pour obtenir la deuxième valeur du signal : <math>12 - (-11) = 23</math>.
 
Ligne 78 ⟶ 80 :
 
== La transformation de Haar sur une image ==
[[Image:Jpeg2000 wikibooks img4.png|thumb|right|À gauche, une transformation rectangulaire. À droite, une transformation carrée ou dyadique.]]
Prenons une image de 64x64 pixels. Nous isolons les 64 lignes de l'image et appliquons une transformation de Haar complète sur chacune d'entre elles. Pour chaque ligne, le résultat est composé d'un coefficient d'approximation suivi de 63 coefficients de détails. Les lignes transformées sont assemblées pour former une nouvelle image et il s'ensuit une transformation de Haar verticale, cette fois-ci sur les colonnes. A la fin, le premier élément de la matrice en haut à gauche correspond au coefficient d'approximation pour toute l'image (l'intensité moyenne de l'image). Le reste de la matrice correspond aux coefficients de détails pour différentes échelles. On procède de la manière inverse pour reconstituer l'image avec une transformation inverse complète sur les colonnes suivie de la transformation inverse complète sur les lignes.
 
Ligne 100 ⟶ 103 :
 
=== Quantification ===
[[Image:Jpeg2000 wikibooks img5.jpg|thumb|right|Résultat de la quantification avec une transformée de Haar]]
Après une transformation avec des ondelettes, nous nous retrouvons avec un tableau de tuiles et des coefficients pour plusieurs niveaux de détails dans chaque tuile. Pour le choix des coefficients et l'élaboration d'un algorithme de quantification, on fait normalement appel aux [[:w:Perception|études psychovisuelles]] qui permettent de mieux estimer les limites de la vision. On sait que lors de la restitution d'une image, les hautes fréquences sont moins importantes que les basses fréquences. Dans le cas du JPEG 2000, plusieurs méthodes ont été envisagées mais seule la [[:w:Quantification|quantification linéaire]] à été retenue, c'est aussi la plus simple et la plus rapide car elle revient à diviser les coefficients par une constante et à arrondir le résultat. Dans le cas d'une compression sans perte, aucune quantification n'est appliquée. Le JPEG 2000 supporte un autre mode de compression avec des tuiles non-quantifiées. C'est au moment de réaliser le flux de données que certains coefficients seront tout simplement éliminés. On attribue une priorité selon le niveau de détails, les coefficients correspondant aux hautes fréquences auront une importance plus faible que ceux des basses fréquences. Lors de l'écriture du fichier, on donne une taille à ne pas dépasser et les données sont sauvées selon leur importance jusqu'à atteindre le ''quota'' alloué.
 
=== Compression et codage arithmétique ===
[[Image:Jpeg2000 wikibooks img6.png|thumb|right|Résumé des étapes de la création d'un fichier JPEG 2000]]
 
Pour chaque tuile, nous possédons plusieurs bandes quantifiées qui correspondent à des fréquences différentes. Les bandes sont à leur tour subdivisées en sous-blocs rectangulaires. Ceux-ci vont être encodés, compressés grâce à un [[:w:codage arithmétique|codage arithmétique]] et sauvés dans le fichier. Pour coder un bloc, on travaille avec des plans de bits. Le premier plan significatif (présence d'un '1') voit son index stocké dans une entête qui précède le flux de bits.
 
163

modifications