Vous êtes sur la page 1sur 8

Utiliser des images sous MATLAB Version du 20 mars 2012

1 Les images ` TELECOM ParisTech a

Lexistence de lquipe Image de TELECOM ParisTech remonte ` pr`s de 30 ans. e a e Aussi il existe un format dimage spcique puisquil nexistait pas les standards actuels e darchivage. De plus, nous traitons des images de format peu courant (donnes complexes e en ottant ou en double prcision par exemple...). Voil` pourquoi nous continuons ` e a a maintenir ce format.

1.1

Images classiques sur 8 bits

Une image est archive avec deux chiers : e limage stricto sensu, dans un chier sans en tte, en balayage video. Son extension e peut dpendre des donnes. Pour une image Noir et Blanc (NB) classique (8 bits), e e cette extension est .ima. des donnes auxiliaires codes en ASCII (on peut donc diter le chier avec nimporte e e e quel diteur). Le format le plus simple consiste ` crire le nombre de colonnes, puis e ae le nombre de ligne (en entier). Lextension de ce chier est .dim. Il est tr`s facile donc douvrir une image au format TELECOM ParisTech, dautant e quelle nest donc pas comprime. e

1.2

Autres images

Les images classiques Noir et Blanc (celles du grand public) sont archives en 8 bits. e Cependant, les images peuvent tre en couleur, sur 16 bits, . . . e Nous verrons cet aspect au paragraphe 4, dautant que des probl`mes complexes de e plateforme (big endian, small endian) perturbent sv`rement la mise en uvre. Pour les e e images en couleur, un exemple est donn 4.3. e

2
2.1

Quelques ordres Matlab


Lecture et visualisation sous Matlab des images classiques

Il faut utiliser lordre matlab imread. Celui ci reconna un certain nombre de formats t standards (limage processing toolbox en reconna la quasi totalit). Mais, bien entendu, t e le format TSI nest pas susament standard. Dans le cas o` imread lit eectivement limage, lordre image permet un achage u adequat, soit en noir et blanc (mais il faudra probablement modier la colormap, voir les paragraphes suivants), soit en couleur.

2.2

Lecture sous Matlab des images NB 8 bits

Soit une image, avec donc deux chiers. On prend par exemple limage jour1 : elle est dcrite par ses chiers jour1.dim et jour1.ima. e Pour lire ce type de donnes sous Matlab, on dispose dune procdure (.m) : ima2mat.m e e dont la syntaxe, applique par exemple ` la donne jour1 est la suivante : e a e im1 = ima2mat(jour1); Limage est alors accessible en tant que tableau Matlab im1. Les dimensions de cette matrice peuvent se rcuprer ainsi : e e nlig = size(im1,1) ncol = size(im1,2)

2.3

Visualisation dune image

Ici image reprsente des donnes codes en entier entre 0 et 256. e e e Visualiser une image peut seectuer avec lodre image image(im1); une image en niveau de gris doit utiliser la colormap gray : colormap(gray) Cette colormap par dfaut est sur 100 niveaux de gris. e Une image en 256 niveaux de gris ncessite une colormap sur 256 niveaux : e colormap(gray(256)) Si lon veut se contenter de nn niveaux : colormap(gray(nn)) Une image est reprsente dans une fentre en gnral rectangulaire. Si lon veut e e e e e respecter les proportions de limage (par exemple on souhaite quune image carre ait une e febtre carre), il faut utiliser les options de axis : e e axis image Mais attention, ce nest pas pour autant que Matlab achera limage sur un nombre de pixels cran gal au nombre de pixels de limage, ce qui peut provoquer du repliement. e e

2.4

Visualisation dune matrice

Une matrice imz a des valeurs pas ncessairement enti`res, ni relles (exemple : une e e e transforme de Fourier...). e Aussi, il faut prvoir deux tapes : e e passer en rel si besoin e aimz = abs(imz); modier linairement les valeurs pour quelles soient comprises entre 0 et 255. Pour e cela, on recherche le min et le max, puis on normalise la matrice zmin = min(imz(:)); zmax = max(imz(:)); znorme=255/(zmax-zmin); nimz = (imz-zmin)*znorme; image(nimz); 2

2.5

Histogramme dune image

Lhistogramme dun tableau (im1) peut se calculer directement avec hist hist(im1(:)) ou, sur 256 niveaux par pas de 1 entre 0 et 255 : hist(im1(:),0:1:255) Cela donne des rsultats dirents : mez vous de hist utilis sans argument complmentaire e e e e e et consultez le help en ligne.

2.6

Transforme de Fourier dune image e

Matlab donne directement la possibilit deectuer une transforme de Fourier sur un e e signal 2-D (matrice Z). t2 est la procdure de base. A partir dune matrice de rels, elle donnera une e e matrice de complexes. On peut utiliser ou non les arguments 2 et 3 : t2(Z) donnera un rsultat ayant le mme nombre de lignes et de colonnes que la e e matrice initiale Z. t2(Z,p,q) donnera un rsultat sur p lignes et q colonnes, la matrice initiale tant e e complte par des valeurs nulles (ce qui donne un pas frquentiel plus petit, et ee e donc plus de prcision sur lallure du spectre). e Attention, comme la procdure t, le spectre est donn entre 0 et 1 (en frquence e e e normalise). Pour lobtenir entre -0.5 et 0.5, il faut utiliser tshift e it2 permet dobtenir la transforme de Fourier Inverse 2-D. Attention it2(t2(Z)) e donne en gnral un rsultat en complexes mme si Z est une matrice de rel (erreurs e e e e e darrondis). tshift transforme une FFT (1-D ou 2-D) place entre 0 et 1 (frquence normalise) e e e en un rsultat entre -0.5 et 0.5. Cette procdure sapplique tant en 1-D quen 2-D. e e RAPPEL : abs. ne pas oublier quun spectre est complexe. Pour le visualiser, en r`gle gnrale, on prend la norme. abs transforme une matrice complexe en une e e e matrice relle : on peut alors la visualiser comme on le souhaite. e Exemple Soit une matrice Z relle 2-D. Pour visualiser sa FFT-2D, avec la frquence (0,0) au e e milieu de la reprsentation, il sut de taper lordre e surf(abs(fftshift(fft2(Z))));

2.7

Multiplication sous Matlab

MATLAB est un outil ddi aux matrices : a priori, un produit est matriciel et sefe e fectue avec lodre *. Pour eectuer un produit lment par lment de deux matrices, il faut utiliser lordre .*. ee ee

2.8

Autre procdure utile e

conj donne le conjugu dune matrice. e 3

Images 16 bits du monde radar : procdure unie verselle TSI de lecture et criture (bigendian et e smallendian)
Lecture
Lecture sous Matlab des images NB 16 bits (unsigned short) : procdure e imw2mat9

3.1
3.1.1

Soit une image 16 bits, avec donc deux chiers. On prend par exemple limage jour1 : elle est dcrite par ses chiers jour1.dim et soit jour1.imw (si elle a t gnre sans modicae ee e ee tion sur une plateforme bigendian), soit . jour1.IMW (si elle a t gnre sans modication ee e ee sur une plateforme smallendian). Pour lire ce type de donnes sous Matlab, on dispose dune procdure (.m) : imw2mat9.m e e dont la syntaxe, applique par exemple ` la donne jour1 est la suivante : e a e im1 = imw2mat9(jour1); Limage est alors accessible en tant que tableau Matlab im1. Mais attention, ce tableau a des valeurs comprises entre 0 et 65535. Les dimensions de cette matrice peuvent se rcuprer ainsi : e e nlig = size(im1,1) ncol = size(im1,2) Dans ce cas, la procdure Matlab recherchera un chier image qui pourra tre soit e e jour1.imw, soit jour1.IMW On peut aussi imposer lextension : im1 = imw2mat9(jour1.imw); ou bien im1 = imw2mat9(jour1.IMW); Pour acher cette image avec Matlab, il faut se reporter ` la section 2.4. a 3.1.2 Lecture sous Matlab des images complexes 16 bits (unsigned short) : procdure cxs2mat9 e

Soit une image complexe 16 bits (chaque pixel est dcrit par deux octets : le premier e 1 est la partie relle, le second est la partie imaginaire , avec donc deux chiers. On prend e par exemple limage jour1 : elle est dcrite par ses chiers jour1.dim et soit jour1.cxs (si e elle a t gnre sans modication sur une plateforme bigendian), soit . jour1.CXS (si elle ee e ee a t gnre sans modication sur une plateforme smallendian). ee e ee Pour lire ce type de donnes sous Matlab, on dispose dune procdure (.m) : cxs2mat9.m e e dont la syntaxe, applique par exemple ` la donne jour1 est la suivante : e a e
1

Il y a dautres mthodes pour archiver ce type de donnes : voir les spcialistes radar pour cela ! ! e e e

im1 = cxs2mat9(jour1); Limage est alors accessible en tant que tableau Matlab im1. Mais attention, ce tableau a des valeurs complexes dont les parties relles et imaginaires sont comprises entre -32758 e et 32757. Les dimensions de cette matrice peuvent se rcuprer ainsi : e e nlig = size(im1,1) ncol = size(im1,2) Dans ce cas, la procdure Matlab recherchera un chier image qui pourra tre soit e e jour1.cxs, soit jour1.CXS On peut aussi imposer lextension : im1 = imw2mat9(jour1.cxs); ou bien im1 = imw2mat9(jour1.CXS); Pour acher cette image avec Matlab, il faut se reporter ` la section 2.4. a

3.2

Ecriture

Pour une image 16 bits, la procdure ` utiliser est mat2imw9.m. e a Pour une image complexe 16 bits, la procdure ` utiliser est mat2cxs9.m. e a Dans les deux cas, il sut de donner le nom du chier : les extensions spciques (.dim e pour le chier de dimension et .imw ou .cxs) seront gnres automatiquement. Au 20 e ee mars 2012, ces images sont gnres comme si ctait des donnes native BigEndian. e ee e e Voici un exemple o` la matrice A reprsente des donnes 16 bits : u e e mat2imw9( A, image16bits); On aura alors un chier image16bits.dim et un autre chier image16bits.imw Voici un exemple o` la matrice A reprsente des donnes complexes 16 bits : u e e mat2cxs9( A, imagecmplx16); On aura alors un chier imagecmplx16.dim et un autre chier imagecmplx16.cxs

4
4.1

Images diverses et autres formats


Lecture sous Matlab des images NB 16 bits : format Solaris

Soit une image 16 bits, avec donc deux chiers. On prend par exemple limage jour1 : elle est dcrite par ses chiers jour1.dim et jour1.imw. e Pour lire ce type de donnes sous Matlab, on dispose dune procdure (.m) : imw2mat.m e e dont la syntaxe, applique par exemple ` la donne jour1 est la suivante : e a e 5

im1 = imw2mat(jour1); Limage est alors accessible en tant que tableau Matlab im1. Mais attention, ce tableau a des valeurs comprises entre 0 et 65535. Les dimensions de cette matrice peuvent se rcuprer ainsi : e e nlig = size(im1,1) ncol = size(im1,2) Pour acher cette image avec Matlab, il faut se reporter ` la section 2.4. a

4.2

Lecture sous Matlab des images NB 16 bits : format PC

Soit une image 16 bits, avec donc deux chiers. On prend par exemple limage jour1 : elle est dcrite par ses chiers jour1.dim et jour1.IMW. e Pour lire ce type de donnes sous Matlab, on dispose dune procdure (.m) : imw2mat.m e e dont la syntaxe, applique par exemple ` la donne jour1 est la suivante : e a e im1 = IMW2mat(jour1); Limage est alors accessible en tant que tableau Matlab im1. Mais attention, ce tableau a des valeurs comprises entre 0 et 65535. Les dimensions de cette matrice peuvent se rcuprer ainsi : e e nlig = size(im1,1) ncol = size(im1,2) Pour acher cette image avec Matlab, il faut se reporter ` la section 2.4. a

4.3

Images couleur RVB

Matlab peut acher une image en vraies couleurs : les donnes doivent alors tre des e e uint8 (on peut aussi mettre des oat cods entre 0 et 1). Il faut donc crer un tableau e e de dimension 3, la troisi`me composante ayant une taille 3 (3 couleurs, dans lordre RVB). e Voici un exemple o` les trois canaux sont ima, imb et imc. u s=size(ima); imrvb=uint8(zeros(s(1), s(2), 3)); imrvb(:,:,1) = uint8(ima); imrvb(:,:,2) = uint8(imb); imrvb(:,:,3) = uint8(imc); image(imrvb); On peut, pour les images Tlcom ParisTech utiliser les images couleurs dextension ee .rvb en les lisant avec la procdure rvb2mat.m. e

4.4

Autres images

Divers formats dimages coexistent ` Tlcom ParisTech. Ils se reconnaissent princia ee palement par lextension des chiers de donnes, qui est en minuscule lorsque le chier a e t gnr ` partir dune plateforme Solaris (big endian) et majuscule lorsque le chier a ee e eea t gnr par une plateforme PC (small endian). ee e ee 6

4.4.1

Architectures Sun/Motorola (big endian)

Voici quelques extensions pour les chiers big endian : .ima : unsigned char (1 octet) .imw : unsigned short (2 octets) .rvb : 3*unsigned char (couleurs) .ims : signed short (2 octets) .iml : int (long) (4 octets) .imf : oat (4 octets) .imd : double (8 octets) .cxb : complex signed byte (2x 1 octet) .cxs : complex signed short (2x 2 octets) .cxf : complex oat (2x 4 octets) .cxd : complex double (2x 8 octets) Vous trouvez dans ce rpertoire les procdures (.m) suivantes, ` utiliser exclusivement e e a sur les plateforme big endian : ima2mat.m : lit une image 8 bits (unsigned char) au format TSI (chier .ima : les octets, chier .dim : le nombre de colonnes puis de lignes en ASCII), imw2mat.m : lit une image 16 bits (unsigned short) au format TSI (chier .imw : les octets, chier .dim : le nombre de colonnes puis de lignes en ASCII), imf2mat.m : lit une image 32 bits (oat) au format TSI (chier .imf : les octets, chier .dim : le nombre de colonnes puis de lignes en ASCII), rvb2mat.m : lit une image couleur (3 * unsigned char) cxb2mat.m : lit une image complexe 8 bits (signed char pour la partie relle, signed e char pour la partie imaginaire) au format TSI (chier .cxb : les char, chier .dim : le nombre de colonnes puis de lignes en ASCII). cxs2mat.m : lit une image complexe 16 bits (signed short pour la partie relle, signed e short pour la partie imaginaire) au format TSI (chier .cxs : les short, chier .dim : le nombre de colonnes puis de lignes en ASCII). cxf2mat.m : lit une image complexe 32 bits (oat pour la partie relle, oat pour la e partie imaginaire) au format TSI (chier .cxf : les oat, chier .dim : le nombre de colonnes puis de lignes en ASCII). 4.4.2 Architectures PC/Intel (small endian)

Voici quelques extensions pour les chiers small endian : .IMW : unsigned short (2 octets) .IMS : signed short (2 octets) .IML : int (long) (4 octets) .IMF : oat (4 octets) .IMD : double (8 octets) .CXB : complex signed byte (2x 1 octet) .CXS : complex signed short (2x 2 octets) .CXF : complex oat (2x 4 octets) .CXD : complex double (2x 8 octets) Vous trouvez dans ce rpertoire les procdures (.m) suivantes, ` utiliser exclusivement e e a sur les plateforme small endian : IMW2mat.m : lit une image 16 bits (unsigned short) au format TSI (chier .IMW : les octets, chier .dim : le nombre de colonnes puis de lignes en ASCII), 7

IMF2mat.m : lit une image 32 bits (oat) au format TSI (chier .IMF : les oats, chier .dim : le nombre de colonnes puis de lignes en ASCII), CXS2mat.m : lit une image complexe 16 bits (signed short pour la partie relle, e signed short pour la partie imaginaire) au format TSI (chier .CXS : les short, chier .dim : le nombre de colonnes puis de lignes en ASCII). CXF2mat.m : lit une image complexe 32 bits (oat pour la partie relle, oat pour e la partie imaginaire) au format TSI (chier .CXF : les oat, chier .dim : le nombre de colonnes puis de lignes en ASCII). Bien videmment, les images ne faisant intervenir quun octet sont lues indirement sur e e les deux plateformes avec les mme procdures. e e

5
5.1

Ecriture dimages au format TSI


Plateforme Big Endian

Vous trouvez dans ce rpertoire les procdures (.m) suivantes : e e mat2ima.m : crit une matrice en image 8 bits (unsigned char) au format TSI (chier e .ima : les octets, chier .dim : le nombre de colonnes puis de lignes en ASCII), mat2imw.m : crit une matrice en image 16 bits (unsigned short) au format TSI e (chier .imw : les shorts, chier .dim : le nombre de colonnes puis de lignes en ASCII), mat2rvb.m : lit une matrice en image 3*8 bits (unsigned char) au format TSI (chier .ima : les octets, chier .dim : le nombre de colonnes puis de lignes en ASCII). mat2cxs.m : crit une matrice complexe en image complexe 16 bits (signed short) e au format TSI (chier .cxs : les oats, chier .dim : le nombre de colonnes puis de lignes en ASCII), mat2cxf.m : crit une matrice complexe en image complexe 32 bits (oat) au format e TSI (chier .cxf : les oats, chier .dim : le nombre de colonnes puis de lignes en ASCII).

5.2

Plateforme Small Endian

Vous trouvez dans ce rpertoire les procdures (.m) suivantes ` utiliser depuis une e e a plateforme Small Endian (PC) : mat2ima.m : crit une matrice en image 8 bits (unsigned char) au format TSI (chier e .ima : les octets, chier .dim : le nombre de colonnes puis de lignes en ASCII), mat2IMW.m : crit une matrice en image 16 bits (unsigned short) au format TSI e (chier .IMW : les short, chier .dim : le nombre de colonnes puis de lignes en ASCII), mat2CXS.m : crit une matrice complexe en image complexe 16 bits (signed short) e au format TSI (chier .CXS : les oat, chier .dim : le nombre de colonnes puis de lignes en ASCII), mat2CXF.m : crit une matrice complexe en image complexe 32 bits (oat) au format e TSI (chier .CXF : les oat, chier .dim : le nombre de colonnes puis de lignes en ASCII).