Vous êtes sur la page 1sur 9

Polytech Paris Sud 4ème année Electronique et Systèmes

Embarqués :
Traitement des Images, 2014-2015.
Enseignants : S. Le Hégarat & M. Gouiffès.

TP : Filtrage passe bas, Morphologie mathématique ou Détecteur


de Harris.
Mini-projet : Détection de main et position des doigts.

Ces quatre séances de TP & miniprojet ont pour objet l’illustration et la mise en
œuvre de méthodes de traitement des images vues durant le cours “Traitement des
images : concepts de base” en 4ème année du cycle ingénieur au département Elec-
tronique, Energie, Systèmes. Ils concernent des algorithmes classiques de : filtrage
passe-bas, morphologie mathématique, classification, détection de contours et seg-
mentation. La première scéance est un TP classique, tandis que les trois suivantes
sont consacrées à la réalisation d’un mini-projet.
À la fin du TP comme à la fin de la dernière séance du mini-projet, vous aurez
une semaine pour rendre un rapport écrit, où il vous est demandé de justifier votre
implémentation des algorithmes, d’analyser l’influence de leurs paramètres, et de
commenter les résultats obtenus. Ces derniers commentaires porteront notamment
sur la qualité des solutions implémentées et leur comparaison avec d’autres mé-
thodes ou algorithmes alternatifs au problème considéré. Cette partie d’analyse est
essentielle.

1 Environnement
1.1 Projet Visual
Les codes ont été développés en C++ (Visual 2005) selon l’architecture suivante.
La classe imasites permet de gérer la grille des pixels de l’image. Toutes les autres
classes représentant différents types d’images héritent de cette classe imasites. La
classe imadata est construite à partir d’un patron de classe (template) et permet
de travailler sur des images de données de différents types (T, où T va généralement
représenter des BYTE ou des float). D’autres classes comme imabin, imalabels,
imacontours etc., représentent des images généralement issues d’une interpréta-
tion partielle d’une image de données. Aussi la plupart des constructeurs de ces
classes prennent-ils en argument en entrée une image de données (objet de la classe
imadata). Dans chacune de ces classes il existe d’autres méthodes spécifiques à la
manipulation ou l’interprétation plus avancée du type d’image étudié.
La version des codes C++ est fournie avec un environnement graphique dans
lequel un menu vous permet de sélectionner les commandes et les paramètres asso-
ciés. Vous pourrez avoir à compléter certaines parties de codes pour développer les
fonctions demandées, et/ou à appeler certaines méthodes (commandes du menu)
via l’interface graphique afin de comparer les résultats de différents algorithmes ou
approches.
Concrètement, vous récupérerez tous les fichiers fournis (le répertoire vous sera
indiqué en début de séance) et sous Visual 2005, vous lancerez TDI_GUI.vcproj.
L’annexe de ce document décrit les commandes disponibles sous l’interface gra-
phique. Vous pouvez en ajouter de nouvelles via les deux fichiers params.h (pro-
gramme principal de l’application graphique), et params.cpp (qui contient la des-
cription des commandes et de leurs paramètres).

1
1.2 Format des images
Une image est un tableau 3D où les deux premières dimensions sont le nombre
de lignes (nblig membre-données de la classe imasite) et le nombre de colonnes
(nbcol membre-données de la classe imasite) et la troisième dimension est le
nombre de canaux (nbcanaux membre-données de la classe imadata : 1 pour les
images à niveaux de gris, 3 pour les images couleurs, etc.). L’accès à une valeur de
l’image se fait à l’aide de l’opérateur ( ) : par exemple (*this)(i,j,k) accède à la
kième composante du vecteur-pixel de coordonnées image (i,j) de l’image (*this),
et (*this)(i,j) accède à la valeur scalaire du pixel de coordonnées image (i,j).
Vous testerez vos programmes à l’aide d’images plus ou moins complexes :
bureau.pgm, wee.pgm (faible nombre de niveaux de gris), boat.pgm (contours fins),
mandrill.pgm (image texturée) etc. Les images fournies sont au format .pgm.

2 TP “filtrage passe-bas”
2.1 Objectif
L’objectif de ce TP est comparer différents filtres passe-bas (linéaire, non li-
néaires) vus dans en cours. Vous étudierez des filtres PB vus tels que :
1. le filtre moyenne arithmétique sur une fenêtre de taille nl×nc,
2. le filtre gaussien de paramètre σ,
3. le filtre médian sur une fenêtre de taille nl×nc,
4. le filtre de Nagao,
5. le filtre Symetrical Nearest Neighbor (SNN),
6. les Filtre Alternés Séquentiels (FAS).
Ces filtres sont implémentés dans la classe imadata dans le fichier imadata.h, sauf
pour le filtre gaussien que vous développerez vous-même.

2.2 Programmation en langage C++


Pour l’implémentation pratique du filtre gaussien, on considèrera la fenêtre tron-
quée à (4×σ+1)×(4×σ+1). Les coefficients entiers du filtre ainsi que le coefficient
de normalisation seront calculés au début de la fonction. Les bords de l’image seront
traités en utilisant une sous-partie du filtre correspondant à son intersection avec
la grille de l’image (le coefficient de normalisation devra donc être recalculé).

2.3 Analyse de résultats


Pour cette partie, vous considérerez successivement une image bruitée avec un
bruit impulsionnel gaussien (fonction add_gauss_noise existante de paramètre v
réel correspondant à l’écart-type du bruit), et une image avec un bruit impulsif
poivre et sel (fonction add_impul_noise existante de paramètre p réel correspon-
dant à la probabilité qu’un pixel soit bruité).
1. Comparez et commentez les résultats obtenus par les différents filtres en fonc-
tion du type de bruit. Pour comparer quantitativement vos résultats, vous
utiliserez la fonction qui calcule le psnr (pic signal noise
 ratio) selon la for-
2
P 2
mule suivante : psnr = 10 × log 255 / s∈Σ (xs − x˜s ) , où Σ est l’ensemble
des sites de l’image, xs la valeur ‘observée’ du pixel s en sortie du filtre et x˜s
sa valeur ‘idéale’ (non bruitée). Vos commentaires porteront non seulement
sur des aspects quantitatifs (e.g. valeur du psnr) mais également qualitatifs
(e.g. préservation des contours).

2
2. Modifiez le niveau de bruit et ajustez (si possible) le(s) paramètre(s) des filtres
en fonction du niveau de bruit, de façon à discuter l’efficacité d’un filtre en
fonction du niveau de bruit.

3 TP “morphologie mathématique”
3.1 Objectif
L’objectif de ce TP est la mise en œuvre de concepts vus dans le cours de
Morphologie Mathématique appliquée aux images binaires. Comme images binaires
vous utiliserez des images binarisées (fonctions bin_Sup ou bin_Inf, avec les seuils :
40 pour objets.pgm, et 0 pour l’image bureau.pgm.
Les méthodes de la morphologie mathématique binaire étudiées dans cette séance
sont : la détection des coins en utilisant une transformation en tout ou rien, et la
reconstruction géodésique.

3.2 Programmation en langage C++


Le fichier à compléter est imabin.cpp.

1. Programmez la détection de coins ‘saillants’ (méthode detect_coin de la


classe imabin) d’après les éléments structurants de la transformation en tout
ou rien 3×3 correspondante vue en cours. La méthode pourra étiqueter diffé-
remment, de 1 à 4, les quatre coins UR (Upper right), UL (Upper left), LR
(Lower right) et LL (Lower left). Pour manipuler l’élément structurant, vous
disposez de la classe eltstruct définie dans imasite.h et imasite.cpp. Par
ailleurs, on ne s’intéresse pas à la détection des coins ‘débordant’ de l’image.
2. Complétez la méthode précédente pour permettre la détection de coins ‘en-
trants’, et ajoutez de nouvelles étiquettes pour distinguer les coins de 1 à 8
maintenant).
3. Généralisez la méthode de détection de coins précédente pour des éléments
structurants de taille plus grande. Le paramètre utilisé sera la ‘longueur’ en
nombre de pixels des segments de droite définissant un coin.

3.3 Analyse de résultats


1. Discutez des performances de la détection des coins en fonction des images
testées. En particulier quel est l’intérêt de disposer d’un élément structurant
de taille suprérieure à 3×3 ou plus ? Appuyez vos commentaires sur les deux
cas d’images objets.pgm et bureau.pgm.
2. On souhaite isoler les fenêtres dans l’image bureau.pgm. A partir de l’image
seuillée à 0, appliquez une fermeture puis une ouverture de taille 3×3, puis
détectez les coins significatifs (i.e. de longueur suffisante) de façon à éliminer
les composantes connexes autres que les carreaux des fenêtres. Enfin, utilisez
la reconstruction géodésique pour reconstruire les composantes connexes sé-
lectionnées par le critère "ayant un ou plusieurs coins significatifs".
Pour cette question, commentez chaque étape et ajustez si nécessaire les pa-
ramètres proposés à votre cas d’étude.

3
4 TP “Detection de points-clés”
4.1 Objectif
L’objectif de ce TP est la mise en œuvre de concepts vus dans le cours de
Détection de contours. Le détecteur étudié dans cette séance est le détecteur de
Harris.

4.2 Programmation en langage C++


Le fichier à compléter est imacontours.cpp. Programmez la détection de Harris
(constructeur à 4 paramètres, imadata<float>, float, bool, bool, de la classe
keypoints) d’après le cours :
1. Filtrage linéaire gaussien de l’image d’origine I.
2. Calcul des images Ix et Iy des gradients selon les directions x et y respective-
ment, p.e. par différences finies.
3. Calcul des images des termes de la matrice de covariance Ix2 , Iy2 et Ix Iy .


4. Filtrage des images Ix2 , Iy2 et Ix Iy par filtrage linéaire Gaussien → Ix2 , hIy i,
hIx Iy i


2
5. Calcul de l’image du critère R : en chaque pixel R = Ix2 Iy2 − hIx Iy i −
2
κ (hIx i + hIy i) .
6. Création de l’image des points d’intérêt correspondant aux maxima locaux de
R supérieur au seuil t.

4.3 Analyse de résultats


1. Discutez des performances de la détection des coins en fonction des images
testées. En particulier vous utiliserez les images imagetest_synthetic.pgm,
blocs.pgm, bureau.pgm, house.pgm et IRM_cerveau2-1.pgm pour commen-
ter les ‘coins’ détectés et ceux non détectés.
2. Comparez avec la détection de coins par morphologie mathématique. Vous
pourrez vous appuyer sur l’image bureau.pgm obtenue à partir de l’image à
niveau de gris seuillée à 0, filtrée par fermeture puis ouverture (3×3).
3. Une aplication de la détection de points-clé est la mise en correspondance
d’images. Documentez-vous sur internet sur ce que recouvre ce problème
et rédigez ce que vous avez compris. Testez dans le cas de l’image synthé-
tique ayant subit une transformation géométrique (de type translation pour
imagetest_synthetic_tr-50+15.pgm et de type rotation pour
imagetest_synthetic_rot-90.pgm et imagetest_synthetic_rot30.pgm), la
correction de cette transformation. Qu’en pensez-vous ?

4
5 Projet : Détection de position de la main.
5.1 Objectif
L’objectif est de détecter de manière automtique la main sur l’image des dispa-
rités acquise par une kinect et de compter le nombre de doigts (par exemple dans
une application de reconnaissance de signes du joueur). Quelques unes des images
à votre disposition sont montrées sur la figure 1.

Figure 1 – Exemples d’images de mains à détecter en vue de compter les doigts.

Pour cela, nous vous conseillons de procéder selon les étapes suivantes :
1. Segmentation de l’image des profondeurs : Détection des objets situés
au premier plan (parmi les quels on suppose la main du joueur). L’idée dans
cette première étape est d’extraire au mieux la main, et seulement celle-ci. Il
vous faudra donc éventuellement filtrer l’image, procéder à un étiquetage en
composantes connexes, etc.
2. Reconnaissance des doigts : Une fois que la main est détecté, il s’agira
de distinguer le nombre d’extremités. L’idée dans cette seconde étape est de
reconnaitre les doigts en tant qu’extremités éventuellement vérifiant certaines
propriétés d’interaction spatiale. Vous pourrez utiliser les méthodes proposées
par la morphologie mathématiques : squelette, etc.

5.2 Travail demandé


Dans le logiciel de traitement d’images auquel vous êtes maintenant familiari-
sés, vous disposez d’un ensemble important de fonctions (voir la liste), qui sont a
priori suffisantes pour répondre au problème posé. Vous êtes néanmoins invités à
programmer les fonctions qui vous manqueraient, le cas échéant.
Le début de votre travail va consister à tester les fonctions qui vous paraissent per-
tinentes. Dès que vous commencez à aboutir au choix d’une chaîne de traitements,
vous intégrerez l’ensemble des appels aux fonctions dans une même procédure. De
plus amples explications seront données en séance.
Un compte-rendu de miniprojet vous est demandé. Veillez à bien le structurer. Vous
y intégrerez :
– les explications et justifications sur le choix des traitements, et l’organigramme
de la méthode retenue,
– les résultats que vous jugez pertinents, soigneusement commentés,
– une conclusion, qui précise les améliorations possibles et perspectives,
– une annexe avec le code développé.

5
6 Annexe : commandes disponibles
6.1 Catégorie 0 : Opérations de base sur les images à niveaux
de gris
+ ou − entre images niveaux de gris : Addition ou soustraction ou valeur
absolue de la différence entre valeurs des pixels de 2 images à niveaux de gris.
+ ou ∗ avec 1 scalaire : Addition ou multiplication des valeurs des pixels par un
scalaire.
Inversion de niveaux de gris : Inversion de l’échelle des niveaux de gris.
Etirement de la dynamique : Création de l’image de dynamique étirée entre 0
et 255.
Egalisation d’histogramme : Création de l’image d’histogramme égalisé avec
ré-étirement de la dynamique.
Application d’un masque : Mise à 0 des pixels de l’image à niv. de gris (1ère
im. en entrée) ayant la valeur 0 sur l’image binaire ‘masque’ (2ème im. en entrée).
Supérieur au seuil : Création d’1 image binaire des valeurs supérieures au seuil.
Inférieur au seuil : Création d’1 image binaire des valeurs inférieures au seuil.
Seuillage à hystérésis : Création d’1 image bin. des valeurs sup. au seuil haut ou
sup. au seuil bas ET dont la composante connexe a au moins 1 pixel de valeur sup.
au seuil haut.
Seuillage entre deux valeurs : Création d’1 image bin. des valeurs comprises
entre le seuil haut et le seuil bas.
Percentile supérieur : Création d’1 image binaire des p% pixels de valeurs les
plus élevées.
Percentile inférieur : Création d’1 image binaire des p% pixels de valeurs les plus
faibles.
Max : Création d’1 image binaire des valeurs maximales d’1 image à niveaux de
gris.
Max Réginaux : Création d’1 image binaire des maxima régionaux d’1 image à
niveaux de gris.
Ajout bruit gaussien : Ajout d’1 bruit gaussien centré sur les valeurs des pixels.
Ajout bruit impulsif : Ajout d’1 bruit impulsif poivre et sel sur les valeurs des
pixels.

6.2 Catégorie 1 : Opérateurs de filtrage passe-bas


Filtre Gaussien : Filtrage linéaire à noyau gaussien.
Filtre moyenne : Filtrage linéaire à noyau identité.
Filtre médian : Filtrage de rang correspondant à la valeur médiane.
Filtre Nagao : Filtrage multi-noyaux de Nagao.
Filtre SNN : Filtrage par filtre ‘Symetric Nearest Neighbour’.
Filtre FAS : Filtrage par Filtre Alterné Séquentiel (en morphologie mathématique
fonctionnelle).
Pic Signal Noise Ratio : Mesure de rapport signal à bruit. La premièère image
en entrée est l’image reconstruite et la seconde l’image ‘vérité’.

6.3 Catégorie 2 : Opérations de base sur les images binaires


et Opérateurs de morphologie mathématique binaire
AND : ET entre valeurs des pixels de 2 images binaires.
XOR : OU exclusif entre valeurs des pixels de 2 images binaires.
OR : OU non exclusif entre valeurs des pixels de 2 images binaires.

6
NOT : Complémentaire des valeurs d’1 image binaire.
Transformée en distance : Création d’une image des niveaux de gris des dis-
tances du fond aux objets.
Erosion binaire : Application de l’opérateur d’érosion morphologique à 1 image
binaire.
Dilatation binaire : Application de l’opérateur de dilatation morphologique à 1
image binaire.
Ouverture binaire : Application de l’opérateur d’ouverture morphologique à 1
image binaire.
Fermeture binaire : Application de l’opérateur de fermeture morphologique à 1
image binaire.
Tophat binaire : Application de l’opérateur dit ‘chapeau haute forme’ de mor-
phologie mathématique à 1 image binaire.
Reconstruction géodésique : Reconstruction géodésique d’1 image binaire (1ère
image en entrée) à partir d’1 image de marqueurs (2nde image en entrée).
Etiquetage en composantes connexes : Etiquetage en composantes connexes
d’1 image binaire.
Décomposition en rectangles : Décomposition en rectangles d’1 image binaire.
Erosion ultime : Création de l’image des érodés ultimes des objets d’1 image bi-
naire.
Détection de coins : Détection des coins carrés UL (Upper left), UR (Upper
right), LL (Lower left) et LR (Lower right) des objets d’1 image binaire.
Enveloppe convexe : Création de l’image des enveloppes convexes des objets
d’une image binaire.
Squelette : Création de l’image des squelettes des objets d’une image binaire.
Elagage/ébardage : Application de la transformation en tout ou rien réalisant
l’élagage ou ébardage notamment de squelettes.
Zones d’influence géodésique : Création de l’image binaire des zones d’influence
géodésique des objets d’1 image binaire.
Elimination objets du bord : Elimination des objets touchant le bord de l’image
binaire.
Bouchage de trous : Bouchage des trous sur l’image binaire.

6.4 Catégorie 3 : Opérateurs de morphologie mathématique


fonctionnelle
Erosion fonctionnelle : Application de l’opérateur d’érosion morphologique à 1
image de niveaux de gris.
Dilatation fonctionnelle : Application de l’opérateur de dilatation morpholo-
gique à 1 image de niveaux de gris.
Rehaussement de contraste : Opérateur de rehaussement de contraste de mor-
phologie mathématique de paramètre ‘alpha’. Ouverture fonctionnelle : Appli-
cation de l’opérateur d’ouverture morphologique à 1 image de niveaux de gris.
Fermeture fonctionnelle : Application de l’opérateur de fermeture morpholo-
gique à 1 image de niveaux de gris.
Reconstruction géodésique fonctionnelle : Reconstruction géodésique d’1 image
de niveaux de gris (1ère image en entrée) à partir d’1 image de marqueurs (2nde
image en entrée).

6.5 Catégorie 4 : Opérateurs de classification


Classification aveugle aux plus proches voisins : Classification supervisée non
paramétrique, dite ‘k-ppv’. Le 1er fichier en entrée est l’image à classifier, le 2nd est
le fichier texte des échantillons d’apprentissage (format : lig., col., label).

7
Classification aveugle des c-moyennes : Classification non supervisée avec en
entrée l’image des données, en sortie l’image des labels. Les caractéristiques des
classes sont affichées à la console.
Classification aveugle des c-moyennes sur ROI : En entrée : l’image des
données et l’image binaire des pixels à considérer, en sortie : l’image des labels et
les caractéristiques des classes affichées à la console.
Classification supervisée MRF : Classification basée sur un modèle markovien
de l’image des labels. Le 1er fichier en entrée est l’image à classifier, le 2nd est le
fichier texte des classes.
Classification supervisée MRF avec processus lignes : Classification basée
sur un modèle markovien de l’image des labels. Le 1er fichier en entrée est l’image
à classifier, le 2nd est le fichier texte des classes.

6.6 Catégorie 5 : Opérateurs de détection de et sur les contours

Gradient de l’image : Création de l’image de la norme du gradient par filtrage


linéaire passehaut (Prewitt, Sobel ou MDIF).
Détection de contours par gradient : Création de l’image des contours par
seuillage de la norme du gradient (obtenu par filtrage linéaire Prewitt, Sobel ou
MDIF).
Détection de contours par laplacien : Création de l’image des contours par dé-
tection des passages par zéro du Laplacien (obtenu par filtrage linéaire) et seuillage
de la norme du gradient.
Détection de contours par filtrage optimal : Création de l’image des contours
par seuillage de optimal selon soit le filtre de Canny-Deriche soit celui de Shen-
Castan.
Gradient morphologique : Application de l’opérateur de gradient morphologique
(différence entre les résultats de la dilatation et de l’érosion fonctionnelles) en 4 ou
8 connexité.
Laplacien morphologique : Application de l’opérateur de laplacien morpholo-
gique en 4 ou 8 connexité.
Affinement de contours : Sélection des maxima locaux dans la direction du gra-
dient. La 1ère image en entrée est image de contours et la 2nde l’image de données
initiale.
Prolongation de contours : Prolongation des contours sur une distance de N
pixels. La 1ère image en entrée est 1 image de contours et la 2nde est 1 image de la
norme du gradient.
Transformée de Hough : Création de l’image de la transformée de Hough pour
la recherche de droites dans l’espace des coordonnées polaires (rho,theta).
Reconstruction à partir de la transformée de Hough : Création de l’image
reconstruite à partir des maxima de la transformée de Hough. La deuxième image
en entrée est l’image qui sert à donner les dimensions de l’image reconstruite.
Profil en ligne ou en colonne : Intégrale sur la direction orthogonale à celle du
profil (ligne ou colonne) d’une image en entrée binaire.
Détection de points d’intérêt : Création de l’image des points d’intérêt par dé-
tecteur de Harris.
Mise en correspondance de points d’intérêt : Les deux images en entrée sont
des images binaires des points d’intérêt.
Rectification d’1 image : Rectification pour qu’elle soit carrée d’1 image couleur
avec fond vert.

8
6.7 Catégorie 6 : Opérateurs de segmentation
Segmentation à partir d’1 classification : Création de l’image des régions cor-
respondant à l’image des labels en entrée.
Segmentation par croissance de régions : Création de l’image des régions par
croissance de régions à partir de germes (aléatoirement ou déduits de l’histogramme)
et jusqu’à invalidation du critère d’homogénéité.
Segmentation contrainte quadtree : Création de l’image des régions correspon-
dant à une représentation de type quadtree.
Ligne de partage des eaux : Segmentation par l’algorithme de la ligne de partage
des eaux en morphologie mathématique fonctionnelle. Le fichier en entrée est une
image de la norme du gradient.
Segmentation selon graphe : Segmentation par fusion de régions dans un graphe
avec sélection des arêtes de moindre coût par accord mutuel.
Segmentation selon Mumford&Shah : Segmentation selon la résolution hiérar-
chique de Koepfler de la fonctionnelle de Mumford et Shah.

6.8 Catégorie 7 : Estimateurs d’objets


Détection de disques : Détection des disques dans 1 image de régions (d’objets)
avec en entrée les paramètres seuils sur les attributs de forme.
Paramètres de base des objets : Barycentre, surface et boite englobante des
objets. L’image des objets est en entrée, les résultats sont affichés à la console.

6.9 Catégorie 8 : Couleur et texture


Conversion couleur : Conversion d’1 image RGB sous format ppm dans 1 espace
couleur IST, LAB, I1I2I3 ou rgb (norme L1).
Composantes : Enregistre dans 3 images pgm chaque plan image couleur (e.g.
pour des traitements marginaux).
Conversion en fausses couleurs : Conversion d’1 image niv. gris sous format
ppm en fausses couleurs.
Image de texture ordre 1 : Création d’1 image du paramètre de texture sélec-
tionné (contraste, énergie, entropie) à partir d’1 image à niveaux de gris.
Image de moment d’ordre k : Création d’1 image du moment centré d’ordre k
à partir d’1 image à niveaux de gris.
Image de cooccurrence (sur image binaire) : A partir d’1 image binaire en
entrée, création d’1 image à niveaux de gris du paramètre calculé sur la matrice de
cooccurrence (2x2, orientation 0(−), 1(\), 2(|), ou 3(/) et distance sélectionnées en
entrée).

6.10 Catégorie 9 : Mouvement


Image de flot optique : A partir de 2 images à niveaux de gris en entrée, création
d’1 image 2 canaux du flot optique (composantes H et V).

Vous aimerez peut-être aussi