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

Contenu supprimé Contenu ajouté
m Orth., Typo. using AWB
Ligne 19 :
# Tests et procédures pour assurer la conformité avec le format
# Implémentations de référence (JJ2000 et Jasper)
# Format JPM (format "compound" pour intégrer du texte, des images, ...)
# Spécifications pour appareils à puissance limitée (partie abandonnée et non publiée)
# Sécurité, intégrité, authenticité et cryptage (JPSEC)
Ligne 38 :
Ceci est particulièrement frappant avec les images qui présentent des zones délimitées de façon nette (texte, "cliparts"), domaine dans lequel il est un piètre candidat face aux formats non-destructifs comme le [[:w:Portable Network Graphics|PNG]], le [[:w:Graphics Interchange Format|GIF]] ou même l'ancestral [[:w:PCX|PCX]]. D'autres transformations et conversions sont appliquées sur les blocs pour améliorer la compression, elles sont à l'origine d'une série de dégradations comme la désaturation exagérée des couleurs.
 
Le JPEG 2000 utilise une autre approche basée sur les [[:w:Compression par ondelettes|ondelettes]] (''wavelets''). Sous ce terme se cache en fait une théorie mathématique utilisée pour le traitement des signaux ([[:w:sismologie|sismologie]], [[:w:acoustique|acoustique]], [[:w:physique|physique]], ...). Les recherches étant plutôt actives dans ce domaine depuis une vingtaine d'années, les méthodes de compression se sont peu à peu améliorées et on pouvait espérer dépasser les taux de compression offerts par le JPEG. C'est du moins ce que l'on peut affirmer en ce qui concerne les images. Le cas de la vidéo est plus problématique, les ondelettes sont difficiles à mettre en œuvre si l'on reprend les principes qui ont fait le succès du [[:w:Moving Picture Experts Group|MPEG]] (estimation du mouvement, frames intermédiaires calculées à partir de frames complètes). Avant l'arrivée du [[:w:DivX|DivX]], plusieurs ''codecs'' vidéo basés sur des ondelettes offraient des taux compétitifs. On peut notamment citer le codec Indeo 5 d'Intel, VDOWave ou encore Tarkin qui a été stoppé au profit du codec [[:w:Theora|Theora]] de la [[:w:Xiph.org|fondation Xiph]]. Celle-ci est plus connue pour son projet [[:w:Ogg|Ogg Vorbis]]. La disparition assez rapide de ces formats n'est pas totalement anodine et montre bien qu'il y a encore du travail à fournir. Les codecs les plus populaires (XviD, DivX, [[:w:Windows Media Video|WMV]], [[:w:RealVideo|RealVideo]], [[:w:Quicktime|Quicktime]]) sont tous dérivés du MPEG et donc du lointain cousin qu'est le JPEG.
 
Il faut encore noter que, sans grande surprise, plusieurs brevets concernant les ondelettes freinent la recherche et réduisent la marge de manœuvre des spécialistes. Le comité JPEG a d'ailleurs dû signer plusieurs accords avec différentes entreprises (Ricoh, Luratech). Cette question n'a pas encore été complètement élucidée puisque le format est absent des navigateurs comme [[:w:Firefox|Firefox]] et même [[:w:Internet Explorer|Internet Explorer]] ; les raisons invoquées sont d'ordre juridique mais elles pénalisent très fortement la diffusion du format chez le grand public.
Ligne 74 :
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>.
 
Quel est l'intéretintérêt d'une telle transformation ? Un signal transformé se compressera mieux que le signal brut, on parle de compression d'énergie. Les coefficients de détails ont souvent une magnitude inférieure aux échantillons du signal original. On a donc besoin de moins de bits pour coder ces informations et nous pouvons réduire leur précision. Si nous reconstruisons le signal comme nous l'avons fait précédemment à partir de <math>[12,7, -8, 0]</math>, nous obtenons <math>[4, 20, 7, 7]</math>. Le signal est dégradé mais encore fidèle à l'original.
 
Nous venons d'effectuer une première passe de l'algorithme. Nous allons maintenant affiner l'analyse en diminuant l'échelle. Nous reprenons la séquence issue de la première transformation, soit <math>S1 = [12, 7, -11, 2]</math>. Nous avons vu que la première partie correspond aux coefficients "basses fréquences" et la deuxième partie aux coefficients de détails. Nous allons maintenant appliquer l'algorithme récursivement sur la partie de gauche (basse fréquence). À partir de S1, nous prenons <math>[12, 7]</math> et trouvons la moyenne suivante : <math>(12+7)/2 = 9,5</math>. Le coefficient de détail pour cette partie correspond à <math>(12-9,5) = 2,5</math>. Nous remplaçons les termes présents dans la partie gauche de S1 par ceux que nous venons de calculer. Nous obtenons ainsi <math>S2 = [9,5, 2,5, -11, 2]</math> constitué d'un coefficient d'approximation et de 3 coefficients de détails. Nous ne pouvons pas décomposer davantage la partie basse fréquence car elle se réduit maintenant à un seul terme.
Ligne 90 :
== Les ondelettes du Jpeg2000 ==
[[Image:Daubechies4-functions.png|thumb|Ondelette de type Daubechies-4]]
La transformation de Haar n'est guère satisfaisante, car elle fait apparaître des blocs après une quantification excessive et les taux de compression sont faibles. Tous ces problèmes sont surtout liés au fait que l'ondelette de Haar n'est pas continue. Pour améliorer cette situation, une autre famille d'ondelettes est employée : les ondelettes de Daubechies. On les doit à une mathématicienne belge, [[:w:Ingrid Daubechies|Ingrid Daubechies]], qui dès le début des années 801980 s'est activement consacrée à ce domaine. Les résultats de ses recherches ont été utilisés, mis à part le Jpeg2000, pour le système de stockage des empreintes digitales du [[:w:Federal Bureau of Investigation|FBI]]. Une méthode fut spécialement développée pour tenir compte des caractéristiques des empreintes.
 
Dans le Jpeg2000, une ondelette de type Daubechies 9/7 est utilisée pour la compression avec perte. Pour la compression sans perte, on utilise une LeGall 5/3. Les coefficients obtenus avec l'ondelette de LeGall sont rationnels, cette particularité est nécessaire pour assurer une reconstitution parfaite du signal original. Ces ondelettes n'ont pas été choisies au hasard, elles remplissent plusieurs critères mathématiques qui permettent d'obtenir de bons résultats sur les images. Il faut savoir que, selon le type de signal à analyser, les ondelettes utilisées ne seront pas les mêmes. Nous avons vu que la décomposition de Haar agit comme une succession de filtres passe-haut / passe-bas basiques. Le filtrage avec une "9/7" revient à multiplier les valeurs provenant de l'échantillon avec les coefficients du filtre passe-bas (9 valeurs) et passe-haut (7 coefficients). On additionne les valeurs pour chaque banque de filtres et on obtient un coefficient de moyenne accompagné d'un coefficient de détail.
Ligne 101 :
On peut ensuite convertir l'image de l'[[:w:Rouge vert bleu|espace RVB]] (rouge, vert, bleu) vers un espace plus approprié pour la compression. Ce processus est optionnel selon la description du standard (et inutile dans le cas d'une image en niveaux de gris).
 
L'oeilœil humain est très sensible aux changements d'intensité lumineuse. En revanche, les changements de teintes ont moins d'impact sur la vision, deux teintes très proches peuvent être remplacées par la même valeur. Le RVB (rouge, vert, bleu) n'est pas du tout adapté, car il ne sépare pas la luminosité et les composantes chromatiques. Les espaces qui permettent ces manipulations sont le YCbCr (pour la compression avec perte) et le YUV (compression sans perte). Dans la terminologie du JPEG 2000, on parle de ICT ou RCT (''irreversible/reversible component transformation''), ces deux espaces sont des approximations du [[:w:YCbCr|YCbCr]] et du [[:w:YUV|YUV]]. Grâce à une telle transformation, on obtient trois plans. Le Y correspond à un canal de lumière (on pourrait l'assimiler à la version en niveaux de gris de l'image) alors que le Cb et Cr sont dédiés à la couleur. Le Y est le plus significatif et doit subir le moins de pertes possible. Les plans Cb et Cr peuvent en revanche subir des dégradations plus poussées.
 
Un algorithme utilisé également dans le JPEG consiste à réduire la taille des plans d'images grâce à un sous-échantillonnage (''subsampling'' ou décimation). Par exemple, si notre image fait 320x200, le plan Y fera 320x200 pixels alors que les plans Cb et Cr feront 160x100 pixels (rapport de type 4:2:0). Lors de la reconstitution de l'image, on agrandit les plans pour que les tailles correspondent. Dans le JPEG standard, on utilise un rapport 4:2:2 qui signifie que, pour 4 blocs provenant d'un plan Y, on aura 2 blocs horizontaux pour Cb et 2 blocs horizontaux pour Cr. On rencontre parfois des rapports 4:2:0, cette description correspond à 4 blocs Y accompagnés d'un bloc pour Cb et un autre bloc pour Cr (on réduit la taille du plan par un facteur de deux horizontalement et ensuite verticalement).
Ligne 108 :
 
=== Quantification ===
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]] àa é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 ===