Вы находитесь на странице: 1из 9

Introduction

MATLAB est un langage initialement créé pour traiter des problèmes d'algèbres linéaires
donc ,entant 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.
Il existe trois Toolbox MATLAB spécifiques liées à l'acquisition , à l'analyse et au traitement
des images:

*Image Acquisition Toolbox : acquisition d'images et devidéos à partir de matériel industriel

*Image Processing Toolbox : analyse et traitement d'images

*Mapping Toolbox : analyse et visualisation de données géographiques

Lecture, écriture et affichage d'une image


Matlab est capable de lire et de décoder les fichiers images JPEG, TIFF, BMP,
PNG, HDF, PCX ou XWD. Une image sous Matlab peut être représentée sous
plusieurs formes, mais toujours sous forme d'une matrice. Avant de traiter une image
dans Matlab, il faut la lire et décoder son format afin de la transformer en une
matrice de valeurs.

Lecture d'une image :


_ fonction imread

Ecriture d'une image :


_ fonction imwrite
Affichage d'une image :
_ fonction imshow, imagesc
100

Programme en Matlab
200

img=imread('oiseau.jpg'); 300

figure 400

500
imshow(img);
600

figure
700

imagesc(img) 100 200 300 400 500 600 700 800 900 1000

figure

image (img)
HISTOGRAMME

L’histogramme consiste a compter le nombre de pixels pour chaque niveau de gris .

La fonction Matlab imhist qui permet d’afficher l’histogramme d’une image.

Exemple

On a l’image suivante

avec les valeurs :


- 0 pour un pixel noir ;
- 127/255 pour un pixel gris ;
- 1 pour un pixel blanc.

Les commandes pour afficher l’histogramme de l’image 4*4 :

im1=[127/255 127/255 0 1;127/255 0 0 1;0 127/255 0 1; 127/255 127/255 0 1]


% Création de la LUT pour afficher en niveau de gris
r=[0 0.5 1];
v=[0 0.5 1];
b=[0 0.5 1];
map=[r’ v’ b’];
Création de la LUT pour afficher en niveau de gris
imagesc(im1);
colormap(map) ;
Affichage de l’histogramme
imhist(im1,3) ;

L’histogramme obtenu est le suivant :


Détection de contour

La détection de contours permet de repérer les différents objets qui constituent


la scène de l'image. Il existe de nombreuses méthodes pour trouver les contours des
objets, la plupart sont basées sur les dérivées premières et secondes de l'image.

Programme en Matlab

img = imread('circuit.tif');
cont1 = edge(img,'prewitt');
cont2 = edge(img,'canny');
figure; imshow(img);
figure; imshow(cont1);
figure; imshow(cont2);

La détection de contours permet de repérer


dans les images les objets qui s'y
trouvent avant d'appliquer le traitement uniquement sur ces objets. Pour mieux
comprendre la notion de contour, il est possible de visualiser une image en 3D.

Binarisation
La binarisation est basée sur un seuillage brut. Cela signifie que si un pixel de l’image a
une intensité supérieure à une certaine valeur de seuil, il lui sera attribué la couleur blanche
sinon il sera noir.
Ce procédé est réalisé sur chaque pixel de l’image. Nous obtenons donc une image
comportant seulement deux niveaux (valeur 0 ou 1). L’image est binarisée.

Programme en Matlab

Im=imread('ISABE_LUMI.BMP');
seuil = 128 ;
ImBinaire=Im;
ImBinaire(find(ImBinaire<seuil))=0;
ImBinaire(find(ImBinaire>=seuil))=1;
image(ImBinaire)
Opérations géométriques :

 Les opérations géométriques classiques sont permises avec la boîte à outils de traitement
d'images: rotation, changement de taille, découpage...
L'exemple ci-dessous illustre la rotation d'une image avec Matlab. Dans le premier cas,
imgrot1 est plus grande que img. Dans le second cas, le paramètre 'crop' impose un
découpage de l'image et la taille de l'image imgrot2 est la même que celle de l'image img.

Programme en Matlab

img=imread('image2.bmp');
figure;imshow(img);
imgrot1=imrotate(img,3,'bilinear');
figure;imshow(imgrot1);
imgrot2=imrotate(img,3,'bilinear','crop');
figure;imshow(imgrot2);

Un autre outil géométrique très utile pour détecter les niveaux de gris dans une
image est la fonction de profil. On exécute cette fonction, on choisit à l'aide de la
souris une ligne de l'image et on obtient le profil du niveau de gris le long de cette
ligne.

Programme en Matlab

img=imread('image2.bmp');
figure;imshow(img);
improfile

Segmentation:
La segmentation est une étape importante pour l'extraction des informations
qualitatives de l'image. Elle fournit une description de haut niveau : chaque région
est connectée à ses voisines dans un graphe et chaque région porte une étiquette
donnant des informations qualitatives comme sa taille, sa couleur, sa forme, son
orientation
On regroupe généralement les algorithmes de segmentation en trois grandes
classes :

1. Segmentation basée sur les pixels


2. Segmentation basée sur les régions
3. Segmentation basée sur les contours

Programme en Matlab

close all
clear all
clc
rgb = imread('pears.png');
I = rgb2gray(rgb);
imshow(I)

text(732,501,'Image courtesy of Corel(R)',...


'FontSize',7,'HorizontalAlignment','right')
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)')
L = watershed(gradmag);
Lrgb = label2rgb(L);
figure, imshow(Lrgb), title('Watershed transform of gradient magnitude (Lrgb)')
se = strel('disk', 20);
Io = imopen(I, se);
figure, imshow(Io), title('Opening (Io)')
Ie = imerode(I, se);
Iobr = imreconstruct(Ie, I);
figure, imshow(Iobr), title('Opening-by-reconstruction (Iobr)')
Ioc = imclose(Io, se);
figure, imshow(Ioc), title('Opening-closing (Ioc)')
Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
figure, imshow(Iobrcbr), title('Opening-closing by reconstruction (Iobrcbr)')
fgm = imregionalmax(Iobrcbr);
figure, imshow(fgm), title('Regional maxima of opening-closing by reconstruction (fgm)')
I2 = I;
I2(fgm) = 255;
figure, imshow(I2), title('Regional maxima superimposed on original image (I2)')
se2 = strel(ones(5,5));
fgm2 = imclose(fgm, se2);
fgm3 = imerode(fgm2, se2);
fgm4 = bwareaopen(fgm3, 20);
I3 = I;
I3(fgm4) = 255;
figure, imshow(I3)
title('Modified regional maxima superimposed on original image (fgm4)')
bw = im2bw(Iobrcbr, graythresh(Iobrcbr));
figure, imshow(bw), title('Thresholded opening-closing by reconstruction (bw)')
D = bwdist(bw);
DL = watershed(D);
bgm = DL == 0;
figure, imshow(bgm), title('Watershed ridge lines (bgm)')
gradmag2 = imimposemin(gradmag, bgm | fgm4);
L = watershed(gradmag2);
I4 = I;
I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;
figure, imshow(I4)
title('Markers and object boundaries superimposed on original image (I4)')
Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');
figure, imshow(Lrgb)
title('Colored watershed label matrix (Lrgb)')
figure, imshow(I), hold on
himage = imshow(Lrgb);
set(himage, 'AlphaData', 0.3);
title('Lrgb superimposed transparently on original image')
Image originale Image segmenté

Colored watershed label matrix (Lrgb)

Image courtesy of Corel(R)

Filtrage :
Effectuer un filtrage consiste a réaliser pour chaque pixel de l'image, les trois pas suivants:
– Le centre du filtre est place sur un pixel de l'image
– Chaque pixel de l'image a filtrer est multiplie par le poids correspondant du filtre
– Les produits sont ensuite additionnes et le résultat divise par la somme des poids.

* Il existe des filtres non-linéaires très efficaces par rapport au bruit (conflit: passe-bas et
suppression de détails)

– Souvent, les algorithmes de suppression de bruit sont fort consommateurs au niveau du


temps de calcul
– Il n'existe pas d'algorithme automatique qui donne des résultats satisfaisants sur tout
image (par ex. quelque chose dans la texture de l'image pourrait être interprète par
l'algorithme comme bruit)

programme Matlab

pour filtre moyen

img=imread('image2.bmp');

for i=2:x-1

for j=2:z-1

imf(i,j)=1/9*(img(i-1,j-1)+img(i-1,j)+img(i-1,j+1)+img(i,j-1)+img(i,j)+img(i,j+1)+ …
img(i+1,j-1)+img(i+1,j)+img(i+1,j+1));

end

end

pour filtre gaussien

img=imread('image2.bmp');

F=fspecial('gaussian');

imf2=filter2(F,img);

pour filtre median

img=imread('image2.bmp');

for i=2:x-1

for j=2:z-1

M=[img(i-1,j-1) img(i-1,j) img(i-1,j+1) img(i,j-1) img(i,j) img(i,j+1) img(i+1,j-1) …


img(i+1,j) img(i+1,j+1)];

imf3(i,j)=median(M);

end

end
Pretraitement de documents:
clear all
close all
clc
img= imread('scan3.jpg');
info=imfinfo('scan3.jpg');

info =

Filename: 'C:\Users\Client\Documents\MATLAB\scan3.JPG'
FileModDate: '13-déc.-2010 16:32:’16'
FileSize: 158792
Format: 'jpg'
FormatVersion: ''
Width: 1052
Height: 601
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ''
NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}
Artist: 'oussama '
DigitalCamera: [1x1 struct]
UnknownTags: [2x1 struct]
J=rgb2gray(img) ;
imshow(j)
[row,col]=size(J);
img=imread('scan3.jpg')
seuil=mean(mean(img))
img(img<seuil)=0;
img(img>=seuil)=255;
figure
imshow(img),title('image binarisé')
%%filtrage Gaussien
F=fspecial('gaussian');
gf=filter2(F,img);
%%filtrage par Médian
for i=2:x-1
for j=2:z-1
M=[img(i-1,j-1) img(i-1,j) img(i-1,j+1) img(i,j-1) img(i,j) img(i,j+1)
img(i+1,j-1) img(i+1,j) img(i+1,j+1)];
imf3(i,j)=median(M);
end
end
figure ;imshow(gf)
figure ;imshow(imf3)
%%histogrmme _histogramme veticale_histogramme horizontale

[r,c]=size(im);
for i=1:r
for j=1:c
mat(i,j)=im(i,j);
end
end
figure(1)
imhist(mat);
hh=sum(im);
hv=sum(im');
figure(2)

barh((1:256),hh)
hold on
plot ((1:256),hv,'g')
legend('hori' ,'verti')
%%%rotation successif
img=imread('scan3.jpg');
[x1,z1]=size(img);
while i<=7
img = imrotate(img,-1,'bilinear','crop');
figure;imshow(img)
i=i+1;
end

CONCLUSION
Le traitement d'images permet de modifier le contenu des images afin de tirer
l'information utile pour une application particulière. Matlab offre de nombreuses
possibilités de traitement avec une palette très fournie d'outils prêts à l'emploi.
L'inconvénient majeur de Matlab réside dans sa relative lenteur pour effectuer
certaines opérations de calculs (par exemple la transformée de Fourier). Toutefois
Matlab permet de déployer rapidement des tests pour vérifier la validité d'une
méthode de traitement d'images. La manipulation d'images revient à la manipulation
de matrices qui est très facile grâce au langage de haut niveau de Matlab.

Вам также может понравиться