TP Traitement d`images

publicité
TP Traitement d’images
SEGMENTATION D’IMAGES BINAIRES
Sujets abordés : lecture et affichage d’images, histogrammes de projection, parcours
d’histogrammes, localisation et segmentation de caractères, seuillage d’histogrammes,
marquage de composantes connexes, segmentation de composantes connexes, filtrage de
composantes connexes.
1. Segmentation par projection d’histogrammes
Le but de cette première partie est de réaliser une segmentation d’images binaires par
projection d’histogrammes. Pour réaliser cette segmentation, on utilisera des images binaires
composées de suites de caractères numériques. On propose dans un premier temps de réaliser
cette segmentation sur l’image sans bruit suivante :
Question :
Implémenter les fonctions Matlab permettant la lecture d’une image, la récupération
de cette image sous forme matricielle, et l’affichage de la matrice image. Pour ces
deux questions vous pouvez vous aider de l’annexe des TP. Vous pouvez mettre en
œuvre ces fonctions dans un fichier principal Matlab (TP11.m par exemple).
Question :
Ecrire l’algorithme (sous forme de fonction) pour le calcul de l’histogramme de
projection verticale d’une image binaire et implémenter le. Cet histogramme de
projection verticale correspond à un vecteur (de taille égale à la largeur de l’image)
sommant les pixels noirs par colonne de l’image. On peut s’aider pour cela de la
fonction sum de Matlab. Ecrire une seconde fonction permettant de créer une image
représentant l’histogramme (cf ci-dessous). Expliquer la différence entre un
histogramme de projection, et un histogramme d’amplitude.
Question :
Ecrire l’algorithme (sous forme de fonction) permettant de compter le nombre de
caractères (ici 11) et de les localiser. Ce traitement se fera à partir de l’analyse de
l’image de l’histogramme de projection verticale. Le critère de détection se basera sur
les successions des projections nulles et non nulles. Stocker et retourner les
coordonnées (début ;fin) de l’ensemble des caractères de l’image dans une matrice
(n,2), avec n le nombre de ligne de texte.
Question :
A partir du résultat de la localisation des caractères, implémenter une fonction
permettant de réaliser leur segmentation. En pratique, cette segmentation pourrait se
traduire par l’extraction des caractères de l’image (recopie d’imagettes de caractère par
exemple). Dans ce TP, on se limitera à la création d’une image d’encadrement à la
manière de l’image suivante.
On se propose dans un second temps de réaliser une segmentation sur la même image de
caractères numériques, mais dans des conditions bruitées (cf ci-dessous). Pour cela, il
nécessaire de compléter votre programme complet avec une méthode de seuillage
d’histogramme. Vous pouvez mettre en œuvre ce deuxième programme dans un fichier
principal Matlab (TP12.m par exemple).
Question :
Ecrire l’algorithme (sous forme de fonction) permettant de seuiller l’histogramme de
projection verticale à partir d’un seuil manuel défini dans votre programme. Ce filtrage
consiste en un effacement des pics de l’histogramme de projection verticale de taille
inférieure au seuil, comme le montre l’exemple suivant :
Vérifier l’influence du choix du seuil sur le nombre de caractères détectés (cf cidessous). Quelle(s) technique(s) vue(s) dans un autre TP permettrai(en)t la réduction
du bruit de l’image afin d’améliorer les résultats de segmentation sur des images
bruitées.
2. Segmentation par marquage de composantes connexes
Dans cette seconde partie on se propose de réaliser la segmentation sur une image constituée
de formes imbriquées (cf ci-dessous). Sur ce type d’image, la segmentation par projection
d’histogramme vue en première partie de ce TP ne peut être utilisée.
Pour réaliser la segmentation de cette image nous allons utiliser la technique de marquage de
composantes connexes (blob coloring). La composante connexe en traitement d’image
représente une agrégation de pixels connectés sur une image. L’image des formes imbriquées
par exemple (cf ci-dessus) est composée de 4 composantes connexes. La technique de
marquage de composantes connexes est basée sur une détection des contours des
composantes. Suite à cette détection des contours, les pixels d’une composante donnée sont
marqués par un même label suivant leur relation de connexité (4 ou 8 connexe). L’exemple cidessous donne un exemple de résultat d’un marquage de composantes en 4-connexité.
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
2
2
2
0
0
0
0
0
2
2
2
0
0
3
0
0
0
0
0
0
0
3
3
0
0
0
0
0
0
3
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
1
1
1
0
0
1
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
1
1
0
0
0
0
0
Exemple de marquage de composantes en 4-connexité
Pour réaliser ce marquage on se propose d’utiliser la fonction de marquage de composantes
connexes de la bibliothèque image de Matlab. Il est possible de spécifier un marquage 4 ou 8
connexe. La fonction de marquage de composantes connexes s’appelle de la manière
suivante :
imagemcs =bwlabel(imagei,8)
Question :
Ecrire l’algorithme en Matlab permettant de réaliser la segmentation par marquage de
composantes connexes. Recopier chaque composante dans une imagette de même
dimension. On peut pour cela s’aider de la fonction Matlab find.
Question :
Ecrire l’algorithme et le programme Matlab permettant de sélectionner les
composantes connexes selon des critères de surface. Appliquer cet algorithme à
l’image de texte bruitée pour la segmentation des caractères. Comparer les deux
méthodes et commenter.
Téléchargement