Jump to: navigation, search

Compression d'images

Revision as of 17:16, 10 June 2018 by Frankiezafe (Talk | contribs) (JPEG)

Cette page présente quelques algorithmes courants de compression d'images.

Pourquoi compresser?

Pour comprendre en quoi la compression des images est nécessaire en informatique , nous allons faire un rapide retour sur la structure d'une image numérique[1].

Une image en informatique est une liste de pixels stockée en 1 dimension et lue bloc par bloc pour en faire une surface.

Sur le disque dur, une image est organisée comme ceci:

Image-data-model-memory.png

Les premiers bytes du fichiers contiennent un manuel d'utilisation, expliquant quelles sont ses dimensions, l'emplacement des différentes zones de mémoires et éventuellement une signature caractéristique du type de compression (codec) utilisée. Une fois dépassé, le reste des bytes du fichiers contient les informations de couleur qui permettront d'allumer les pixels de l'écran. La tâche d'un logiciel d'affichage et/ou de traitement d'image est de lire le manuel et de convertir les informations en une grille de pixels. Après cette opération, l'image est affichable sur un écran 2D[2].

Image-data-model-onscreen.png

Le stockage de chaque pixel dans une liste occupe beaucoup de place en mémoire. Pour pouvoir visualiser et manipuler l'image, il est courant de la décompresser dans la RAM. Cette mémoire étant optimisée pour cet usage (l'accès en lecture et en écriture est très rapide), elle permet de manipuler les images sans qu'elles soient compressées. Sa capacité est par contre beaucoup plus réduite que celle des disques durs, et elle se remplit très vite puisqu'elle utilise les fichiers non compressés.

Le stocakge en ROM n'a pas les mêmes performance que la RAM. La ROM est lente mais par contre permet de stocker de grosses quantité de données. C'est en grande majorité pour améliorer ROM que la compression a été mise au point en image.

  • Son premier rôle est de réduire la quantité de mémoire utilisée pour un fichier. Si une compression diminue par 10 le poids des fichiers sur le disque dur, il pourrat donc en contenir 10x plus!
  • Son deuxième rôle est d'accélérer l'accès au fichier. En comparaison de la RAM, un disque dur est lent en lecture. Si un fichier compressé contient 10x moins d'informations que son équivalent non-compressé, la lecture de ses informations sera plus rapide. Le facteur 10 n'est pas nécessairement vrai ici. Dans le cas de petits fichiers, la différence n'est pas aussi marquante puisqu'il faut ajouter au temps de lecture le temps que l'OS prend à le retrouver dans le disque.

Comment compresser?

Il existe de multiple manière d'enlver de l'ormation dans un fichier, avec ou sans perte d'information.

Les schémas ci-dessous explique deux approches différentes avec perte d'information: celle du GIF[3] et celle du JPEG[4].

GIF

La compression utilisée dans les GIF est une des plus simple à comprendre et se base sur le même principe que les images à colorier.

  • On définit une palette de couleurs numérotées à utiliser.
  • On retire l'information de couleur des pixels et on la remplace par un nombre correspondant à la couleur de la palette.


Image-data-model-palette compression.png

Le choix des couleurs est déterminant pour conserver l'aspect général de l'image. Les dégradés sont typiquement évacuées au profit de plage de couleurs unies. Le poids du fichier est fortement diminué: d'un fichier contenant 16 blocs de 24 bits, on passe à un fichier ne contenant plus que 4 blocs de 24 bits et 16 blocs de 2 bits dans ce cas. Les blocs de 2 bits sont les pixels, contenant un nombre de 0 à 4, permettant de retrouver la bonne couleur à appliquer.

JPEG

Le format JPEG n'utilise pas ce système de palette de couleur. Il se base sur un algorithme beaucoup plus subtil qui consiste à identifier des fréquences auxquelles sont sensibles les humains dans l'image. Les fréquences basses (difficilement identifiables, comme des détails dans les zones sombres) seront évacuées en premier. La compression se fait spatialement, en découpant l'image selon une grille qui se raffine en fonction des fréquences identifiées dans chaque zone. Si une zone a peu de détails perceptibles (comme un ciel bleu sans nuages), une seule valeur RGB sera utilisée pour la zone. Au contraire, un panier remplit de billes colorées sera beaucoup plus subdivisé pour conserver un maximum de détails.

Une fois compressée en JPEG, notre image test aura perdu des détails dans les zones peu changeantes, alors que d'autres seront restées très définies.

Image-data-model-spacial compression.png

Que ce soit à la compression ou à la décompression, une grille d'ondelettes est appliquée sur chaque zone de l'image, définissant le besoin de définition de chacune.

DCT-8x8.png

Grille de fréquences 2d utilisée par l'algorithme JPG[5].


https://en.wikipedia.org/wiki/Image_compression

https://en.wikipedia.org/wiki/Image_file_formats

https://en.wikipedia.org/wiki/Comparison_of_graphics_file_formats

https://en.wikipedia.org/wiki/Data_compression

Comparaison

Original JPEG 20% GIF 12 couleurs
Compressions-comparaison.png

Photos

  • original, 417.2 kB

Flag-Of-Palestine-Arab-Man-Waving-1081797.jpg

PNG

  • 1.9 MB

Flag-Of-Palestine-Arab-Man-Waving-1081797 png.png

JPEG

Le JPEG utilise une compression spaciale des informations de l'image.

  • qualité à 60% - 163 kB

Flag-Of-Palestine-Arab-Man-Waving-1081797 60pc-delta.jpg

  • qualité à 40% - 157.5 kB

Flag-Of-Palestine-Arab-Man-Waving-1081797 40pc-delta.jpg

  • qualité à 20% - 140.8 kB

Flag-Of-Palestine-Arab-Man-Waving-1081797 20pc-delta.jpg

  • qualité à 3% - 73.2 kB

Flag-Of-Palestine-Arab-Man-Waving-1081797 01pc-delta.jpg

GIF

  • palette de 256 couleurs - 1.1 MB

Flag-Of-Palestine-Arab-Man-Waving-1081797 256palette-delta.jpg

  • palette de 102 couleurs - 970.7 kB

Flag-Of-Palestine-Arab-Man-Waving-1081797 102palette-delta.jpg

  • palette de 12 couleurs - 651.9 kB

Flag-Of-Palestine-Arab-Man-Waving-1081797 12palette-delta.jpg

Graphique

  • original, 30.3 kB

Godot logo.png

JPEG

  • qualité à 60% - 14.5kB

Godot logo 60pc jpg.png

  • cqualité à 20% - 11,3kB

Godot logo 20pc jpg.png

  • qualité à 3% - 5.6kB

Godot logo 03pc jpg.png

GIF

  • palette de 20 couleurs - 40.1kB

Godot logo 20palette gif.png

  • palette de 5 couleurs - 37.3kB

Godot logo 5palette gif.png

  • palette de 20 couleurs - 21.2kB

Godot logo 2palette gif.png

Références

  1. La notion fondamentales de l'image en informatique sont expliquée sur cette page: les unités en informatique, le pixel est .
  2. Les informations stockées dans une image sur le disque ne sont en rien différentes de celle d'un fichier son, d'une vieo, d'un programme ou d'un driver. C'est ce header et/ou à l'extension de fichier qui vont permettre de lire correctement un fichier.
  3. GIF: Graphics Interchange Format, voir wikipedia.
  4. JPEG: Joint Photographic Experts Group, voir wikipedia.
  5. Pour comprendre l'utilisation de la grille de fréquences DCT du JPEG, voir wikipedia