Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
ACCUEIL MATLAB FORUM MATLAB FAQ MATLAB TUTORIELS MATLAB LIVRES MATLAB

Introduction à la gestion des images sous MATLAB

Date de publication : 29/10/2007 , Date de mise à jour : 16/12/2007

Par Jérôme Briot (Dut)
 

Ce tutoriel est une introduction à la gestion des images sous MATLAB. Dans un premier temps, il récapitule les différents formats de fichiers images supportés. Les outils permettant de gérer les images sont ensuite brièvement présentés. Puis la représentation des images est abordée. Des liens pour s'initier ou se perfectionner au traitement d'images sont ensuite répertoriés. Pour conclure sur une note moins sérieuse, quelques Easter Eggs relatifs aux images sont dévoilés.

Avant propos
1. Formats de fichiers supportés
2. Outils de gestion des images
2-A. Les fonctions MATLAB
2-B. Les Toolbox
2-C. Les images tests
3. Représentation des images
3-A. Matrice image
3-B. Objets graphiques représentant les images
3-B-1. L'objet Image
3-B-2. L'objet Surface
4. Ressources disponibles
5. Les images cachées (Easter Eggs)
Remerciements


Avant propos

MATLAB est un langage initialement créé pour traiter des problèmes d'algèbres linéaires (bibliothèques LAPACK/LINPACK) Donc, en tant qu'outil optimisé pour le calcul matriciel, il convient parfaitement pour le développement rapide d'algorithmes et de programmes pour la manipulation d'images numériques. Ces dernières sont en effet représentées par des matrices à 2 ou 3 dimensions.

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.


1. 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 :

Le tableau suivant est un récapitulatif de la plupart des formats de fichiers supportés par MATLAB

Format Lecture Ecriture Fonctions/Liens Toolbox
Analyze x   readanalyze.m  
Analyze 7.5 x   analyze75read Image Processing
BMP x x imread, imwrite, print  
CUR x   imread  
DICOM x x dicomread, dicomwrite Image Processing
DPX x   DPX file reader  
EMF   x print  
ENVI x x ENVI to MATLAB
MATLAB to ENVI
An improved ENVI file reader,
READ_ENVIHDR
 
EPS   x print  
FDF x x Varian MRI FDF reader Image Processing
FITS x x fits_toolbox,
fits
 
GeoTIFF x   geotiffread Mapping
GIF x x imread, imwrite  
GIPL x x GIPL Toolbox  
HDF-EOS x x Earth Observing System Data Visualization  
HDF4 x x imread, imwrite, print  
ICO x   imread  
ILL   x print  
JPEG x x imread, imwrite, print  
JPEG2000 x x JPEG2000  
JPK x   Opens JPK AFM files  
LSM x   LSM File Toolbox  
METAPOST   x Multi-METAPOST Toolbox  
MINC x x EMMA  
NIfTI x x Tools for NIfTI (ANALYZE) MR image  
PBM x x imread, imwrite, print  
PCX x x imread, imwrite, print  
PGM x x imread, imwrite, print  
PIC x   PicRead  
PNG x x imread, imwrite, print  
PNM x x imread, imwrite, print  
PPM x x imread, imwrite, print  
PSD x   Adobe Photoshop PSD file reader  
RAS x x imread, imwrite, print  
SIF x x Andor SIF image reader  
SIR x   SIR file format utilities  
STK x   Metamorph stacks into Matlab  
SVG   x Scalable Vector Graphics (SVG) Export of Figures  
TIFF x x imread, imwrite, print,
tiffread2
 
VFF x   Micro-CT VFF reader Image Processing
WSQ x x WSQ image library (for fingerprints) v.2.8  
XIF x x XIF Image Reader,
readxif - xiftoolbox
 
XWD x x imread, imwrite  
Format Lecture Ecriture Fonctions/Liens Toolbox

Se référer à la documentation MATLAB pour les fonctions imread, imwrite et print.

Se référer à la documentation de l'Image Processing Toolbox pour les fonctions dicomread, dicomwrite et analyze75read.

Se référer à la documentation de la Mapping Toolbox pour la fonction geotiffread.

Pour plus d'informations sur les codes disponibles sur le File Exchange ou sur le web, merci de contacter en priorité leurs auteurs.

idea Si vous constatez une erreur ou si vous souhaitez qu'une fonction soit ajoutée à ce tableau, contacter en priorité l'auteur de cet article ou le responsable de la rubrique MATLAB sur Developpez.com

2. Outils de gestion des images


2-A. Les fonctions MATLAB

Fonction Description
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 Ecrit une image dans fichier (formats standards)
imfinfo Extrait des informations d'un fichier (formats standards)
print Exporte une image (formats standards)

2-B. Les Toolbox

Il existe trois Toolbox MATLAB spécifiques liées à l'acquisition, à l'analyse et au traitement des images :


2-C. Les images tests

De nombreuses images tests sont disponibles avec ou sans les toolbox spécifiques au traitement d'images.

Avec MATLAB :

Chaque image est enregistrée dans un fichier .mat et chacun de ces fichiers comporte deux variables :

  • X : la matrice 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
Aperçu Fichier Dimension Type
cape.mat X : 360x360
map : 192x3
Couleurs indexées
Classe double [1 size(map,1)]
clown.mat X : 200x320
map : 81x3
Couleurs indexées
Classe double [1 size(map,1)]
detail.mat X : 359x371
map : 64x3
Couleurs indexées
Classe double [1 size(map,1)]
durer.mat X : 648x509
map : 128x3
Couleurs indexées
Classe double [1 size(map,1)]
earth.mat X : 257x250
map : 64x3
Couleurs indexées
Classe double [1 size(map,1)]
flujet.mat X : 400x300
map : 64x3
Couleurs indexées
Classe double [1 size(map,1)]
gatlin.mat X : 480x640
map : 64x3
Couleurs indexées
Classe double [1 size(map,1)]
gatlin2.mat X : 176x260
map : 64x3
Couleurs indexées
Classe double [1 size(map,1)]
mandrill.mat X : 480x500
map : 220x3
Couleurs indexées
Classe double [1 size(map,1)]
spine.mat X : 367x490
map : 64x3
Couleurs indexées
Classe double [1 size(map,1)]


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.

Aperçu Fichier Dimension Type
ngc6543a.jpg 650x600x3 Couleurs vraies - RGB
Classe uint8 [0 255]


Avec l'Image Processing Toolbox :

Cette toolbox est livrée avec plusieurs images dans les formats courants (jpeg, tiff, png).

Format JPEG :

Aperçu Fichier Dimension Type
football.jpg 256x320x3 Couleurs vraies - RGB
Classe uint8 [0 255]
greens.jpg 300x500x3 Couleurs vraies - RGB
Classe uint8 [0 255]


Format TIFF :

Aperçu Fichier Dimension Type
AT3_1m4_01.tif
AT3_1m4_02.tif
...
AT3_1m4_10.tif
480x640 Couleurs indexées
Classe uint8 [0 255]
autumn.tif 206x345x3 Couleurs vraies - RGB
Classe uint8 [0 255]
board.tif 648x306x3 Couleurs vraies - RGB
Classe uint8 [0 255]
cameraman.tif 256x256 Couleurs indexées
Classe uint8 [0 255]
canoe.tif 207x346
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]
cameraman.tif 159x191 Couleurs indexées
Classe uint8 [0 255]
circbw.tif 280x272 Image binaire
Classe logic [0 1]
circuit.tif 280x272 Couleurs indexées
Classe uint8 [0 255]
eight.tif 242x308 Couleurs indexées
Classe uint8 [0 255]
forest.tif 301x447
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]
kids.tif 400x318
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]
logo.tif 107x122 Image binaire
Classe logic [0 1]
m83.tif 378x400
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]
mandi.tif 2014x3039 Couleurs indexées
Classe uint8 [0 255]
moon.tif 537x358 Couleurs indexées
Classe uint8 [0 255]
mri.tif 128x128
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]
paper1.tif 229x224 Couleurs indexées
Classe uint8 [0 255]
pout.tif 291x240 Couleurs indexées
Classe uint8 [0 255]
shadow.tif 223x298
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]
spine.tif 367x490
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]
tire.tif 205x232 Couleurs indexées
Classe uint8 [0 255]
trees.tif 258x350
(map : 256x3)
Couleurs indexées
Classe uint8 [0 255]


Format PNG :

Aperçu Fichier Dimension Type
bag.png 250x189 Couleurs indexées
Classe uint8 [0 255]
blobs.png 272x329 Image binaire
Classe logic [0 1]
circles.png 256x256 Image binaire
Classe logic [0 1]
coins.png 246x300 Couleurs indexées
Classe uint8 [0 255]
concordaerial.png 2036x3060x3 Couleurs vraies - RGB
Classe uint8 [0 255]
concordorthophoto.png 2215x2956 Couleurs indexées
Classe uint8 [0 255]
fabric.png 480x640x3 Couleurs vraies - RGB
Classe uint8 [0 255]
gantrycrane.png 264x400x3 Couleurs vraies - RGB
Classe uint8 [0 255]
glass.png 181x282 Couleurs indexées
Classe uint8 [0 255]
hestain.png 227x303x3 Couleurs vraies - RGB
Classe uint8 [0 255]
liftingbody.png 512x512 Couleurs indexées
Classe uint8 [0 255]
onion.png 135x198x3 Couleurs vraies - RGB
Classe uint8 [0 255]
pears.png 486x732x3 Couleurs vraies - RGB
Classe uint8 [0 255]
peppers.png 384x512x3 Couleurs vraies - RGB
Classe uint8 [0 255]
pillsetc.png 384x512x3 Couleurs vraies - RGB
Classe uint8 [0 255]
rice.png 256x256 Couleurs indexées
Classe uint8 [0 255]
saturn.png 1500x1200x3 Couleurs vraies - RGB
Classe uint8 [0 255]
snowflakes.png 110x370 Couleurs indexées
Classe uint8 [0 255]
tape.png 384x512x3 Couleurs vraies - RGB
Classe uint8 [0 255]
testpat1.png 256x256 Couleurs indexées
Classe uint8 [0 255]
text.png 256x256 Image binaire
Classe logic [0 1]
tissue.png 506x800x3 Couleurs vraies - RGB
Classe uint8 [0 255]
westconcordaerial.png 394x369x3 Couleurs vraies - RGB
Classe uint8 [0 255]
westconcordorthophoto.png 366x364 Couleurs indexées
Classe uint8 [0 255]
warning Certaines de ces images sont soumises à un copyright : Image Credits :: Getting Started (Image Processing Toolbox)
info 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

3. Représentation des images


3-A. Matrice image

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 :

  • le type uint8 (entier non signé de 8bits) de plage [0 255]
  • le type uint16 (entier non signé de 16bits) de plage [0 65535]
  • le type double (réel 64bits) de plage [0 1] (Plus généralement : [-realmax realmax])

Par défaut, les fonctions sous MATLAB étant faites pour traiter des matrices de type double, il peut être nécessaire de convertir les données de la matrice image, codées en type uint8/uint16, en type double avant de les utiliser avec certaines fonctions comme : conv2, convn, fft2, fftn... Dans le cas contraire, un warning sera retourné (exemple avec fftn) :

Warning: FFTN on values of class UINT8 is obsolete.
         Use FFTN(DOUBLE(X)) or FFTN(SINGLE(X)) instead.

MATLAB interprète les couleurs associées à l'image de plusieurs manières selon le type de données contenues dans la matrice image.


3-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.


3-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 : matrice 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
La liste complète des propriétés de l'objet Image est disponible ici.

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 :


3-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.

La liste des propriétés des objets Surface est disponible ici.

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.


4. Ressources disponibles

De nombreuses ressources sont disponibles sur internet afin de s'initier ou se perfectionner à la manipulation et au traitement d'images :

fr FAQ Traitement d'Images
fr Forum Traitement d'Images

en Image Processing Toolbox Demos
en Image Processing Webinars
en Image Processing (FEX)
en Steve on Image Processing


5. Les images cachées (Easter Eggs)

De nombreux développeurs MATLAB furent surpris, suite à une mauvais 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) :

  1. le plus vieux des fils de Steve Eddins
  2. un chien appartenant à un développeur de The MathWorks
  3. un autre chien appartenant à un développeur de The MathWorks
  4. l'inverse de la matrice de Hilbert (3x3)
  5. le logo (initial et de mauvaise résolution) de The MathWorks
  6. le nombre préféré de Loren Shure
  7. le carré magique (3x3)
  8. le plus jeune des fils de Steve Eddins
  9. le carré magique caché dans la gravure de Albrecht Dürer, Melancholia
  10. des pièces de monnaies (en fait un calembour en anglais...)
  11. Loren Shure âgée de 4 ans
  12. Wilkinson, Givens, and Forsythe, à la Gatlinburg Conference de 1964 sur l'algèbre numérique.
  13. Steve Eddins lui-même
  14. l'image par défaut de MATLAB 4
  15. l'histoire du cochon jaune
Sources : The Story Behind the MATLAB Default Image, par Steve Eddins


Remerciements

L'auteur tient à remercier UNi[FR] pour la correction orthographique de cet article.



Valid XHTML 1.1!Valid CSS!

Copyright © 2007-2008 Jérôme Briot. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique MATLAB : Jérôme Briot (Dut) - Contacter par EMail :
Vos questions techniques : forum d'entraide MATLAB - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.