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

m
Bot: Retouches cosmétiques
Contenu supprimé Contenu ajouté
Tavernierbot (discussion | contributions)
m Bot: Retouches cosmétiques
Ligne 36 :
Le signal reconstruit à partir d'une [[:w:Analyse spectrale|représentation spectrale]] n'est jamais parfait et des oscillations parasites s'accumulent à ses extrémités. Il s'agit de l'effet de ''ringing'' ([[:w:Série de Fourier#Phénomène de Gibbs|phénomène de Gibbs]]) qui rend difficile la représentation d'un signal carré avec une somme de sinusoïdes.
 
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.
Ligne 76 :
Quel est l'intéret 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). A 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.
 
Tentons une reconstitution du signal S depuis S2. Nous commençons à partir du coefficient d'approximation qui vaut 9,5. Grâce aux informations de détails qui suivent ce coefficient, nous pouvons aisément retrouver les éléments de S1 : <math>(9,5+2,5)</math> et <math>(9,5-2,5)</math>. Nous avons bien <math>[12, 7]</math>. En appliquant la transformation pour passer de S1 à S comme décrit précédemment, nous retrouvons le signal sans dégradation.
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 80 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 110 :
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.
12 783

modifications