Académique Documents
Professionnel Documents
Culture Documents
DES TRAVAUX
PRATIQUES DE LA
PREMIERE PARTIE DU
TRAITEMENT
DIMAGE
Par Mahmoud Zyate
Et Abdelhalim Kamrani
Enseignants :
M. ZARGHILI
Arsalane
Sommaire
Sommaire.....................................................................................................2
Introduction..................................................................................................3
TP2 : Histogramme et Binarisation..............................................................4
Histogramme............................................................................................4
Egalisation dhistogramme....................................................................4
Etirement de lhistogramme..................................................................5
Comparaison entre ltirement et lgalisation.....................................5
Binarisation...............................................................................................6
Binarisation locale.................................................................................6
Binarisation globale : mthode dOTSU.................................................7
TP 3 : Filtrage Spatial...................................................................................9
Filtrage linaire.........................................................................................9
Filtre moyenneur...................................................................................9
Filtre gaussien......................................................................................10
Filtrage non linaire................................................................................11
Filtre mdian........................................................................................11
TP 4 : Filtrage frquentiel...........................................................................13
Filtre passe-bas, filtre passe-haut........................................................13
Introduction
Lobjectif de ces travaux pratiques est de nous faire manipuler les
diffrentes techniques de traitement dimage tout en utilisant Matlab. Il
nous faudra crer des scripts et des fonctions selon le contexte sur Matlab
afin de raliser les diffrents exercices.
TP2 : Histogramme et
Binarisation
Dans ce TP, nous tudierons lhistogramme, la binarisation que ce
soit globale, locale ou hybride, ltirement et lgalisation.
Histogramme
Lhistogramme dune image en niveau de gris associe chaque
valeur dintensit le nombre de pixels prenant cette valeur. Pour crer
lhistogramme dune image en niveau de gris, il suffit de parcourir limage
pour compter le nombre de pixels de chaque valeur. Voici, en langage
Matlab, la mthode de calcul de lhistogramme dune image en niveau de
gris dans une fonction quon nomme im_histo.
function[W]=im_histo(A)
%fonction permettant de calculer l'histogramme de l'image A
%On commence par initialiser une matrice d'une ligne et 256 colonne
%avec des zeros
W=zeros(1,256);
[p,q]=size(A);
%on parcours ensuite notre image
for i=1: p
for j=1: q
%pour chaque pixel rencontr, on incrmente sa valeur de 1 dans
%notre vecteur W
x=A(i,j)+1;
W(x)=W(x)+1;
end
end
%bar(W) % ajouter si on veut que la fonction retourne le dessin du
%vecteur en bars plutt que le vecteur uniquement
End
Egalisation dhistogramme
Cette transformation consiste rendre le plus plat possible
lhistogramme des niveaux de gris de limage, de faon harmoniser la
rpartition des niveaux de luminosit de limage. Cette opration vise
augmenter les nuances dans limage, cest--dire renforcer le contraste
sur des dtails de limage qui sont masqus par des variations dintensit
de plus grande amplitude et plus grande chelle.
Le code correspondant cette opration est le suivant, sachant que
MATLAB a dj implment ce fonctionnement dans sa fonction histeq :
function[Ieq]=Histo_eq(A)
%fonction permetant d'galiser une image A passe en paramtre
[p,q]=size(A);
Hn=im_histo(A)/(p*q);
function[v]=C(k)
%fonction qui va nous permetre de calculer la densit de
%probabilit cumulative.
v=0;
for l=1: k+1
v=v+Hn(l);
end
end
for i=1: p
for j=1: q
Ieq(i,j)=C(A(i,j))*255;
end
end
Ieq=uint8(Ieq); %rendre les valeurs de Ieq des entiers.
end
Etirement de lhistogramme
Cette mthode lmentaire consiste utiliser au mieux lchelle de
niveaux de gris disponibles sur le systme dacquisition dimage. Ceci
revient tendre lhistogramme afin que la valeur dintensit la plus faible
soit zro et que la valeur la plus haute soit la valeur maximale.
De cette faon, si les valeurs de lhistogramme sont trs proches les
unes des autres, ltirement va permettre de fournir une meilleure
rpartition afin de rendre les pixels clairs encore plus clairs et les pixels
foncs proches du noir. Il est ainsi possible daugmenter le contraste dune
image.
On peut coder ce procd sous MATLAB de la manire suivante :
function[Iet]=Histo_Etire(A)
%fonction permetant l'tirement d'un histogramme
[p,q]=size(A);
B=double(A);
pmax=max(max(B)); % la valeur maximale dans l'image
pmin=min(min(B)); % la valeur minimale dans l'image
end
for i=1: p
for j=1: q
a=double(B(i,j)-pmin);
b=double(pmax-pmin);
c=double(a/b);
d=double(255*c);
Iet(i,j)=uint8(d);
end
end
Binarisation
La binarisation est un procd qui produit seulement deux types de
pixels dans une image : des pixels noirs et des pixels blancs. La
binarisation permet donc de transformer une image ou un flux en noir et
blanc.
Il faut pour cela dterminer un seuil : quels sont les pixels qui
doivent-tre noirs et ceux qui doivent-tre blancs ? Nous pouvons pour
cela utiliser lhistogramme. Une fois lhistogramme de limage en notre
possession, il faut tablir une somme cumule des intensits, cest dire
faire la somme du nombre de pixels pondr par leurs intensits. Pour
tablir le seuil, il suffit alors de diviser cette somme par la taille de la
matrice de notre image. Il existe galement dautres mthodes.
La fonction MATLAB, im2bw, permet de binariser une image selon un
seuil donn en paramtres. Son code ressemble au suivant :
function[Ibin]=im_bin(I,s)
%fonction qui binarise une image selon un seuil donn
[p,q]=size(I);
for i=1: p
for j=1: q
if I(i,j)>s
Ibin(i,j)=255;
else
Ibin(i,j)=0;
end
end
end
Ibin=uint8(Ibin);
end
Binarisation locale
Dans la binarisation locale, le choix de seuil se fait sur une fentre
de limage : on divise limage dans notre traitement en blocs. En dautres
termes, le seuil est la valeur moyenne de cette fentre.
%%%
%
%
%
%
%
%
%
%%%
for r=1: x
for s=1: y
if bloc(r,s)> S
bnl(i+r-1,j+s-1)=255;
else
bnl(i+r-1,j+s-1)=0;
end
end
end
Code utilis pour confirmer que la division en blocks est juste
if(check==0)
bnl([i:n],[j:m])=zeros(x,y);
check=1;
else
bnl([i:n],[j:m])=ones(x,y)*255;
check=0;
end
%calculer le nombre de blocs des colonnes
cptblocj=cptblocj+1;
end
%calculer le nombre de blocs des lignes
cptbloci=cptbloci+1;
end
end
end
TP 3 : Filtrage Spatial
Le terme spatial se rfre lensemble des pixels composant
limage. Tout traitement spatial peut sexprimer comme
O I est limage originale, J limage traite, et T est un oprateur sur I,
dfini sur un voisinage de (x, y).
Si ce voisinage est de taille 1, T agit pixel par pixel, et on parle alors
danalyse point point. On rcupre alors entre autres les mthodes
danalyse dhistogramme, auxquelles on adjoint toute transformation
mathmatique i T(i) (logarithmique, exponentielle, ...)
Nous allons nous intresser aux filtres linaires et non linaires
Filtrage linaire
Les filtres linaires sont fonds sur lhypothse de linarit du
systme dacquisition. Les filtres dits passe-bas attnuent ou liminent les
hautes frquences spatiales dans limage, en laissant les basses
frquences intactes. Au contraire, un filtre passe haut laisse intactes les
hautes frquences, et attnue les basses.
Ce filtre transforme un ensemble de donnes d'entre en un
ensemble de donnes de sortie selon lopration mathmatique appele
convolution.
Filtre moyenneur
Ce filtre lisseur part du principe que la valeur d'un pixel est
relativement similaire son voisinage. Il fait donc en sorte que chaque
pixel est remplac par la moyenne pondre de ses voisins. Si on applique
un filtre moyenneur de taille d=3, cela signifie qu'on additionne la valeur
de tous les pixels du voisinage du pixel trait.
for i=1+lim:p+lim
for j=1+lim:1:q+lim
for k=-lim:lim
for l=-lim:1:lim
Ifil(i-lim,j-lim)=Ifil(i-lim,j-lim)+Idup(i+k,j+l);
end
end
Ifil(i-lim,j-lim)=Ifil(i-lim,j-lim)/power(d,2);
end
end
Ifil= uint8(Ifil); %transformer les valeurs de l'image filtre en entiers.
end
Filtre gaussien
Leffet de ce filtre sur limage est assez similaire au filtre
moyenneur, mais la moyenne est pondre : les pixels prs du centre ont
un poids plus important que ceux que les autres. En gnral, un filtre
Gaussien avec <1 est utilis pour rduire le bruit, et si >1 cest dans le
but de flouter volontairement l'image. Il faut noter que plus est grand,
plus la cloche Gaussienne est large et plus le flou appliqu limage sera
marqu.
On a implment le filtre de la faon suivante en se basant sur la
mme logique du filtre prcdant :
function [ Ifil ] = Gaussian(I, sigma )
matrice = [exp(-2/(power(sigma,2))) ,exp(-1/2*(sigma*sigma)),exp(-2/
(power(sigma,2))),
exp(-1/2*(sigma*sigma)),1,exp(-1/2*(sigma*sigma)),
exp(-2/(power(sigma,2))),exp(-1/2*(sigma*sigma)),exp(-2/(power(sigma,2)))
for i=1+lim:p+lim
for j=1+lim:1:q+lim
v=1;
for k=-lim:lim
for l=-lim:1:lim
Ifil(i-lim,j-lim)=Ifil(i-lim,j-lim)
+Idup(i+k,j+l)*matrice(v);
v=v+1;
end
end
end
Ifil(i-lim,j-lim)=Ifil(i-lim,j-lim)/coef; %normalisation
end
Ifil = uint8(Ifil);
end
Filtre mdian
Le niveau de gris du pixel central est remplac par la valeur mdiane
de tous les pixels de la fentre d'analyse centre sur le pixel. La taille du
noyau dpend de la frquence du bruit et de la taille des dtails
significatifs de l'image traite.
Limplmentation MATLAB quivalente est la suivante :
function [ Ifil ] = filt_med(I, dim)
%fonction permettant d'appliquer le filtre median sur une image I suivant
%une dimention dim donne.
[p,q]=size(I);
%puisque les bords seront remplis par des 0, on calcul la taille de ces
%bord en dpend de la dimention du filtre
lim=(dim-1)/2;
Ifil=zeros(p,q);
Vecteur=zeros(1,dim*dim);
%on cre ensuite une duplication o on insre des bords fictifs , si par
%exemple l'image est de taille 200*200 et le filtre 3*3, on insre l'image
%dans une matrice de taille 202*202.
Idup=zeros(p+2*lim,q+2*lim);
Idup([1+lim:p+lim],[1+lim:q+lim])=I;
for i=1+lim:p+lim
for j=1+lim:1:q+lim
v=1; %indice de notre vecteur
for k=-lim:lim
for l=-lim:1:lim
%pour chaque valeur de notre fentre ou bloc, on l'ajoute
%au vecteur.
Vecteur(v)=Idup(i+k,j+l);
v=v+1;
end
end
Vecteur=sort(Vecteur); % il faut trier notre vecteur de valeurs
indiceMedian=(power(dim,2)-1)/2 +1; %indice o se trouve la valeur
mediane
Ifil(i-lim,j-lim)=Vecteur(indiceMedian);
end
end
Ifil= uint8(Ifil); %transformer les valeurs de l'image filtre en entiers.
end
TP 4 : Filtrage frquentiel
Bien entendu, Une image est avant tout un signal. Les signaux 2D
prsentent des variations d'intensit (lumineuse) dans l'espace.
La transforme de Fourier permet de passer du domaine spatial dans
le domaine frquentiel.
La transforme de Fourier du produit de convolution de deux
fonctions n'est autre que le produit (classique celui-l) de leur transforme
de Fourier et rciproquement.
On peut donc utiliser de faon quivalente un filtre spatial ou
frquentiel. Ce dernier n'tant qu'une simple multiplication, il est moins
coteux.
Sous MATLAB, la transformation de limage se fait par la fonction fft2,
pour la transformation inverse on excute la fonction ifft2. La fonction
fftshift nous permet de rarranger le rsultat de fft2.
Lexcution de cette partie-l du TP est en attachement (Script
TP4PartieI.m).