Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Ondelettes : travailler avec des images

Cette section offre des informations complémentaires pour travailler avec des images avec Wavelet Toolbox™. Il décrit les types d'images prises en charge et la manière dont l'environnement MATLAB® les représente, ainsi que les techniques d'analyse des images en couleur.

Comprendre les images dans l'environnement MATLAB

La structure de données de base dans MATLAB est la matrice rectangulaire, un ensemble ordonné d'éléments réels ou complexes. Cet objet est naturellement adapté à la représentation des images, qui sont des ensembles ordonnés à valeurs réelles de données de couleur ou d'intensité. (Cette toolbox n'offre pas de support pour les images à valeurs complexes).

Le mot pixel est dérivé de picture element (élément d'image) et désigne généralement un point unique sur un écran d'ordinateur, ou un élément unique dans une matrice d'image. Vous pouvez sélectionner un seul pixel dans une matrice d'image en utilisant l'indiçage matriciel normal. Par exemple :

I(2,15)

donne la valeur du pixel à la ligne 2 et à la colonne 15 de l'image I. Par défaut, MATLAB met les images à l'échelle pour remplir les axes d'affichage ; par conséquent, un pixel d'image peut utiliser plus d'un seul pixel à l'écran.

Images indexées

Une image couleur typique nécessite deux matrices : une colormap (palette de couleurs) et une matrice d'image. La colormap est un ensemble ordonné de valeurs qui représentent les couleurs de l'image. Pour chaque pixel de l'image, la matrice image contient un index correspondant dans la colormap. (Les éléments de la matrice image sont des entiers à virgule flottante, ou flint pour Floating point Integer, que MATLAB stocke comme des valeurs en double précision).

La taille de la matrice de la colormap est de n par 3 pour une image contenant n couleurs. Chaque ligne de la matrice de la colormap est un vecteur de couleur rouge, vert et bleu (RGB) 1 par 3

color = [R G B]

qui spécifie l'intensité des composantes rouge, verte et bleue de cette couleur. R, G et B sont des scalaires réels qui vont de 0,0 (noir) à 1,0 (intensité maximale). MATLAB traduit ces valeurs en intensités d'affichage lorsque vous affichez une image et sa colormap.

Lorsque MATLAB affiche une image indexée, il utilise les valeurs de la matrice d'image pour rechercher la couleur souhaitée dans la colormap. Par exemple, si la matrice de l'image contient la valeur 18 à l'emplacement de la matrice (86,198), la couleur du pixel (86,198) est la couleur de la ligne 18 de la colormap.

En dehors de MATLAB, les images indexées avec n couleurs contiennent souvent des valeurs de 0 à n-1. Ces valeurs sont des indices dans une colormap avec 0 comme premier indice. Les matrices MATLAB commençant par l'indice 1, vous devez incrémenter chaque valeur de l'image, ou décaler vers le haut l'image, pour créer une image que vous pouvez manipuler avec les fonctions de la toolbox.

Décomposition en ondelettes d'images indexées

Les images indexées peuvent être considérées comme des images d'intensité mises à l'échelle, les éléments de la matrice ne contenant que des entiers de 1 à n, où n est le nombre de nuances discrètes dans l'image.

La colormap de l'image n'étant utilisée qu'à des fins d'affichage, il peut être nécessaire de prétraiter certaines images indexées pour obtenir les résultats corrects de la décomposition en ondelettes.

En général, les images indexées en couleur n'ont pas des colormaps linéaires et monotones et doivent être converties en images indexées en niveaux de gris appropriées avant d'effectuer une décomposition en ondelettes.

Images RGB (Truecolor)

Une image RGB, parfois appelée image truecolor, est stockée dans MATLAB sous la forme d'un tableau de données m-par-n-par-3 qui définit les composantes de couleur rouge, verte et bleue pour chaque pixel. Les images RGB n'utilisent pas de palette. La couleur de chaque pixel est déterminée par la combinaison des intensités de rouge, de vert et de bleu stockées dans chaque plan de couleur à l'emplacement du pixel. Les formats de fichiers graphiques stockent les images RGB en tant qu'images de 24 bits, où les composantes rouge, verte et bleue sont de 8 bits chacune. Cela donne un potentiel de 16 millions de couleurs.

La précision avec laquelle une image réelle peut être reproduite explique l'appelation « image truecolor ». Un tableau RGB MATLAB peut être de classe double, single, uint8 ou uint16. Dans un tableau RGB de classe double, chaque composante de couleur est une valeur comprise entre 0 et 1.

Les composantes de couleur d'une image RGB 8 bits sont des nombres entiers dans la plage [0, 255] plutôt que des valeurs à virgule flottante dans la plage [0, 1].

Décomposition en ondelettes d'images truecolor

Les images truecolor analysées sont des tableaux m-par-n-par-3 de uint8. Chacune des composantes tricolores est une matrice qui est décomposée à l'aide du schéma de décomposition en ondelettes bidimensionnelles.

Conversion d’images

Le software Image Processing Toolbox™ propose un ensemble complet de fonctions qui vous permettent de facilement faire des conversions entre des types d'images. Si vous n’avez pas Image Processing Toolbox™, cet exemple montre comment effectuer des conversions à l’aide de commandes MATLAB® de base.

Exemple 1 : Conversion d'images indexées en couleur

Téléchargez et affichez une image en couleurs indexées. La barre de couleur à droite de l'image n'est pas lisse et ne progresse pas de façon monotone du sombre au clair. Ce type d'image indexée ne convient pas à la décomposition directe en ondelettes avec la toolbox et doit être prétraité.

load xpmndrll
whos
  Name        Size              Bytes  Class     Attributes

  X2        192x200            307200  double              
  map        64x3                1536  double              
image(X2)
title("Original Color Indexed Image")
colormap(map)
colorbar

Figure contains an axes object. The axes object with title Original Color Indexed Image contains an object of type image.

Tout d'abord, séparez l'image en couleurs indexées en ses composantes RGB.

R = map(X2,1);
R = reshape(R,size(X2));
G = map(X2,2);
G = reshape(G,size(X2));
B = map(X2,3);
B = reshape(B,size(X2));

Convertissez les matrices RGB en une image d'intensité de niveaux de gris, en utilisant les pondérations perceptuelles standard pour les composantes tricolores.

Xrgb = 0.2990*R + 0.5870*G + 0.1140*B;

Reconvertissez l'image d'intensité de niveaux de gris en une image en niveaux de gris indexés avec 64 niveaux distincts et créez une nouvelle colormap avec 64 niveaux de gris. La barre de couleur de l'image convertie est maintenant linéaire et présente une transition douce du sombre au clair.

n = 64;
X = round(Xrgb*(n-1))+1; 
map2 = gray(n);
figure
image(X)
title("Processed Gray Scale Indexed Image") 
colormap(map2)
colorbar

Figure contains an axes object. The axes object with title Processed Gray Scale Indexed Image contains an object of type image.

Exemple 2 : Conversion d'une image TIF RGB

Chargez et affichez une image TIF RGB.

A = imread("example.tif");
whos A
  Name        Size                 Bytes  Class    Attributes

  A         650x600x3            1170000  uint8              
figure
image(A)
title("Original Image")
colorbar

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

Convertissez l’image en type de données double. Ensuite, combinez les composants RGB en une image d'intensité de niveaux de gris, en utilisant les pondérations perceptuelles standard pour les composantes tricolores :

Ad = double(A);
Argb = 0.2990*Ad(:,:,1) + 0.5870*Ad(:,:,2) + 0.1140*Ad(:,:,3);

Utilisez la fonction wcodemat pour convertir l'image d'intensité de niveaux de gris en une image en niveaux de gris indexés avec 255 niveaux distincts et créez une nouvelle colormap avec 255 niveaux de gris :

NbColors = 255; 
Aind = wcodemat(Argb,NbColors); 
Amap = pink(NbColors);
figure
image(Aind)
colormap(Amap)
title("Processed Image")
colorbar

Figure contains an axes object. The axes object with title Processed Image contains an object of type image.

Vous pouvez utiliser le même programme pour convertir des fichiers BMP ou JPEG.

Voir aussi

| |