Avant propos▲
MATLAB est un langage initialement créé pour traiter des problèmes d'analyse numérique.
Il est optimisé pour le calcul matriciel et convient donc parfaitement pour la
manipulation et le traitement d'images numériques. Ces dernières sont en effet représentées
par des tableaux à deux ou trois dimensions (2D ou 3D).
Cet article est avant tout une présentation générale de la gestion des images sous MATLAB. Il n'a pas pour vocation à aborder
les notions de manipulation ou de traitement d'images. Les liens donnés en fin d'article permettront au lecteur d'approfondir les notions
abordées ici.
Certaines parties de cet article sont évolutives (par exemple, le tableau de la première partie) et seront mis à jour au fur et à mesure.
I. Formats de fichiers supportés▲
Les opérations de lecture/écriture des fichiers contenant des images sous MATLAB sont grandement simplifiées grâce à des fonctions toutes faites qui sont disponibles soit :
- dans MATLAB nativement (imread, imwrite, print) ;
- dans les Toolbox dédiées aux images (Image Acquisition, Image Processing, Mapping) ;
- sur le File Exchange du MATLAB Central.
- sur le web
Si vous constatez une erreur ou si vous souhaitez qu'une fonction soit ajoutée aux tableaux suivants, contactez en priorité l'auteur de cet article ou le responsable de la rubrique MATLAB sur Developpez.com
I-A. Formats supportés nativement par MATLAB▲
Format | Lecture | Ecriture |
---|---|---|
BMP | imread | imwrite, print |
CUR | imread | |
EMF | ||
EPS | ||
GIF | imread | imwrite |
HDF | imread | imwrite |
ICO | imread | |
ILL | ||
JPEG/JPEG2000 | imread | imwrite, print |
PBM | imread | imwrite, print |
PCX | imread | imwrite, print |
PGM | imread | imwrite, print |
PNG | imread | imwrite, print |
PNM | imread | imwrite, print |
PPM | imread | imwrite, print |
RAS | imread | imwrite, print |
TIFF | imread | imwrite, print |
XWD | imread | imwrite |
I-B. Formats supportés via les Toolbox▲
Format | Lecture | Ecriture | Toolbox |
---|---|---|---|
Analyze 7.5 | analyze75read | Image Processing | |
DICOM | dicomread | dicomwrite | Image Processing |
FITS | fitsread | fitswrite | Image Processing |
GeoTIFF | geotiffread | geotiffwrite | Mapping |
HDR | hdrread | hdrwrite | Image Processing |
NITF | nitfread | Image Processing |
I-C. Formats supportés via des contributions du File Exchange▲
Si le format de fichiers que vous souhaitez ouvrir ne figure dans aucun des deux tableaux ci-dessus, ou que vous
ne possédez pas les Toolbox, effectuez une recherche sur le
File Exchange de MathWorks.
Pour plus d'informations sur les codes disponibles sur le File Exchange ou sur le web, merci de contacter en priorité leurs auteurs.
II. Outils de gestion des images▲
II-A. Les fonctions MATLAB▲
Les fonctions MATLAB utiles pour gérer les images sont les suivantes :
- image : affiche une image (objet graphique Image) ;
- imagesc : affiche une image (objet graphique Image) avec interpolation des couleurs ;
- imread : lit une image d'un fichier (formats standards) ;
- imwrite : écrit une image dans fichier (formats standards) ;
- imfinfo : extrait des informations d'un fichier (formats standards) ;
- print : exporte une image (formats standards).
II-B. Les Toolbox▲
Il existe trois Toolbox MATLAB spécifiques liées à l'acquisition, à l'analyse et au traitement des images :
- Image Acquisition Toolbox : acquisition d'images et de vidéos à partir de matériel industriel ;
- Image Processing Toolbox : analyse et traitement d'images ;
- Mapping Toolbox : analyse et visualisation de données géographiques.
II-C. Les images tests▲
II-C-1. Images fournies avec MATLAB▲
Chaque image est enregistrée dans un fichier .mat et chacun de ces fichiers comporte deux variables :
- X : le tableau contenant les pixels de l'image ;
- map : la palette de couleurs associées.
Le chargement de ces images s'effectue avec la fonction load et l'affichage peut être obtenu comme ceci :
figure
load(<nom du fichier mat>);
colormap(map);
imagesc(X);
axis image
Il existe aussi une image au format JPEG disponible sur toutes les versions de MATLAB (même les plus anciennes) :
Cette image se lit avec la fonction imread et s'affiche avec la fonction image.
II-C-2. Images fournies avec l'Image Processing Toolbox▲
Cette toolbox est livrée avec plusieurs images dans les formats courants (jpeg, tiff, png).
Certaines de ces images sont soumises à un copyright : http://www.mathworks.fr/fr/help/images/image-credits.html
Les images standards (lena, cameraman…) pour le traitement d'images utilisées dans le livre Digital Image Processing Using MATLAB sont disponibles sur le site http://www.imageprocessingplace.com/root_files_V3/image_databases.htm
II-C-2-a. Images au format JPEG▲
II-C-2-b. Images au format TIFF▲
II-C-2-c. Images au format PNG▲
III. Représentation des images▲
III-A. Tableau de pixels▲
MATLAB peut lire des images codées sur 8, 16, 24 ou 32 bits. Mais le stockage de ces données ne peut être fait qu'avec trois types de variables :
III-B. Objets graphiques représentant les images▲
Parmi les nombreux objets graphiques disponibles sous MATLAB, deux permettent de visualiser des images : l'objet graphique de type Image et l'objet graphique de type Surface.
III-B-1. L'objet Image▲
L'objet graphique de type Image est l'objet généralement utilisé pour visualiser les images. Il est généré soit par la fonction image, soit par la fonction imagesc.
Cet objet a pour parent un objet conteneur de type Axes et il ne possède pas lui-même d'objet enfant.
La seule restriction concernant cet objet est qu'il est impérativement créé dans le plan x0y et qu'il ne peut en aucun cas être manipulé en rotation (par des fonctions comme rotate3d par exemple).
Les propriétés principales de cet objet sont :
- CData : tableau 2D ou 3D contenant les valeurs des pixels de l'image ;
- CDataMapping : interprétation des valeurs pixels sous forme de couleur (valeur 'direct' ou 'scale') ;
- XData : position dans le repère x0y du premier et du dernier pixel suivant l'axe x ;
- YData : position dans le repère x0y du premier et du dernier pixel suivant l'axe y.
Vous pouvez consulter la liste complète des propriétés des objets Image.
Le code suivant montre la différence entre une image dont le premier pixel est centré en (1,1) et une autre image dont le premier pixel est centré en (5,4) :
function
placeimage
rgb=rand(3,6,3);
figure('numbertitle'
,'off'
,...
'toolbar'
,'none'
,'menubar'
,'none'
)
subplot(2,1,1)
image(rgb)
axis image
hold on
plot(1,1,'ro'
)
subplot(2,1,2)
image(rgb,'xdata'
,5,'ydata'
,4 )
axis image
hold on
plot(5,4,'ro'
)
Voici le résultat à l'affichage :
III-B-2. L'objet Surface▲
Un objet de type Image étant contraint à être dessiné dans le plan x0y, un objet Surface sera utilisé dans les cas d'affichage
d'image dans un plan quelconque. Ce type d'objet est généré par des fonctions comme : surf, surface, pcolor…
Cet objet a pour parent un objet conteneur de type Axes et il ne possède pas d'objet enfant.
Vous pouvez consulter la liste complète des propriétés des objets Surface.
Un point très intéressant de cet objet est qu'il peut également servir à appliquer une image comme texture sur une surface mathématique.
Le code ci-dessous montre comment plaquer l'image suivante (Projet Blue Marble - NASA's Earth Observatory) sur une sphère :
figure('doublebuffer'
,'on'
,...
'renderer'
,'opengl'
,...
'numbertitle'
,'off'
,...
'name'
,'Projet Blue Marble - NASA''s Earth Observatory'
,...
'menubar'
,'none'
,...
'toolbar'
,'none'
,...
'units'
,'pixels'
,...
'position'
,[200 200 400 300])
X = imread('BlueMarble.jpg'
,'jpg'
);
X = X(end:-1:1,:,:);
n = 50;
theta = (-n:2:n)/n*pi;
phi = (-n:2:n)'/n*pi/2;
cosphi = cos(phi); cosphi(1) = 0; cosphi(n+1) = 0;
sintheta = sin(theta); sintheta(1) = 0; sintheta(n+1) = 0;
r = 1;
x = r*cosphi*cos(theta);
y = r*cosphi*sintheta;
z = r*sin(phi)*ones(1,n+1);
surf(x,y,z,'facecolor'
,'texturemap'
,...
'cdata'
,X,'edgecolor'
,'none'
);
axis tight
axis equal
axis off
axis vis3d
cameratoolbar
cameratoolbar('setcoordsys'
, 'none'
)
Ce qui donne :
Sous MATLAB, utilisez le bouton « Orbit Camera » () de la barre d'outils pour faire tourner la sphère terrestre.
IV. Ressources disponibles▲
De nombreuses ressources sont disponibles sur Internet afin de s'initier ou se perfectionner à la manipulation et au traitement d'images :
FAQ MATLAB - Traitement d'Images
Forum Traitement d'Images sous MATLAB
Forum Algorithmes
Image Processing Toolbox Demos
Image Processing Webinars
Le File Exchange
Steve on Image Processing
V. Les images cachées (Easter Eggs)▲
De nombreux développeurs MATLAB furent surpris, suite à une mauvaise manipulation (l'appel de la fonction image sans argument), de voir apparaitre la photo d'un petit garçon à l'écran (qui plus est la tête à l'envers) :
Steve Eddins a donné la clé de ce mystère dans son blog. Voici donc un programme permettant de visualiser les 15 images cachées dans MATLAB depuis la version 5.0 :
function
showhiddenimages
defimage = pow2(get(0,'DefaultImageCData'
),47);
figure('numbertitle'
,'off'
,'name'
,'MATLAB hidden images'
,...
'toolbar'
,'none'
,'menubar'
,'none'
)
colormap(gray)
X = [47,51
42,46
37,41
36,36
35,35
34,34
33,33
28,32
23,27
18,22
13,16
9,12
5,8
1,4];
for
n=1:14
subplot(3,5,n)
imagesc(bitslice(defimage,X(n,1),X(n,2)));
axis image off
title(num2str(n))
end
subplot(3,5,15)
r = bitslice(defimage,0,0);
g = bitslice(defimage,17,17);
b = bitslice(defimage,34,34);
imagesc(cat(3,r,g,b));
axis image off
title('15'
)
function
b = bitslice(a,lowbit,highbit)
%BITSLICE(A,LOWBIT,HIGHBIT)
numbits = highbit - lowbit + 1;
b = bitshift(a,-lowbit);
b = fix(b);
b = bitand(b,bitcmp(0,numbits));
b = b/max(b(:));
Commentaires sur ces images (toujours d'après Steve Eddins) :
- le plus vieux des fils de Steve Eddins ;
- un chien appartenant à un développeur de MathWorks ;
- un autre chien appartenant à un développeur de MathWorks ;
- l'inverse de la matrice de Hilbert (3x3) ;
- le logo (initial et de mauvaise résolution) de MathWorks ;
- le nombre préféré de Loren Shure ;
- le carré magique (3x3) ;
- le plus jeune des fils de Steve Eddins ;
- le carré magique caché dans la gravure de Albrecht Dürer, Melancholia ;
- des pièces de monnaie (en fait un calembour en anglais…) ;
- Loren Shure âgée de 4 ans ;
- Wilkinson, Givens, and Forsythe, à la Gatlinburg Conference de 1964 sur l'algèbre numérique ;
- Steve Eddins lui-même ;
- l'image par défaut de MATLAB 4 ;
- l'histoire du cochon jaune.
Sources : The Story Behind the MATLAB Default Image, par Steve Eddins