Introduction à la gestion des images sous MATLAB

Apprendre à mieux programmer en MATLAB

Cet article est une introduction à la gestion des images sous MATLAB.

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

Public visé : sans être destiné aux novices, cet article vise un public débutant avec l'utilisation des images sous MATLAB.

Votre avis et vos suggestions sur cet article m'intéressent !
Alors après votre lecture, n'hésitez pas : 9 commentaires Donner une note à l'article (5)

Article lu   fois.

L'auteur

Site personnelPage personelle de Jérôme Briot (Dut)

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 :

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   print
EPS   print
GIF imread imwrite
HDF imread imwrite
ICO imread  
ILL   print
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 :

II-C. Les images tests

II-C-1. Images fournies avec MATLAB

Aperçu du contenu de cape.mat
cape.mat
Aperçu du contenu de clown.mat
clown.mat
Aperçu du contenu de detail.mat
detail.mat
Aperçu du contenu de durer.mat
durer.mat
Aperçu du contenu de earth.mat
earth.mat
Aperçu du contenu de flujet.mat
flujet.mat
Aperçu du contenu de gatlin.mat
gatlin.mat
Aperçu du contenu de gatlin2.mat
gatlin2.mat
Aperçu du contenu de mandrill.mat
mandrill.mat
Aperçu du contenu de spine.mat
spine.mat
   

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 :

 
Sélectionnez
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) :

Aperçu de ngc6543a.jpg
ngc6543a.jpg

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

Aperçu de football.jpg
football.jpg
Aperçu de greens.jpg
greens.jpg

II-C-2-b. Images au format TIFF

Aperçu de AT3_1m4.tif
AT3_1m4_01.tif, AT3_1m4_02.tif… AT3_1m4_10.tif
Aperçu de autumn.tif
autumn.tif
Aperçu de board.tif
board.tif
Aperçu de cameraman.tif
cameraman.tif
Aperçu de canoe.tif
canoe.tif
Aperçu de cell.tif
cell.tif
Aperçu de circbw.tif
circbw.tif
Aperçu de circuit.tif
circuit.tif
Aperçu de eight.tif
eight.tif
Aperçu de forest.tif
forest.tif
Aperçu de kids.tif
kids.tif
Aperçu de logo.tif
logo.tif
Aperçu de m83.tif
m83.tif
Aperçu de mandi.tif
mandi.tif
Aperçu de moon.tif
moon.tif
Aperçu de mri.tif
mri.tif
Aperçu de paper1.tif
paper1.tif
Aperçu de pout.tif
pout.tif
Aperçu de shadow.tif
shadow.tif
Aperçu de spine.tif
spine.tif
Aperçu de tire.tif
tire.tif
Aperçu de trees.tif
trees.tif
   

II-C-2-c. Images au format PNG

Aperçu de bag.png
bag.png
Aperçu de blobs.png
blobs.png
Aperçu de circles.png
circles.png
Aperçu de coins.png
coins.png
Aperçu de concordaerial.png
concordaerial.png
Aperçu de concordorthophoto.png
concordorthophoto.png
Aperçu de fabric.png
fabric.png
Aperçu de gantrycrane.png
gantrycrane.png
Aperçu de glass.png
glass.png
Aperçu de hestain.png
hestain.png
Aperçu de liftingbody.png
liftingbody.png
Aperçu de onion.png
onion.png
Aperçu de pears.png
pears.png
Aperçu de peppers.png
peppers.png
Aperçu de pillsetc.png
pillsetc.png
Aperçu de rice.png
rice.png
Aperçu de saturn.png
saturn.png
Aperçu de snowflakes.png
snowflakes.png
Aperçu de tape.png
tape.png
Aperçu de testpat1.png
testpat1.png
Aperçu de text.png
text.png
Aperçu de tissue.png
tissue.png
Aperçu de westconcordaerial.png
westconcordaerial.png
Aperçu de westconcordorthophoto.png
westconcordorthophoto.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 :

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

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) :

 
Sélectionnez
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 :

Image non disponible

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 :

Image non disponible
 
Sélectionnez
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 :

Image non disponible

Sous MATLAB, utilisez le bouton « Orbit Camera » (Image non disponible) 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) :

Image non disponible

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 :

 
Sélectionnez
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(:));
Image non disponible

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 MathWorks ;
  3. un autre chien appartenant à un développeur de MathWorks ;
  4. l'inverse de la matrice de Hilbert (3x3) ;
  5. le logo (initial et de mauvaise résolution) de 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 monnaie (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

Je tiens à remercier UNi[FR] et Winjerome pour la correction orthographique de cet article.

  

Copyright © 2007-2014 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.