Compte-rendu de traitement d`images

Transcription

Compte-rendu de traitement d`images
Compte-rendu de traitement d'images
TP1:Histogramme, binarisation et quantication
LAMBERT VELLER Sylvain
LECHEVALIER David
M1 STIC
Université de Bourgogne
2010-2011
Table des matières
1 Introduction
2
2 Présentation
3
2.A Le but . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.B Les traitements possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.C L'interface graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3 Conception des traitements
5
3.A Lancement de l'acquisition d'images et des traitements . . . . . . . . . . .
5
3.A.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.A.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.B Stopper et quitter l'application . . . . . . . . . . . . . . . . . . . . . . . .
5
3.B.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.B.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.C L'inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.C.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.C.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.C.3 Résultat obtenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.D L'histogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.D.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.D.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.D.3 Résultat obtenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.E La binarisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
3.E.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
3.E.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
3.E.3 Résultat obtenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
3.F La quantication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.F.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.F.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.F.3 Résultat obtenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.G L'étirement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.G.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.G.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.G.3 Résultat obtenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.H L'égalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.H.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.H.2 La conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.H.3 Résultat obtenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 Conclusion
14
A Annexes
15
A.1 Lancement de l'acquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
A.2 Stopper et quitter l'application . . . . . . . . . . . . . . . . . . . . . . . . 16
A.3 L'inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
A.4 Les histogrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
A.5 La binarisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
A.6 La quantication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
A.7 L'etirement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
A.8 L'égalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1
Introduction
Ce compte-rendu présente les diérents travaux eectués lors du TP 1 de l'unité
d'enseignement 'Traitement d'images'.Ce TP permet de nous familiariser avec le logiciel
Matlab en réalisant un programme d'interface qui eectue diérents traitements d'images
en temps réel. L'acquisition des images se fait grâce à une webcam. Nous allons commencer
par une présentation de l'application et ensuite nous vous présenterons les diérentes
fonctionnalités et leur phase de conception qui concernent notamment les histogrammes,
les binarisations et autres quantications.
2
2
Présentation
2.A Le but
Cette application doit permettre de réaliser des traitements sur des images acquis
via une webcam en utilisant le logiciel Matlab. L'interface est composée de 4 fenêtres
permettant de visualiser la mise en place du traitement choisit. L'utilisateur a la possibilité
de choisir le traitement à réaliser grâce à un ensemble de boutons mis à sa disposition. Il
est possible à tout moment de stopper l'acquisition ainsi que les traitements et également
de quitter l'application.
2.B Les traitements possibles
Pour cette application, les diérents traitements possibles sont :
Inversion
Histogramme manuel et automatique
Binarisation
Quantication
Etirement
Egalisation
2.C L'interface graphique
L'interface graphique de cette application comporte :
des zones de texte statique permettant de savoir à quel traitement correspond
chaque fenêtre
une fenêtre d'acquisition permettant l'acquisition des images via la webcam
sans eectuer de traitement au préalable
trois fenêtres de traitements qui permettent de visualiser les traitements possibles
des boutons de traitements
un bouton pour stopper l'acquisition
un bouton pour quitter l'application
un champ texte pour choisir le seuil qui réalise la binarisation des images
3
CHAPITRE 2.
PRÉSENTATION
4
un slider qui permet de faire varier la valeur de 0 à 100 pour le traitement de
quantication
3
Conception des traitements
3.A Lancement de l'acquisition d'images et des traitements
3.A.1 Le principe
An de pouvoir acquérir des images dans la fenêtre d'acquisition et de pouvoir
réaliser des traitements, nous avons besoin de pouvoir accéder à la webcam qui est reliée à
l'ordinateur sur lequel on se trouve. Ensuite, en fonction des boutons qui sont actionnés,
on lancera les fonctions adéquates.
3.A.2 La conception
Pour réaliser le lancement d'acquisition, nous nous sommes aidé du code source
disponible à l'adresse 'http ://depinfo.u-bourgogne.fr/ roudet/enseignement/inversion.m'.
Voici les principales étapes à eectuer pour obtenir les images issues de la webcam et
réaliser les traitements voulues :
Conguration de l'entrée vidéo
Fixer les propriétés de l'objet vid qui est une variable utilisée lors de la conguration de l'entrée vidéo
Capture des frames à partir de la vidéo
appel d'une fonction de traitement si nécessaire
Cette fonction est disponible en annexe 1.
3.B Stopper et quitter l'application
3.B.1 Le principe
Nous créons un bouton 'stop' et un bouton 'sortie et n'. Ces boutons vont
permettre de stopper l'acquisition des images ou fermer l'application.
5
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
6
3.B.2 La conception
Le bouton stop
Lors de l'acquisition, le bouton stop est à l'état 0. An de pouvoir stopper l'acquisition vidéo, il faut mettre ce bouton stop à l'état 1 et tous les autres boutons à l'état
0 (annexe 2.1).
Le bouton sortie et n
En ce qui concerne le bouton 'sortie et n', il y a deux possibilités. Dans le
premier cas, le bouton stop n'a pas été enclenché et on ne peut pas quitter l'application
immédiatement. Dans ce cas, il faut, comme pour le bouton stop, mettre ce bouton stop
à l'état 1 et les autres boutons à 0 (annexe 2.2). Dans le second cas, le bouton stop a été
enclenché avant. Dans ces conditions, on ferme l'application (annexe 2.2).
3.C L'inversion
3.C.1 Le principe
Pour réaliser l'inversion, on doit passer l'image originale en niveaux de gris et on
soustrait chaque pixel de l'image obtenue à 255.
3.C.2 La conception
Deux fonctions ont été créées pour ce traitement :
Une fonction 'inversion' qui est créée lors de l'ajout du bouton nommé inversion.
Elle va passer l'état du bouton inversion à 1 et mettre tous les autres à 0.
Une autre fonction nommée 'inverser' qui permet de réaliser l'inversion appelée
lorsque l'on clique sur le bouton d'inversion. Ces fonctions sont disponibles en
annexe 3.
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
7
3.C.3 Résultat obtenu
3.D L'histogramme
3.D.1 Le principe
Pour acher l'histogramme d'une image en niveaux de gris, il est nécessaire de
calculer le nombre de pixels pour chaque niveaux de gris. Une fonction, qui permettra de
réaliser et acher l'histogramme, doit être créée. Le résultat sera comparé à l'histogramme
réaliser sous Matlab grâce à la fonction imhist().
3.D.2 La conception
Dans la fenêtre de gauche, on ache l'image en niveaux de gris qui va être utilisé
pour réaliser les histogrammes manuels et automatique. Dans la fenêtre à sa droite, on
ache l'histogramme manuel ou automatique selon le bouton qui est actionné.
An de réaliser l'histogramme, nous utilisons la fonction créée à l'ajout du bouton
histogramme manuel ou automatique an de mettre à l'état 1 le bouton actionné et à l'état
0 les autres. Ensuite, on ajoute une fonction pour chacune des deux façons de réaliser
l'histogramme (manuellement ou en utilisant imhist) qui seront lorsque l'on clique sur le
bouton qui correspond.
Dans la fonction de calcul d'histogramme manuellement, voici les étapes à réaliser :
On récupère la taille de l'image
On crée un tableau de 256 cases
On parcourt l'image et on remplit le tableau de 256 cases suivant la valeur de
la case ou l'on se trouve
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
8
Lorsque le parcours est terminé, on ache le tableau sous forme de graphique
Cette fonction est disponible en annexe 3.1.
Dans la fonction de calcul d'histogramme automatique, on utilise l'image en niveaux de gris et on appelle la fonction imhist avec l'image en niveaux de gris passé en
paramètres (annexe 3.2).
3.D.3 Résultat obtenu
Histogramme manuel
Histogramme avec la fonction imhist
Lorsqu'on compare l'histogramme réalisé avec notre propre fonction avec l'histogramme réalisé grâce à la fonction imhist, on remarque que le second histogramme est
plus précis dans les valeurs.
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
9
Si on change la luminosité, l'histogramme varie également. Avec une faible luminosité, toutes les valeurs de l'histogramme sont proches de la valeur 0. Au contraire, avec
une forte luminosité, les valeurs de l'histogramme sont proches de la valeur 255.
3.E La binarisation
3.E.1 Le principe
La binarisation consiste à mettre à la valeur 0 tous les pixels dont la valeur n'est
pas supérieure à une valeur dénie au préalable et à 255 les pixels dont la valeur est
supérieur à ce même seuil.
La binarisation peut s'eectuer de deux façon diérentes dans notre cas :
Le seuil est choisit par l'utilisateur
Le seuil est déterminé par une fonction déjà dénie de Matlab
3.E.2 La conception
Nous utilisons les fonctions qui sont créées lors de l'ajout des boutons de binarisation an de mettre à l'état 1 le bouton de binarisation actionné et à l'état 0 les autres.
Ensuite, on dénit une fonction pour chaque façon de binariser une image.
Dans la fonction où le seuil est choisit par l'utilisateur, voici les étapes :
On récupère le seuil entré par l'utilisateur.
On crée un tableau qui comporte autant de lignes et de colonnes que l'image
d'origine
On parcourt l'image d'origine en mettant la valeur 0 ou 255 dans le tableau
crée suivant la valeur du pixel
On ache l'image d'origine et l'image binarisé
Cette fonction est disponible en annexe 4.1.
Dans la fonction où le seuil est dénit automatiquement, on renvoit le seuil de
l'image grâce à la fonction graythresh() et lorsque ceci est fait, on ache l'image binarisé
en utilisant la fonction im2bw() (annexe 4.2).
3.E.3 Résultat obtenu
Binarisation avec seuil manuel
Ce résultat est obtenu avec un seuil dénit à 20.
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
10
Binarisation avec seuil automatique
3.F La quantication
3.F.1 Le principe
La quantication permet de coder une image, qui est initialement en 256 niveaux
de gris, en n niveaux de gris où n est un paramètre qui peut être modié par l'utilisateur
lorsqu'il le souhaite. On découpe les niveaux de gris en intervalles de même amplitude.
La valeur qui sera aecté pour chaque intervalle est le centre de l'intervalle.
3.F.2 La conception
An de donner la possibilité à l'utilisateur de modier le nombre d'intervalles, on
insère un curseur dans l'interface graphique.
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
11
On passe ensuite le bouton quantication à l'état 1 et les autres à l'état 0 dans
la fonction créée à l'ajout du bouton quantication. Lorsque ceci est réalisé, on crée une
fonction qui va eectué la quantication de l'image et l'acher.
Voici les étapes de cette fonction :
On récupère le nombre d'intervalles
On récupère la taille de l'image
On calcule les intervalles et leur milieu
On parcourt l'image et on calcule les nouvelles valeurs de pixels
On ache l'image quantiée
La fonction est disponible en annexe 5.
3.F.3 Résultat obtenu
Ce résultat a été obtenu avec un nombre d'intervalles égal à 10.
3.G L'étirement
3.G.1 Le principe
L'etirement consiste à utiliser au mieux l'échelle de niveaux de gris disponible. On
va chercher à étendre l'histogramme an que la valeur du pixel la plus faible soit à zéro et
que la valeur la plus haute soit à la valeur 255. Cela permettra une meilleur répartition des
valeurs. Cela permet d'augmenter le contraste d'une image. En eet, l'étirement permet
de rendre plus clairs ou plus foncés certains pixels.
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
12
3.G.2 La conception
Comme pour les autres traitements, on passe ensuite le bouton correspondant
(ici etirement) à l'état 1 et les autres à l'état 0 dans la fonction créée à l'ajout du bouton
etirement.Ensuite, on crée une fonction d'étirement qui permet d'appliquer l'étirement à
une image en niveaux de gris et l'ache lorsque c'est terminé.
Voici les étapes importantes de cette fonction :
On calcule le nombre de lignes et de colonnes de l'image
On cherche les valeurs minimum et maximum des pixels de l'image
On applique la forme de l'étirement à l'image de départ
On ache l'image d'origine et l'image étirée
Cette fonction est disponible en annexe 5.
3.G.3 Résultat obtenu
3.H L'égalisation
3.H.1 Le principe
L'égalisation consiste à rendre le plus plat possible l'histogramme des niveaux de
gris de l'image. Cela permet de répartir de façon équitable les niveaux de luminosité de
l'image. Cela vise à renforcer le contraste sur des détails de l'image qui sont masqués par
des variations d'intensité de plus grande amplitude et à plus grande échelle.
3.H.2 La conception
Dans la fonction ajoutée à la création du bouton égalisation, on passe ce bouton
à l'état 1 et les autres boutons à l'état 0. Après cela, on crée la fonction qui réalise
l'égalisation et ache l'image obtenue.
CHAPITRE 3.
CONCEPTION DES TRAITEMENTS
13
Voici les étapes de cette fonction :
On calcule le nombre de lignes et de colonnes de l'image
On crée des tableaux pour stocker les valeurs des histogrammes
On calcule l'histogramme de l'image
On calcule son histogramme cumulé de l'image
On calcule son histogramme cumulé normalisé
On calcule la nouvelle image grâce à l'histogramme cumulatif obtenu précédemment
On ache l'image d'origine, l'image égalisé ainsi que l'histogramme de l'image
d'origine et son histogramme cumulatif
Cette fonction est disponible en annexe 6.
3.H.3 Résultat obtenu
4
Conclusion
A travers ces développements, nous avons pu prendre en main le logiciel Matlab.
Nous avons pu comparer nos propres développement à des fonctions prédénies dans ce
logiciel. Les fonctions étudiées nous ont ainsi permis de commencer à modier les images
en se basant sur les histogrammes notamment qui permettent de prendre conscience de
la luminosité de l'image. Ces développements seront compléter dans le TP suivant qui
se consacre aux contours et corrections de bruits qui peuvent venir s'appliquer sur une
image.
14
A
Annexes
A.1 Lancement de l'acquisition
function lancer_Callback(hObject, eventdata, handles)
vid = videoinput('winvideo',1, 'RGB24_320x240');
handles.vid = vid;
triggercong (handles.vid, 'Manual'); %declenchement manuel pour la capture des frames
set(handles.vid, 'FramesPerTrigger',1); %nombre de frames a capturer
set(handles.vid, 'TriggerRepeat',Inf);
guidata(hObject, handles); %modie le GUIDE avec les nouvelles donnees
start (handles.vid); % initialise la capture de frames
while 1
trigger (handles.vid); %declenche la capture d une frame (mise en memoire de la frame)
if get(handles.stop,'UserData') %si on appuie sur le bouton "Stop"
stop(handles.vid); %stopper la capture video
axes(handles.axes1);cla;%On eace les cadres
axes(handles.axes2);cla;
axes(handles.axes3);cla;
axes(handles.axes4);cla;
delete(handles.vid);
clear handles.vid; %eace les frames stockees en memoire
else
%si on n a pas appuye sur le bouton "Stop", on lance la capture
y = (getdata(handles.vid,1, 'uint8' )) ; %acces a la frame stockee en memoire
axes(handles.axes1);subimage(y); %on ache la video couleur sur une premiere gure
if get(handles.inversion , 'UserData')%Suivant le bouton sur lequel on a clique on va appeler
la bonne fonction en lui transmettant le handles et l image y.
axes(handles.axes3);cla;
axes(handles.axes4);cla;
inverser (y,handles);
else
if get(handles.histogramme\_man,'UserData')
axes(handles.axes4);cla;
histogramme_man(y,handles);
else
if get(handles.histogramme\_imhist,'UserData')
axes(handles.axes4);cla;
histogramme_imhist(y,handles);
else
if get(handles.binarisation\_man,'UserData')
axes(handles.axes4);cla;
binarisation_man(y,handles);
else
if get(handles.binarisation\_auto,'UserData')
axes(handles.axes4);cla;
binarisation_auto(y,handles);
else
if get(handles.quantication , 'UserData')
axes(handles.axes4);cla;
quantication (y,handles);
else
if get(handles.etirement,'UserData')
15
ANNEXE A.
ANNEXES
etirement(y,handles);
else
if get(handles. egalisation , 'UserData')
egalisation (y,handles);
end
end
end
end
end
end
end
end
end
end
A.2 Stopper et quitter l'application
le bouton Stop
function stop_Callback(hObject, eventdata, handles)
set(handles.stop, 'UserData',1)
set(handles.inversion , 'UserData',0);
set(handles.histogramme_imhist,'UserData',0);
set(handles.histogramme_man,'UserData',0);
set(handles.binarisation_man,'UserData',0);
set(handles.binarisation_auto,'UserData',0);
set(handles. quantication , 'UserData',0);
set(handles.etirement, 'UserData',0);
set(handles. egalisation , 'UserData',0);
le bouton Sortie et n
function sortie_Callback(hObject, eventdata, handles)
if get(handles.stop,'UserData')
close(); %Fermer l 'interface
else
set(handles.stop, 'UserData',1) % On passe le bouton stop a 1;
set(handles.inversion , 'UserData',0);
set(handles.histogramme_imhist,'UserData',0);
set(handles.histogramme_man,'UserData',0);
set(handles.binarisation_man,'UserData',0);
set(handles.binarisation_auto,'UserData',0);
set(handles. quantication , 'UserData',0);
set(handles.etirement, 'UserData',0);
set(handles. egalisation , 'UserData',0);
end
A.3 L'inversion
16
ANNEXE A.
ANNEXES
17
function inversion_Callback(hObject, eventdata, handles)
set(handles.stop, 'UserData',0);
set(handles.inversion , 'UserData',1); % On passe le bouton inversion a 1;
set(handles.histogramme_imhist,'UserData',0);
set(handles.histogramme_man,'UserData',0);
set(handles.binarisation_man,'UserData',0);
set(handles.binarisation_auto,'UserData',0);
set(handles. quantication , 'UserData',0);
set(handles.etirement, 'UserData',0);
set(handles. egalisation , 'UserData',0);
function inverser(y,handles)
I4 = rgb2gray(y); %on passe "y" en niveau de gris
Inv = 255 − I4;
%on realise l inversion en soustrayant la video en niveaux de gris (I4) a
255
axes(handles.axes2);subimage(Inv); %et la video inversee sur une deuxieme gure (axes2)
A.4 Les histogrammes
L'histogramme manuel
function histogramme_man(y,handles)
I4 = rgb2gray(y); %on passe "y" en niveau de gris
[ ligne ,colonne]=size(I4);%On recupere la taille de l image.
histogramme=zeros(1,256);%On cree un tableau de 256 cases
for m = 1:ligne%On parcourt l image et on remplit le tableau
for n = 1:colonne
pixel=I4(m,n);
histogramme(1,pixel+1)=histogramme(1,pixel+1)+1;%On incremente la valeur de la case
correspondant
end
end
axes(handles.axes2);subimage(I4);%On ache l image en niveau de gris.
axes(handles.axes3);plot(histogramme);%On ache le tableau sous forme de graphique
L'histogramme avec imhist
function histogramme_imhist(y,handles)
I4 = rgb2gray(y); %on passe "y" en niveau de gris
I4=double(I4);
axes(handles.axes2);subimage(uint8(I4));%On ache l image en niveaux de gris
axes(handles.axes3);imhist(uint8(I4)) ; %On ache l histogramme de l image en niveaux de gris
A.5 La binarisation
Seuil denit par l'utilisateur
ANNEXE A.
ANNEXES
function binarisation_man(y,handles)
I4 = rgb2gray(y); %on passe "y" en niveau de gris
[ ligne ,colonne]=size(I4);
seuil =str2num(get(handles.seuil,'string'));%On recupere le seuil entre par l utilisateur .
ne=zeros(ligne,colonne);
for m = 1:ligne
for n = 1:colonne
%Suivant le cas on mettra 0 ou 255 pour l image binarise.
if I4(m,n)>seuil
ne(m,n)=255;
else
ne(m,n)=0;
end
end
end
axes(handles.axes2);subimage(I4);%On ache l image en niveaux de gris
axes(handles.axes3);subimage(ne);%On ache l image binarisee
Seuil denit automatiquement
function binarisation_auto(y,handles)
I4 = rgb2gray(y); %on passe "y" en niveau de gris
seuil =graythresh(I4);%Renvoie le seuil de l image passee en parametre.
axes(handles.axes2);subimage(I4);%On ache l image en niveaux de gris
axes(handles.axes3);subimage(im2bw(I4,seuil));%On ache l image binarisee
A.6 La quantication
function quantication(y,handles)
sliderValue = get(handles.slider1, 'Value');
sliderValue= cast(sliderValue , 'uint8' ) ; %On recupere le nombre d intervalle.
I4 = rgb2gray(y); %on passe "y" en niveau de gris
[ ligne ,colonne]=size(I4);%On recupere la taille de l image.
intervalle =256/sliderValue;%On calcule les intervalles et leur milieu.
milieu=intervalle /2;
I4=double(I4)
for i = 1:ligne %On calcule la nouvelle valeur de pixel pour la ligne i et la colonne j
for j = 1:colonne
pixel=I4(i, j) ;
p2=(pixel/intervalle ) ;
ne(i , j)=p2∗intervalle+milieu;
end
end
axes(handles.axes2);subimage(uint8(I4));%On ache l image en niveau de gris
axes(handles.axes3);subimage(uint8(ne));%On ache l image quantifee
A.7 L'etirement
18
ANNEXE A.
ANNEXES
function etirement(y,handles)
I4 = rgb2gray(y); %on passe "y" en niveau de gris
[ ligne ,colonne]=size(I4);
max=0;
min=255;
I4=double(I4);
for i = 1:ligne %On cherche la valeur maxi et mini des pixels de l image.
for j = 1:colonne
if (I4( i , j)>max)
max=I4(i,j);
else
if (I4( i , j)<min)
min=I4(i,j);
end
end
end
end
for i = 1:ligne
for j = 1:colonne%On applique la forme de l etirement.
ne(i , j)=255∗((I4(i,j)−min)/(max−min));
end
end
axes(handles.axes1);subimage(uint8(I4));%On ache l image en niveaux de gris.
axes(handles.axes2);subimage(uint8(ne));%On ache l image etiree
axes(handles.axes3);imhist(uint8(I4)) ; %On ache l histogramme de l image en niveaux de gris.
axes(handles.axes4);imhist(uint8(ne)); %On ache l histogramme de l image etiree.
A.8 L'égalisation
function egalisation(y,handles)
I4 = rgb2gray(y); %on passe "y" en niveau de gris
[ ligne ,colonne]=size(I4);
I4=double(I4);
histogramme=zeros(1,256);
histogrammecumulatif=zeros(1,256);
taille =ligne∗colonne;
for m = 1:ligne%On calcule l histogramme de l image.
for n = 1:colonne
pixel=I4(m,n);
histogramme(1,pixel+1)=histogramme(1,pixel+1)+1;
end
end
%Puis on calcule son histogramme cumulatif
histogrammecumulatif(1,1)=histogramme(1,1);
for m = 2:256
histogrammecumulatif(1,m)=(histogrammecumulatif(1,m−1)+histogramme(1,m));
end
%Pusi on calcule son histogramme cumulatif normalise.
for m = 1:256
histogrammecumulatif(1,m)=histogrammecumulatif(1,m)/taille;
end
%Puis on transforme l image.
for m = 1:ligne
for n = 1:colonne
pixel=I4(m,n);
19
ANNEXE A.
ANNEXES
ne(m,n)=255∗histogrammecumulatif(1,pixel+1);
end
end
axes(handles.axes1);subimage(uint8(I4));%On ache l image en niveaux de gris.
axes(handles.axes2);subimage(uint8(ne));%On ache l image egalise
axes(handles.axes3);plot(histogramme);%On ache l histogramme de l image en niveaux de
gris
axes(handles.axes4);plot(histogrammecumulatif);%On ache l histogramme cumulatif.
20

Documents pareils