Vous êtes sur la page 1sur 15

IMAGE, SCILAB et IMLAB

Les logiciels
Scilab
Dans un premier temps, tlcharger (gratuit) et installer scilab-5.1.1
http://www.scilab.org/download/index_download.php?page=release#windows
Puis tlcharger sivp-0.5.0 (gratuit).
http://fr.sourceforge.jp/projects/sfnet_sivp/releases/
Il sinstalle dans le rpertoire o est install scilab dans
C:\Program Files\scilab-5.1.1\contrib\SIVP-0.5.0 .
Sivp est une bote outil pour le traitement des images
essentiel lanalyse des images dans scilab: on ne peut rien
faire sans cette bote.
Dans le rpertoire SIVP-0.5.0, lancer builder.exe
Doit apparatre sur la console de scilab un onglet bote
outils :
il faut lancer SIVP chaque ouverture de scilab pour pouvoir
utiliser les fonctions de sivp. (botes outils/SIVP)
Les bibliothques doivent tre charges (cf ci-contre)

IMLAB
Un autre bon outil indispensable pour lanalyse des image est
le logiciel IMLAB (gratuit) :
on peut trs facilement ouvrir une image, obtenir la matrice
image, lhistogramme, et faire une tape de choses sur les
images.

Matrices image et histogramme obtenus avec IMLAB :

Jacques Bretin

II. Reprsentation dune image numrique


Une image numrique noir & blanc , cest--dire en 256 teintes de gris, est reprsente par une matrice n*p
dont les nombres sont des lments de Z/256Z.
Chaque nombre de la matrice correspond la teinte dun pixel de limage.
0 correspond au noir, 255 au blanc.
Imlab donne cette matrice avec la teinte du pixel en fond de cellule.
Lhistogramme associ limage donne la quantit de pixels ayant une teinte de gris donne.

Une image numrique couleur , cest--dire en 256 teintes de rouge, vert et bleu, est reprsente par une
matrice n*p*3 dont les nombres sont des lments de Z/256Z.
X(10,5,1), X(10,5,2), X(10,5,3) sont des nombres de Z/256Z correspondant aux
composantes rouge, vert, bleu du pixel de la 10me ligne et 5me colonne.
Sur la figure ci-contre (extrait de la matrice dune image couleur),
le 1er pixel en haut gauche a une couleur de 42 rouge, 23 vert et 51 bleu.
Chaque image couleur a 4 histogrammes :
Un pour chaque couleur et un correspondant la luminosit globale du pixel
(doit correspondre la moyenne des 3 nombres r,v,b).

III Dans Scilab : premiers pas (image noir&blanc)


Aprs avoir lanc Scilab et ouvert la bote outil sivp :
Importation dune image : imread.
Je veux importer une im age (nathangris.jpg) place dans le lecteur F (cf ci-dessous).
X est une matrice (n,p) de n lignes et p colonnes de nombres entiers entre 0 et 255.
Attention : ces nombres sont dans Z/256Z (255+1=0). Ils ont le format uint8 .
Voir limage : imshow.
imshow permet de voir la matrice ; cela dclenche louverture de la fentre image show )

X(1 :10,1:5) (sans ; ) montre lextrait de la matrice (lignes de 1 10, colonnes de 1 5).
La matrice ci-dessous (avec les teintes de gris est obtenue avec Imlab)
Size(X) : donne la taille de la matrice. Ici limage a 101 lignes et 150 colonnes.
Size(X,1) : donne le nombre de lignes. Size(X,2) : donne le nombre de colonnes.

Histogramme de limage :
imhist(X) renvoie une matrice 256*2,correspondant au nombre de pixels de chaque
teinte.
Sur lexemple, il y a 334 pixels ayant la teinte 0 (noir).
Il y a 16 pixels ayant la teinte b(17) =16.
b(1) =0, b(2)=1 b(256)=255.
la matrice vecteur colonne est constitu du nombre de pixels des teintes de 0 255.
bar(imhist(X)) ouvre une nouvelle fentre (Figure n0) et affiche lhistogramme :

On peut rgler lpaisseur des barres (ici 0.1), rgler la couleur


de lintrieur des barres (non visible ici : trop fin ; avec
edit/figure on peut changer la couleur des bords des barres).
Avec edit/axes, on peut amliorer laspect du graphique
Mdiane, quartiles et moyenne, cart type :
median(X) renvoie la mdiane
quart( double(X)) renvoie une matrice de 3 lignes : Q1, mdiane et Q3.
double(X) transforme les entiers de Z/256Z en rels, ncessaire pour le calcul des
quartiles.
mean(double(X)) calcule la moyenne
stdev(double(X)) calcule lcartype.

IV. Oprer sur les images avec scilab


1. Eclaircir une image
Crons une mire constitu de 256 pixels (matrice 16*16) ayant les teintes de 0 255 :

Fonction taper dans lditeur (Applications/editeur), puis charger dans scilab (Excuter/charger).
Il ne reste plus qu excuter la fonction dans la console de scilab (la matrice mire est dfinie par mire=couleur()),
transformer la matrice relle en matrice dimage (nombres dans Z/256Z) (mire=uint8(mire))
puis sauver limage par imwrite (imwrite(F:\mireoriginale.jpg) ).
Il ne reste plus qu ouvrir cette image par photoshop (pour lclaircir par exemple) ou par Imlab (pour visionner la
matrice avec les teintes) :
Mire originale

Mire claircie de 20 par photoshop

On voit que pour claircir de 20, on ajoute 20 toutes les teintes des pixels sans dpasser 255.
1re ide :
Cela revient faire dans scilab : mireplusclaire =mire+20
La matrice mireplusclaire est gale la matrice mire telle que, chaque nombre de mire est augment de 20 (donc
plus clair).
0,1,2,3. deviennent 20,21,22,23 sauf que 235, 236, 237 255 deviennent 255,0,1,2,..29
Si on claircit trop, la mthode pose un problme : les nombres ne peuvent dpasser 255, aussi la somme se fait
modulo 256 : les pixels dont le code dpasse 255 (blanc) vont dvenir trs foncs

2me ide :
Amliorons la mthode :

Explications :
mireplusclaire= double (mire)+20 : La matricemireplusclaire est gale mire mais les nombres sont des rels
(double) au lieu dentiers modulo 256.
T(1 :16,1 :16)=255 : T est une matrice de mme dimension que mire (16*16) et est remplie de 255.
mireplusclaire=MIN(T,mireplusclaire) : les nombres de mireplusclaire qui dpassent 255 deviennent 255.
mireplusclaire =uint8(mireplusclaire) : les nombres de mireplusclaire sont transforms en entiers de 8 bits (code
image) au lieu dtre des rels. mireplusclaire redevient une matrice dune image en 256 teinte de gris et peut tre
affiche.
On a bien obtenue ce quon cherchait : une matrice dimage ayant la teinte de chaque pixel augmente de 20.
3me ide : on regarde laide SIVP
En fait, il y a une commande SIVP qui fait tout cela tout seul !!! :

imadd : commande SIVP qui additionne 2 matrices images ou une matrice et un nombre sans dpasser 255 ; le
rsultat est une matrice image qui peut tre affiche.

Application Nathan :

2. Foncer une image.

imsubtract: commande SIVP qui soustrait 2 matrices images ou une matrice et un nombre sans
dpasser tre ngatif ; le rsultat est une matrice image qui peut tre affiche.
3. ngatif dune image.
imcomplement : donne le ngatif

Cela revient faire nathannegatif= - nathan +255 : la teinte t de chaque pixel est remplace par 255 t.

4. contraster une image.


Laa mme image avec plus ou moins de contraste : (ralis avec la fonction contraste de photoshop)

Dans les oprations de contraste ou de dcontraste , moyenne et mdiane ne se modifient pas ou peu, en
revanche quartiles et cart type sont modifis :
contraster : cart type augmente
dcontraster : cart type diminue
Lide est de modifier les teintes en faisant une homothtie centre sur la mdiane avec rapport >1 pour
contraster et <1 pour dcontraster.
Fonction contraste entrer dans lditeur et charger dans scilab:

Lcart type et les intervalles interquartiles ont grandi : le contraste a augment.


Mdiane fixe et moyenne presque fixe.

Dcontrastons Nathan :

Les intervalles interquartiles et lcart type ont diminus, mdiane fixe et moyenne presque fixe :
limage est moins contrast que limage de nathan original.
Voyons sur la mire :
Original

contraste 1,5

contraste 0,5

Contraste 1,5

Original

Contraste 0,5

On peut sintresser aux 2 fonctions f1,5 et f0,5 qui chaque teinte de loriginal (de 0 255) associe la
teinte correspondante de limage contraste (f1,5) et de limage dcontraste (f0,5) .
Utilisons un tableur et entrons les nombres (extraits). (rigolo programmer par des formules)

250

200

150
f1,5
f0,5
orig

100

50

0
0

50

100

150

200

250

La mdiane de la mire est 127,5 qui est le point fixe de lhomothtie qui contraste.
Ces fonctions semblent peu prs affine ou affine par morceaux ( peu prs car on est sur des entiers).
Fonction f0,5 :
f0,5 (0)=63 et f0,5 (255)=191 et f0,5 (127,5)=127,5. Donc la pente est (191-63)/255 0,5.
On peut essayer la fonction xE(127,5+0,5(x-127,5)) . Une vrification sur le tableur confirme
Fonction fk (k<1) : xEnt(mdiane+k*(x-mdiane)) (normal vu de la programmation de contraste)
Fonction f1,5 : (partie entre 43 et 213, avant cest 0 et aprs cest 255)
f1,5 (43)=0 et f1,5 (213)=255. Donc la pente est 255/(213-43) = 1,5.
On peut essayer la fonction xE(127,5+1,5(x-127,5)) pour la partie oblique .
Une vrification sur le tableur confirme ce rsultat.
Fonction fk (k<1) : xEnt(mdiane+k*(x-mdiane)) sur [E(m*k/(k-1)+1) ;255- E(m*k/(k-1))] ( 1 prs)

V. Bruitage
1. Bruiter une image
X(1 :100,1:100)=128 construit une matrice 100*100 remplie du gris moyen 128
XX=uint8(X) transforme cette matrice X en une matrice image :

Image et histogramme de limage XX.

Y=grand(100,100,'nor',0,1) fabrique une matrice


100*100 remplie de nombres alatoires (loi normale
centre en 0 et dcart type 1) 
T = X+Y ; TT=uint8(T) ;
T est X bruit de Y, TT est limage obtenue :

On peut crer une fonction bruit(T,a) qui bruiterait une image T (a tant lcart type de la loi normale).
function [Z] =bruit(T,a)
Z=double(T);n=size(T,1);p=size(T,2); M(1:n,1:p)=0;N(1:n,1:p)=255; Q=grand(n,p,'nor',0,a);Z=Z+Q;
Z=max(Z,M);Z=min(Z,N) ; Z=uint8(Z);
endfunction
Bruitons Nathan (qui est maintenant dans la matrice X eh oui il a quitt la matrice de la mre)

Original nathangris

Nathan bruit

2. Dbruiter une image


Plusieurs mthodes existent, plus ou moins efficaces.
Mthode 1 :
On parcourt limage par un carr de (2a+1) pixels de ct. Le pixel central du carr de limage dbruite a pour
valeur la mdiane des (2a+1) pixels de limage bruite.
function [Z]= debruit1(T,a)
n=size(T,1); p=size(T,2); Z=T;Z(:,:)=0;
for ligne = a+1 : n-a
for colonne = a+1 : p-a
M=T(ligne-a:ligne+a,colonne-a:colonne+a); b=median(M); Z(ligne,colonne)=b;
end
end
endfunction

Dbruit 1 (a=2)

original

Dbruit1 (a=1)

bruit

dbruit 1 (a=1)

La mthode dbruite mais : 1) cela rend flou 2) il y a une perte dinformation, perte de contour
dbruit original +128

Information perdue = dbruit bruit+128 perte de contour

CEST TOUT POUR LINSTANT .. autres mthodes de dbruitage pour bientt .