L'image numérique

Qu'est ce qu'une image numérique ?

On rencontre couramment deux types d'images : les images matricielles (ou bitmap, ou plus rarement raster), et les images vectorielles.

Les images matricielles consistent en un tableau à deux (ou plus) dimensions, dont chaque case contient la valeur d'un pixel (voir la figure [fig:Image-Matricielle]). Le terme pixel est la contraction de « picture element ». Les images fournies par les systèmes d'acquisition (microscope, appareil photo, scanner à plat...) sont de ce type. Elles sont stockées typiquement dans des fichiers aux formats .tif, .bmp, .png, .jpg...

Une image numérique en niveaux de gris
Une image numérique en niveaux de gris
Zoom sur une image numérique
riceRectCropValues

Figure 2.1: Une image matricielle, agrandissement d'une zone de l'image, et affichage des valeurs constituant la matrice image.

Les images vectorielles représentent une image sous la forme d'une série de primitives géométriques : segment, point, cercle, polygone... Leur gros avantage est que contrairement aux images matricielles, on peut agrandir une image vectorielle autant que l'on veut sans perte de qualité. Elles sont souvent utilisées pour sauvegarder le résultat de graphiques ou de dessins techniques. Elles sont sauvées dans des formats postscript (ps, eps), .fig, .svg...

Dans le cadre du traitement d'images, on travaille exclusivement sur des images matricielles. Les images vectorielles ne sont utilisées que pour sauvegarder des graphiques de résultats. Par contre, on ne se limite pas forcément aux images à deux dimensions.

De manière un peu plus formelle, on peut voir une image comme une application (au sens mathématique du terme) qui à une position donnée p fait correspondre une valeur v. Pour des images planes, la position est un point du plan, repéré par deux coordonnées x et y. La valeur fournie est en général une intensité (lumineuse pour une caméra, de rayonnement pour un tomographe...), ou une information plus complexe (couleur, spectre...). La valeur d'un pixel peut être représentée par un vecteur de q valeurs, avec q=1 pour une image d'intensité. Une image idéale est donc une fonction de la position :

Définition mathématique d'une image numérique

En pratique, une image matricielle est soumise à deux types de 
perte d'information :

  • une discrétisation de l'espace, qui ne mesure la valeur des pixels que pour un nombre fini de positions
  • une quantification de la valeur des pixels en un nombre fini de valeurs, qui résulte de la conversion d'un signal analogique vers un signal numérique

2.1 Discrétisation de l'espace image

Dans les images matricielles 2D, les valeurs sont définies uniquement pour chaque élément de la matrice image. De manière traditionnelle, l'origine de l'image se situe en haut à gauche, en comptant les colonnes vers la droite et les lignes vers le bas, tous les deux en commençant à 0. Les valeurs disponibles sont donc de la forme :

Discrétisation de l'espace
Discrétisation de l'espace

où u et v sont des valeurs entières représentant les indices des colonnes et des lignes, et M et N représentent la largeur et la hauteur de l'image (voir la figure [fig:Grille-Image]).

Discrétisation spatiale d'une image numérique
Discrétisation spatiale d'une image numérique

Figure 2.2: Position des pixels dans le repère image. Chaque pixel est repéré par l'indice de sa ligne (entre 0 et N-1) et l'indice de sa colonne (entre 0 et M-1).

La résolution d'une image spécifie la distance, en unités métriques, entre deux pixels. Pour les images destinées à l'impression, elle est souvent exprimée en points par pouce (dots pet inch, ou DPI). En général, les pixels sont carrés et la résolution est la même pour les directions horizontales et verticales.

Les informations que l'on cherche à extraire des images étant souvent des paramètres de tailles ou de distances entre objets, il est important de disposer de la résolution pour l'analyse. Certains appareils d'acquisition enregistrent la résolution dans les meta-données au sein des fichiers images, ou dans une base de données propre. Pour la visualisation, des barres d'échelle sont parfois incrustées de manière automatique dans l'image, mais leur exploitation automatique n'est pas facile. Enfin, si aucune information de résolution n'est disponible (par exemple pour les caméras), il est nécessaire d'utiliser des mires ou des points de repère de dimension connue.

2.2  Images en niveaux de gris

On peut classer les images en fonction de l'information contenue par chaque pixel.

2.2.1 Quantification des niveaux de gris

Les images les plus simples contiennent une valeur d'intensité, codée sur un nombre fini de niveaux de gris (on abrège parfois niveaux de gris en NDG). Le plus souvent, le nombre de niveaux de gris est codé sur 256 valeurs, le noir correspondant à la valeur 0 et le blanc à la valeur 255.

Une image numérique en niveaux de gris
Une image numérique en niveaux de gris
Zoom sur une image numérique
riceRectCropValues

Figure 2.3: Une image matricielle, agrandissement d'une zone de l'image, et affichage des valeurs constituant la matrice image.

Le nombre 256 vient de la représentation informatique des nombres entiers. L'unité de base manipulée par les ordinateurs est le bit, dont la valeur vaut soit 0 soit 1. Ces bits sont le plus souvent regroupés en octets, contenant 8 bits. Le nombre d'octets différents est égal à 2^8=256. En quantifiant les niveaux de gris sur un octet, on peut ainsi représenter 256 niveaux de gris différents.

Certains systèmes d'acquisition permettent d'acquérir des images avec une intensité codée sur 12, 14 ou 16 bits, permettant de représenter jusqu'à 4096, 16384 ou 65536 valeurs différentes. L'intérêt est de pouvoir détecter des variations d'intensité plus subtiles, mais leur visualisation nécessite des logiciels adaptés.

2.2.2 Images binaires

Les images binaires sont des images en niveau de gris particulières, dont les valeurs valent soit 0 (noir), soit 1 (blanc). On cherche souvent à se ramener les images de départ à des images binaires, car il est très facile ensuite d'identifier les objets présents (Figure 2.4).

imgBinX16
imgBinValues

Figure 2.4 : Une image binaire, avec le tableau de valeurs  correspondant. L'image est représentée en négatif (les valeurs 1 en noir, les valeurs 0 en blanc), afin de mieux visualiser les structures.

2.2.3 Images d'intensité

Il est possible de représenter la valeur des pixels avec des nombres à virgule flottante. Cela peut être utile si l'information stockée a une signification physique que l'on souhaite analyser (carte d'altitude, de profondeur, de densité...), ou pour stocker le résultat d'opérations arithmétiques sur plusieurs images. Par contre, les images en virgule flottante occupent plus de place en mémoire que les images en niveaux de gris. De plus, les valeurs minimales et maximales ne sont pas connues a priori, ce qui peut poser des problèmes d'affichage. On préfère donc en général stocker les résultats finaux en niveaux de gris.

2.3 Images couleurs

On rencontre plusieurs types d'images couleur, qui sont affichées de manière très similaire, mais dont la représentation interne est très différente.

2.3.1 Images en vraies couleurs

Les images en vraies couleurs stockent pour chaque pixel 3 composantes : rouge, vert, bleu (ou RGB, pour Red-Green-Blue), voir la figure [fig:Composantes-Image-Couleur]. Ces trois composantes permettent de représenter toutes les autres couleurs, y compris les nuances de gris.

peppers-rgb

Figure 2.5 Décomposition d'une image couleur en ses trois composantes rouge, verte et bleue.

Si chaque composante est codée sur 8 bits (soit 256 valeurs possibles), on peut ainsi représenter jusqu'à 256x256x256=16 millions de couleurs différentes. On parle aussi d'images couleurs 24 bits. Pour le stockage, on rajoute parfois 8 bits supplémentaires. Cet ajout permet de coder chaque pixel sur un entier de 32 bits, qui est l'unité de calcul de base de nombreux ordinateurs, et d'extraire les composantes par des opérations opérant au niveau du bit.

Le traitement d'images sur des images couleurs est difficile. On utilise parfois des espaces couleurs différents, qui sont plus adaptés que les composantes rouge-vert-bleu. L'espace HSV décompose chaque pixel en trois composantes de teinte (hue, qui représente la couleur principale), de saturation (dosage entre « coloré » et « gris »), et de valeur (qui correspond à l'intensité globale du pixel).

2.3.2 Images couleurs indexées

Les images couleurs indexées stockent pour chaque pixel un numéro de couleur (son index), qui fait référence à une couleur stockée séparément dans une palette.

L'intérêt de ces images est de réduire l'espace de stockage nécessaire, au prix d'une perte de qualité par rapport aux images en vraies couleurs. Par exemple, une image en 256 couleurs indexées occupera sensiblement la même place qu'une image en 256 niveaux de gris (la place occupée par la palette est négligeable par rapport à la taille de l'image).

2.3.3 Imagerie multi-canaux

En microscopie multi-canaux, on a l'habitude de représenter chaque canal avec une couleur différente. La représentation finale apparaît donc en couleur du fait de la combinaison des canaux associés aux couleurs rouge, verte et bleue (Figure 2.5).

Image multi-canale visualisée en couleurs
Image multi-canale visualisée en couleurs

Figure 2.6 : Représentation d'une image multi-canaux en montrant soit chaque canal séparément, soit en combinant les canaux pour former une image en fausses couleurs.

Il faut bien garder à l'esprit que l'image ainsi obtenue est une image synthétique obtenue en combinant plusieurs images d'intensité, mais que les couleurs ainsi obtenues sont totalement arbitraires, et dépendent entre autres choses de l'ordre des composantes.

2.3.4 Autres types de données

On distingue souvent les images monomodales et les images multimodales. Les pixels d'une image monomodale sont représentés par une valeur unique. C'est le cas des images en niveau de gris.

Les images multimodales peuvent être décomposées en plusieurs composantes monomodales. Par exemple, une image couleur peut être décomposée en 3 composantes rouge, verte, et bleu, tandis qu'une image complexe peut être décomposé en 2 composantes réelle et imaginaire. Chaque composante peut être étudiée ou travaillée séparément. On parle dans ce cas d'approche marginale. Il est souvent plus judicieux (et plus compliqué) de concevoir des traitements qui tiennent compte de l'ensemble des composantes.

2.4 Formats d'image

La sauvegarde des images sous forme de fichier nécessite de stocker non seulement la liste des valeurs des pixels, mais aussi la taille de l'image et la manière dont sont codés les pixels.

Les images étant des données volumineuses, on peut être tenté de les compresser. Cependant, les algorithmes de compression efficaces pour les images courantes en milieu scientifique induisent une perte de données. Il vaut donc mieux stocker les images sous une forme non compressée, de préférence au format TIF.

2.4.1 Structure des fichiers

Un fichier image est en général composé de deux parties : un en-tête, et des données. L'exception concerne les fichier raw, qui ne contiennent que les données brutes, et qui ne peuvent pas être lues sans connaître les conditions dans lesquelles a été acquise l'image.

L'en-tête contient la taille de l'image, le type de donnée (binaire, couleur, niveau de gris...), le nombre de bits utilisés pour le codage, l'ordre dans lequel sont stockés les valeurs, le type de compression utilisé... On peut parfois y trouver des informations utilisateurs (meta-données), telles que les données EXIF. Suivent ensuite les données, éventuellement compressées, qui ne peuvent être lues qu'une fois l'en-tête décodé.

2.4.2 Compression des images

La compression permet de transformer un ensemble de données de départ, correspondant aux valeurs des pixels, en un autre ensemble de données, de taille plus réduite, mais qui contient l'information de l'ensemble de départ. La décompression est l'opération de reconstruction des valeurs de départ à partir des données compressées. On distingue deux modes de compression : avec perte (ou destructif) et sans perte (ou non destructif).

Dans un mode de compression sans perte, l'image obtenue après décompression correspond exactement à l'image initiale. Plusieurs algorithmes existent, tels que le RLE (Run-Length-Encoding), qui détecte les plages de pixels de même valeur, ou le LZW, utilisé par les images GIF.

En pratique, ces types de compression sont plutôt efficaces pour des images avec beaucoup de redondances (beaucoup de zones avec des couleurs uniforme). Les images scientifiques, au même titre que les photographies, contiennent très peu de redondances, et les algorithmes de compression sans perte sont donc assez peu efficaces.

Dans un mode de compression avec perte, on accepte que l'image obtenue après décompression présente quelques différences avec l'image initiale. Les algorithmes utilisent pour cela une décomposition de l'image selon les composantes fréquentielles (compression JPEG) ou basée sur des ondelettes (JPEG2000), et ne conservent que les composantes principales de la décomposition. Il en résulte une détérioration de l'image reconstruite (voir la figure 2.7).

piece
image soumise à compression JPG à 20%
image soumise à compression JPG à 40%

Figure 2.7 : Une image sauvée selon différents modes de compression : sans compression, jpg 40% et jpg 20%

Il va de soi que si l'on désire exploiter l'information stockée dans les images, il faut privilégier les modes de compression sans perte.

2.4.3 Quelques formats

Il existent une grande quantité de formats de fichier d'image, mais seuls quelques-uns sont réellement intéressants en pratique.

  • Tagged Image File Format (TIFF) c'est le format de prédilection pour sauvegarder des images scientifiques. Il permet de stocker des images en niveaux de gris, en couleur, binaire, compressée (sans perte) ou non, ainsi que des données utilisateurs (les tags). En général, les microscopes sauvent les conditions d'acquisition.
  • Bitmap (BMP) ce format est très répandu sous Windows, moins sous Linux. Il permet de compresser sans pertes des images en couleurs ou en niveaux de gris.
  • Portabe Network Graphics (PNG) il s'agit d'un format plus standard que le bitmap, qui autorise plus de possibilité de compressions, mais qui reste plus adapté pour les images de type dessin
  • Jpeg (JPG) ce format est beaucoup utilisé pour stocker les photos, mais il compresse les images avec pertes. Il est à proscrire pour l'analyse d'images
  • Portable bit map (PBM), portable gray map (PGM) et portable pixel map (PPM) : ces 3 trois formats stockent les valeurs des pixels dans un fichier texte. L'avantage est qu'un être humain peut lire directement le fichier, mais la taille de ces fichiers est beaucoup plus importante que les autres formats.

Attention enfin aux fausses images en niveaux de gris, qui stockent une valeur d'intensité identique pour les trois canaux rouge vert et bleu. L'image s'affiche en niveaux de gris, mais occupe trois à quatre fois plus de place qu'une vraie image en niveaux de gris...