Traitement Des Images Num Eriques TP 4: Filtrage, Rehaussement de Contours Et Segmentation
Traitement Des Images Num Eriques TP 4: Filtrage, Rehaussement de Contours Et Segmentation
Traitement Des Images Num Eriques TP 4: Filtrage, Rehaussement de Contours Et Segmentation
Consignes
• Récupérer le fichier TP4.zip sur le site
http://www.laurentoudre.fr/tin.html
• Ouvrir MATLAB et créer un répertoire de travail. Dézipper le fichier TP4.zip dans ce répertoire.
• A la fin de la séance, récupérer les scripts que vous avez écrits et les envoyer par e-mail au chargé de TP
ainsi qu’à vous même afin de les conserver pour la prochaine séance.
Rendu
• Quatre fichiers : TP4Partie1.m, TP4Partie2.m, TP4Partie3.m, TP4Partie4.m et TP4Partie5.m Chaque
fichier doit contenir votre nom, votre prénom et la date.
• Compte-rendu succinct à rendre à la fin de la séance, contenant les observations, commentaires et réponses
aux questions. Le compte rendu doit contenir votre nom et votre prénom.
Plan de l’étude
1 Réhaussement de contours 2
1.1 Rappels de cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Etude sous MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Segmentation d’image 3
2.1 Segmentation par seuillage de valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Segmentation par détection de contours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Fusion des deux méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Décomposition QuadTree pour la segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
(a) Appliquer un filtre LOG de taille 15 × 15 et d’écart-type σ = 1 (dont on stockera le masque dans h8)
et stocker l’image filtrée dans la matrice Y8. Afficher sur la même figure X, mat2gray(abs(Y8)) et
mat2gray(Y8). Dans quelle direction ce filtre réhausse-t-il les contours ?
(b) Faire varier la valeur de σ et commenter.
(c) Comparer les résultats du filtre laplacien et du filtre LOG.
7. Relancer tout votre script, en définissant cette fois-ci X comme l’image cameraman.tif renormalisée.
Commenter les résultats obtenus.
8. Appliquer pour chacun des filtres définis ci-dessus, la commande AffichageFiltrage(X,h) déjà utilisée
au TP3, pour afficher les spectres de l’image originelle, de l’image filtrée ainsi que la réponse en fréquence
du filtre. Commenter les réponses fréquentielles des différents filtres. Attention, l’image filtrée présentée
ici n’est pas retraitée (pas de valeur absolue ni de mat2gray), ce qui explique que tous les coefficients
négatifs soient mis à 0 (noir), et que tous les coefficients supérieurs à 1 soient mis à 1 (blanc).
2 Segmentation d’image
La segmentation d’image est une opération de traitement d’images qui a pour but de rassembler des pixels entre
eux suivant des critères pré-définis. Les pixels sont ainsi regroupés en régions, qui constituent un pavage ou une
partition de l’image. Il peut s’agir par exemple de séparer les objets du fond. Il existe de nombreux types de
méthodes de segmentation d’image : certaines sont basées sur les contours, d’autres sur un seuillage des pixels
en fonction de leur intensité, d’autres découpent l’image en régions connexes , etc....
Nous allons ici considérer une image composée de pièces de monnaie sur un fond relativement uniforme, et
tenter de segmenter cette image avec différentes techniques.
Pour calculer et tracer un histogramme d’une image renormalisée sous MATLAB, on peut utiliser :
bins = 0:0.001:1; % Liste des niveaux de gris que l'on veut considerer
[h]=hist(X(:),bins); % Cree l'histogramme pour les niveaux definis dans le vecteur bins
bar(bins,h); % Trace l'histogramme sous forme de barres
Pour créer une matrice booléenne sous MATLAB, il suffit d’écrire une condition portant sur une matrice : tous les
pixels pour lesquels cette condition est vraie seront mis à 1, et tous les autres à 0.
X bin = (X>0.1);
% X bin a la meme taille que X : tous les pixels de X superieurs a 0.1
% sont mis a 1 dans X bin, les autres sont mis a 0
X bin= (X>0.1 & X<0.3);
% X bin a la meme taille que X : tous les pixels de X compris entre 0.1 et 0.3
% sont mis a 1 dans X bin, les autres sont mis a 0
6. Tester plusieurs valeurs de Tmin et Tmax jusqu’à avoir une segmentation de bonne qualité.
7. Si il reste des points isolés qui ne sont pas de la bonne couleur, nous pouvons essayer d’appliquer un
filtrage médian sur l’image X bin grâce à la commande medfilt2 (comme nous avions fait pour du bruit
poivre et sel). Réaliser cette opération : vous devriez obtenir une segmentation parfaite.
5. Créer une image Y bin de même taille que Y valant 1 pour les pixels de Y supérieurs à T et 0 sinon. Les
contours des pièces seront donc blancs et tout le reste de l’image sera noir. Afficher X et Y bin sur la
même figure.
6. Tester plusieurs valeurs de T jusqu’à voir apparaı̂tre tous les contours des pièces.
taille min=2;
splitmerge(X,taille min,@predicate);
La fonction predicate.m contient le critère définissant la condition pour qu’un carré soit subdivisé. Un exemple est
proposé par défaut, mais vous pouvez essayer de faire varier ce critère.
4. Faire varier le critère d’homogénéité dans la fonction predicate.m et commenter les résultats.