Vous êtes sur la page 1sur 7

Exercices Traitement d’image

Aller télécharger les images disponibles depuis le site de cours et les sauvegarder dans votre
répertoire courant.

1 Lecture/écriture d’image
La commande « imread » permet de lire un fichier d’image :

Function Description
imread Read image from graphic file.
(file,format) File specifies the path of the image to be loaded.
Format specifies which format is used for this file: jpg, tif, png, etc
Format can be omitted for known extensions.
imwrite(A, file, Write image to graphic file.
format) A is the array containing data.
File specifies the path of the image to be written.
Format specifies which format is used for this file.
Par exemple :

im = imread(‘image1.jpg’) ;

imwrite(im , ’image1.tif’ , ’tif’) ;

Remarque : Vous pouvez ainsi changer le type de codage d’une image.

Remarque : transformer une image en couleur en N&B : im_nb=rgb2gray(im) ;

Remarque: La variable « im » est une matrice de dimension 2 (pour des images en niveau de gris).

Vérifier ceci utilisant la commande size(im)

2 Affichage d’une image


Function Description
image() Display the image

La commande « image(im) » permettra d’afficher l’image. Si l’image n’est pas affichée correctement,
ajouter la commande "colormap(gray(256)) ;"

La commande "axis equal" permet d’avoir une bonne échelle horizontale et verticale.

Utiliser la commande "class()" pour trouver le type des pixels.

Exercice 1: lire l’image en couleur ‘peppers.jpg’, le transformer en niveau de gris, et l’afficher.

3 Transformation en float
Pour faciliter le travail, il est possible de transformer l’image en nombre réel dans l’intervalle [0,1].
On peut donc effectuer la commande

imR = double(im) / 255;

1
4 Zoom
Ecrire une fonction de zoom (zoomImage) pour zoomer de 𝑘𝑥 en direction de 𝑥 et de 𝑘𝑦 en direction
de 𝑦 ; et le tout dans un carré dont le coin supérieur gauche est donné en argument. On obtiendra
une image de la même taille que l’image d’origine.

Function [imageZ] = zoomImage (im, kx, ky, x0, y0) ; .

function imageZ = zoomImage(im, kx,ky,x0,y0)


[M,N]=size(im);
imageZ=zeros(M,N);
for i=1:M
for j=1:N
imageZ(i,j)=im(round(x0+i/kx), round(y0+j/ky));
end
end

Exercice 2 : prendre l’image ‘lenna_large.gif’), et appliquer un zoom 4x pour mieux voir les yeux.

5 Rotation
Ecrire une fonction (rotateImage) qui prendra une image, l’angle de rotation en degré, et le point
autour duquel la rotation s’effectuera.

Function [imageR] = rotateImage (im, theta, x0, y0) ; .

function imageR = rotateImage(im,theta,x0,y0)


[M,N]=size(im);
imageR=zeros(M,N);
Th=[cos(theta) sin(theta); -sin(theta) cos(theta)];
for x=1:M
for y=1:N
p = (round(Th * [(x-x0); (y-y0)]))+[x0 ; y0];
if (p(1)<=M && p(2)<=N && p(1)>0 && p(2)>0)
imageR(x,y)=im(p(1),p(2));
end
end
end

Il existe la fonction imrotate(A,angle) sous matlab.

6 Déformation
Nous essayons de créer un effet ludique. Faite les transformations ci-dessous à la fois sur x et à la fois
sur y (trouver une formule qui approxime ces courbes):

2
𝑦 = 2.5625𝑥 − 4.6875𝑥 2 + 3.125𝑥 3

xr=round(M*(2.5625*x/M-4.6875*(x/M)^2+3.125*(x/M)^3));
yr=round(N*(2.5625*y/N-4.6875*(y/N)^2+3.125*(y/N)^3));

7 Modification d’intensité des pixels


7.1 Binarisation de l’image
Une fois l’image est lue par la commande « im=imread », on pourra appliquer la binarisation par la
ligne suivante :
resultat = (im>seuil)*255 ;

Faire varier la valeur de seuil pour visualiser l’effet.

Exercice 3- appliquer la binarisation à l’image de « chiracnb.jpg ».

7.2 Fonction de transformation d’intensité


On peut utiliser la fonction « imadjust » :
g = imadjust(im, [low_in high_in], [low_out high_out], gamma);

Les paramètres low_in, low_out, high_in et high_out sont the valeur entre 0 et 1.

Exercice 4 :

Lire le fichier « Fig3.15(a)3.jpg » et le visualiser. Que reprochez-vous de cette image ? (Contraste


faible). Trouver les valeurs min et max de cette image : max(max(im)), et min(min(im))

Essayer la commande :

im2 = imadjust(im, [la valeur min, la valeur max]/255, [0 1]) ; et afficher l’image résultante.

Image négative avec la commande im2=255-im ; ou utilisant la fonction

im2 = imadjust(im, [0 1], [1 0]) ;

3
7.3 Saturation
Pour appliquer la saturation et puis ajustement

im_dest = im_source ;
im_dest (im_source < Cmin)=Cmin ;
im_dest (im_source >= Cmax)=Cmax ;

7.4
Nous disposons aussi d’une commande matlab « imcontrast » qui ajuste le contraste de manière
interactive.
h1=figure ; imshow(‘lenna_480.tif’) ; colormap(gray(256)) ; imcontrast(h1) ;

7.5 Histogramme
La commande « imhist » donne directement l’histogramme d’une image.

Exercice 5 :

Pour calculer l’histogramme d’une image, on construit un vecteur de taille 256.

h=zeros(1,256) ;

On balaye l’image et à chaque pixel on incrémente le compteur correspondant

Pour tout x : pour tout y : h(im(x,y)) = h(im(x,y)) + 1 ;

Tracer l’histogramme de quelques images de test.

Commande directe matlab : La fonction imhist(im) de matlab trace l’histogramme d’une image.

Tracer l’histogramme de Fig3.15(a)3. On remarque le manque de contraste de cette image en


observant l’histogramme. Améliorer le contraste avec la commande
im2=imadjust(im, [low_in high_in], [low_out high_out]) ;

et puis tracer la nouvelle histogramme sur les mêmes repères. Y a-t-il des améliorations ?
h1=imhist(im)/numel(im) ; h2=imhist(im2)/numel(im2) ; bar(h1,'b') ; hold on;
bar(h2,'r') ;

7.6 Egalisation par l’histogramme


Faire une fonction qui prend une image et qui retourne l’image égalisée.

Function [imageEg] = histoEqualImage (im) ; .

Prenez une image mal contrastée (par exemple lenna_480.tif) et essayer de l’améliorer avec
l’égalisation à base d’histogramme.

Matlab dispose aussi de la commande : « histeq »

4
7.7 Filtre médian
Ecrivez une fonction qui éliminerait le bruit « salt & pepper » sur une fenêtre de taille donnée en
argument.
function imageM = imageMediane(im, windowSize)

Il faudra que la taille soit toujours impaire.

Création d’une image avec le bruit « salt & pepper » :


im(rand(M,N) < 0.05) = 0 ;

im(rand(M,N) < 0.05) = 255 ;

Ensuite appliquer votre filtre médian pour éliminer ce bruit. Pour afficher ces deux images côte à
côte (pour les comparer plus facilement), utiliser la commande imshowpair(im1, im2,’montage’) ;

5
7.8 Filtrage linéaire
Pour appliquer un filtre linéaire sur une image, on peut utiliser la commande "conv2".

Function Description
conv2() conv2(A, B) performs the 2-D convolution of matrices A and B.

Utilisant cette fonction nous pouvons flouter une image. Prenons le masque mask=ones(3,3)/9 ;
Appliquer ce masque à une des images de test. Augmentez la taille du masque et observer le
résultat. Essayer un masque non uniforme.

Remarque : option ‘same’ permet de garder la même taille d’image.


im2 = conv2(im,mask,'same');

7.9 Détection de contour


Ecrire une fonction pour appliquer l’opération de Sobel sur une image.
function imageS = sobel(im)
mask=[-1 -2 -1;0 0 0;1 2 1];
imageS = abs(conv2(im,mask,'same'))+abs(conv2(im,
mask,'same'));

L’image ainsi obtenue est de type double (vérifiable par la commande class(imageS)). Pour retourner
à l’image uint8 avec la dynamique entre 0 et 255 :
imageS=uint8(imageS/max(max(imageS))*255);

Faire un programme de test et afficher l’image et ses contours côte à côte :


imshowpair(im,im3,'montage');

7.10 Sharpening
Ajouter une image à ses contours et les comparer visuellement.
alpha = 1;
im3 = im + alpha * im2;

Remarque : la classe des deux images étant uint8.

Utilisant d’abord Sobel et ensuit le laplacien, tester l’effet de sharpening sur des images de test.

7.11 Local enhancement


Appliquez sur des images de test l’amélioration local avec des paramètres 𝐸, 𝐾0 , 𝐾1 𝑒𝑡 𝐾2 que vous
testerez. Commencez par 𝐸 = 4 ; 𝐾0 = 0.4 ; 𝐾1 = 0.02 ; 𝐾2 = 0.4

7.12 Image en couleur


Lire un fichier d’une image en couleur. Chaque pixel est représenté par 3 octets donc 24 bits par
pixel. Utilisant la commande size() vous trouverez la taille de l’image ainsi que le nombre de couleur :
l’indice 1 pour la rouge, 2 pour la verte et 3 pour la bleue.

6
En effectuant la commande " image(im( : , : , 1) ) ; colormap(gray(256)) ; " on pourra voir uniquement
les composants "rouge".

En calculant une moyenne sur les trois couleurs, construisez une image noir&blanc et l’afficher.

Pour mieux transformer l’image en noir et blanc, des pondérations sont utilisées :

Niveau de gris = 0.299 Rouge + 0.587 Verte + 0.114 Bleu

Essayer ce nouveau moyennage.

La commande rgb2gray peut être utilisée.

imread(‘nom’,’extension’) Lecture d’image


imwrite(A,file,format) Ecriture d’image sur fichier
image() Montrer l’image
colormap(gray(256)) Image niveau de gris
axis equal
imrotate(A,angle) Rotation d’image (angle en degré)
imhist(im) tracer l’histogramme de l’image
Imshowpair(A,B,’montage’)
Conv2(A,B,[‘same’]) Appliquer un masque (convolution 2D)
Class(im) Donne le type des éléments de la matrice

Vous aimerez peut-être aussi