Détection de droite
1.1 La transformée classique de Hough
La formule la plus simple représentant une droite est :
Soient a est la pente de droite b est l’interception de cette droite sur l’axe y y=x+2
Figure 6: Transformation d'une ligne est un point dans l'espace de paramètre
Chaque droite dans l'espace (X,Y) sera transformée en un point dans l'espace de (A,B)
Pour chaque point (x,y), on a une famille de droite (a,b) qui le traverse Ces droites vont êtres représentées par une droite dans l'espace (A,B) Alors, pour trouver la droite passant par deux points A et B, on cherche pour commencer une droite dans l'espace des (a,b) qui présente toutes les droites passant par le point A dans l'espace des (x,y) On l'appelle droite d1 Puis, on cherche une deuxième droite d2 dans l'espace des (a,b) représentant les droites qui passent par le point B L'intersection de deux droites d1 et d2 donne le point contenant les paramètres de la droite recherchée
Par exemple, soient deux points A(2,4) et B(1,1) L'ensemble des droites passant par le point A est y=ax+b avec b=4-2a (1) L'ensemble des droites passant par le point B est y=ax+b avec b=1-a (2) Alors pour chaque coupe (a,b) satisfaisant la condition (1) (ou 2) on a une droite qui traverse le point A (ou le point B) Ainsi, pour détecter la droite qui traverse les deux points A et B, on utilise un accumulateur (sous forme de tableau) Chaque ligne correspond à une valeur possible du paramètre a et chaque colonne correspond à une valeur possible du paramốtre b Chaque ôcaseằ du tableau reprộsente une droite de paramốtres a et b a/b -4 -3 -2 -1 0 1 2 3 4
Figure 7: Chercher la ligne qui passe par deux points en utilisant la transformée de Hough
Initialement, toutes les valeurs du tableau (accumulateur) sont mises à zéro Puis la valeur d'une ôcaseằ va s'incrộmenter lorsque la droite correspondante traversera le point concerné En prenant notre exemple, on peut considérer en premier le point A Pour chaque valeur du paramètre a, on calcule la valeur du paramètre b et on ajoute 1 à la valeur de la ôcaseằ correspondante aux valeurs a et b a/b -4 -3 -2 -1 0 1 2 3 4
Tableau 2: Accumulation après calcul pour le point A(2,4)
Puis, on fait la même chose avec le point B et on obtient le tableau suivant : À la fin du processus (d'accumulation), la ôcaseằ ayant obtenu la valeur la plus ộlevộe correspond à la droite qui traverse le plus nombres grand nombre de point Dans notre exemple, on peut constater que 2 est la valeur la plus élevée du tableau La position de la ôcaseằ contenant cette valeur nous permet de dộterminer les paramốtres (a=3 et b=-2) de la droite passant par les points A et B Ces paramètres trouvés, satisfont les deux conditions (1) et (2) ci-dessus
Pourtant, il survient un problème quand on représente une droite par un point dans l'espace des (a, b) ceci lorsque l'un des deux paramètres a ou b devient infini: la droite recherchée est de plus en plus verticale, ce qui implique que l'espace des paramètres a et b devienne de plus en plus large Dans ce cas, on ne peut donc pas trouver la droite en question a/b -4 -3 -2 -1 0 1 2 3 4
Tableau 3: Accumulation après calcul pour le point A(2,4) et le point B(1,1) de cette manière On a besoin d'utiliser une autre représentation pour limiter un des deux paramètres
1.2 Généralisation de la transformée de Hough
Le problème rencontré dans la section précédente peut être résolu par l'utilisation de la représentation en système polaire d'une droite
Dans ce système, une droite est représentée par la formule suivant :
Où est la distance entre l’origine à cette ligne est l’angle entre l’axe x et le vecteur
Le domaine de variation de est [0 180] en degré (ou entre [0 PI] en radian) On suppose que D est la diagonale de l'image Alors, les valeurs possible des sont comprises entre -D et D Une droite dans l'espace de (X,Y) sera transformée en un seul point dans l'espace des (l'espace de Hough) L'ensemble des droites passant par un point dans l'espace euclidien, sera transformé en un unique couple de sinusọde dans l'espace de contrairement à une droite dans la technique précédente
Toutefois, on applique la même méthode pour trouver la droite reliant deux points : On cherche deux courbes dans l'espace de représentant la famille de droite passant par les points A et B Puis, on cherche l'intersection des deux courbes Ce point nous donne les paramètres de la droite passant par A et B
En utilisant de cette manière la représentation de droite on peut trouver toutes les droites présentes dans l'image.
Détection de cercle
Plusieurs objets particuliers se composent de cercle comme un coin, une balle, ou un iris dans le cas de mon travaille Ces objets ont des contours sous forme de cercle Donc, nous avons besoin de trouver les cercles dans l'image
Figure 8: Présentation de ligne en système polaire
Soit r est le rayon du cercle (a,b) est le centre du cercle
Ainsi donc l'espace des paramètres d'un cercle est de dimension 3 c'est à dire R3 par rapport à R2 pour une droite Par ailleurs, plus la dimension de l'espace des paramètres est grande, plus la complexité de la transformée de Hough augmente Pour diminuer les calculs, on peut limiter la valeur du rayon du cercle recherché dans un domaine de valeur connue
Un cercle est représenté par 3 paramètres (a,b,r) Si on fixé le rayon, le cercle dépend seulement des coordonnées du centre Dans ce cas, l'ensemble des centres des cercles qui ont un même rayon R et passe par le point (x0,y0) dans l'espace (X,Y) désigne un cercle avec le même rayon dans l'espace de paramètre Donc, si on fait varier le rayon on a un volume de cône dans l'espace de paramètre
Figure 9: Un cercle transformé de l'espace (x,y) à l'espace de paramètre avec le rayon fixé
Figure 10: La transformée de Hough pour un cercle dans l'espace de paramètre
De la mờme faỗon, on peut utiliser un accumulateur comme prộcộdemment dans la détection de droite Cette fois-ci, ce dernier possède trois dimensions Voici l'algorithme de la transformée de Hough pour la détection de cercle :
Pour chaque point de contour
1 Dessiner un cercle en prenant ce point comme le centre
2 incrémenter la valeur de tous les points qui est passé par ce cercle dans la matrice de l'accumulateur
2 Chercher une ou plusieurs valeurs maximales dans la matrice de l'accumulateur
II - Contour actif (Snake contour en anglais )
Principe
Le contour actif (ou snake contour) est l'ensemble de point d'une courbe (fermée ou non) qu'on va tenter de déplacer pour leur faire épouser une forme Il est représenté par la formule suivante :
Le paramètre s représente le point de contrôle Ces valeurs prises entre 0 et 1 donnent lieu à la courbe (courbe paramétrée).Cette méthode ne peut pas détecter automatiquement des contours dans une image Elle a besoin d'une position initiale pour les points de contrôle
L'idée principale de cette méthode est de déplacer les points de contrôle pour les rapprocher le plus possible des contours d'intérêt Elle est basée sur les notions d'énergies interne et externe dont le but est de minimiser l'énergie totale présente le long de la courbe La fonction d’énergie rattachée au contour actif se compose de trois éléments :
Les deux premiers éléments de cette équation forment l'énergie interne de la courbe: la tension et la rigidité Elles sont contrôlées par cette force Le dernier élément représente l'énergie externe de la courbe On peut alors reformuler l'équation ci-dessus par :
L’énergie interne
Dans l'équation (9), l'énergie interne est divisée en deux sous énergies : la force d'élasticité et la force de courbure La fonction d'énergie est représentée par :
Le premier terme de l'équation (11) représente la force élasticité Elle contrôle la tension du contour actif: elle empêche le contour de se rétracter mais aussi l'extension de ce dernier
Le deuxième terme représente la force de courbure: cette force contrôle la rigidité du contour
Pendant le processus de déformation, elle essaye de lisser le contour
Les paramètres α et β devant chaque terme sont les poids de la fonction Généralement, la valeur de ces poids est constante pour tous les points de contrôle Ils sont fixés au début du processus de déformation Ces paramètres ont un grand impact sur la performance de ce processus Si on choisi les bons paramètres, le processus de déformation va finir vite et on aura un bon résultat Par contre, ce processus est très long à s'exécuter et l'algorithme peut s'arrêter avant d'avoir trouver le contour optimal car on a limité le nombre d'itérations
Chaque objet dans image a besoin de ses propres paramètres pour que l'algorithme puisse v i-1 v i v i+1
La fo rce éla sti qu e
Figure 11: L'énergie interne trouver son contour optimal Donc, il faut tenter plusieurs valeurs différences de chaque paramètre pour trouver les bonnes valeurs qui nous donnent le meilleur résultat
Figure 12: Illustration de la force élastique et la force de courbure
L’énergie externe
L'énergie externe est la dérivée de l'intensité de l'image Son but est d'attirer la courbe au plus prêt du contour d'intérêt Cette énergie peut-être définie par l'équation suivant : représente le gradient de l'intensité de l'image qui est calculé à point de contrôle s dans le contour actif
Cette énergie est la nature de l'attraction vers les contours intéressants Une illustration en est faite à la figure (13) :
Figure 13: Illustration de l'effet de l'énergie externe
Les bases de données
Avant l'an 2000, il n'existait pas de base de données publique pour la vérification par l'iris CASIA (Chiness Academy of Science Institute of Automation) est la première base de données publique La première version de cette base (CASIA v1.0) a été demandée par plus de 1500 chercheurs et groupes de 70 pays et régions Cette version contient 756 images d'iris de 108 personnes La région de la pupille de chaque image a été détectée automatiquement et remplacée par une région circulaire dont l'intensité est constante (noir) Les images dans cette base sont toutes nettes et les iris sont faiblement couverts de paupières et de cils La résolution de chaque image est 320*280 pixels (http://www.sinobiometrics.com/)
Une autre base de données est ICE qui a été publiée par le NIST (National Insitute of Standards and Technology) La base ICE_2005 se compose de 2953 images en niveau de gris de 132 personnes Elles sont acquisses par une caméra dédiée LG2200 Chaque image ayant une taille de 640x480 pixels capture un œil Cette base a été divisée en deux sous bases : une pour les images de l'iris droit (1425 image d'iris de 124 personnes) et une autre pour les images de l'iris gauche (1528 image d'iris de 120 personnes) Dans la plupart de cas, les images de l'iris droit et gauche sont acquises en même temps Les images dans cette base contiennent des reflets lumineux, du flou et du bougé De plus, les iris dans cette base peuvent être recouverts par les paupières et par les cils (http://iris.nist.gov/ice/)
Figure 14: Une image dans la base de données CASIA v1.0
Figure 15: Des exemples d'images de la base de données ICE 2005
Les difficultés
Les expériences ont été réalisées sur la base ICE_2005 Après analyse de cette base, les difficultés rencontrées sont les suivantes :
⁃ Présence du mascara : le mascara regroupe les cils et ceux-ci deviennent encore plus noirs comme la pupille Parfois la région des cils fusionne avec celle de la pupille Il devient alors difficile de les séparer
⁃ Reflet : Il s’agit du reflet de la lumière dans les yeux Il y a des reflets dans toutes les images dans la base de données Il est présent sur la pupille, l'iris Dans certains cas il est présent sur le bord de la pupille (ou de l'iris), il peut ainsi poser quelques difficultés lorsqu'on cherche des contours
⁃ Les contours de la pupille et de l'iris ne sont pas vraiment circulaires : Alors, si on cherche des contours circulaires dans l'image on aura toujours des erreurs De plus, les paupières couvrent régulièrement une partie de l'iris Donc, dans la plupart des cas, on n'obtient pas un contour complet de l'iris
⁃ Image capturée est flou : Les yeux bougent quand on capture l'image
⁃ Il y a des bruits dans l'image : La qualité de l'image n'est pas bonne
L'Objectif de mon stage est le développement d'un module pour trouver les contours de la pupille et de l'iris dans les images de l'œil Ces contours sont semblables à des cercles Donc, l'idée principale est qu'on va utiliser la transformée de Hough pour chercher les cercles dans l'image Cependant dans le chapitre III, on a montré que l'espace de paramètres pour les cercles est R3 Alors, l'exécution de transformée de Hough dans ce cas sera très longue Il faut limiter la région de recherche et le rayon du cercler dont on a besoin de trouvé pour diminuer le temps d'exécution et les erreurs aussi
Après analyse des images de la base de données utilisée, j'ai pu constater que le niveau de gris de l'iris se situe dans une zone très grande (à partir de 27 jusqu'à 195) Pour les images ayant le niveau de gris de l'iris le plus bas, on peut distinguer facilement ó est l'iris dans cette image car le niveau de gris du blanc de l'œil est plus important Pourtant, dans le cas ó le niveau de gris de l'iris est important aussi, il est très difficile de distinguer la région de l'iris et la région du blanc de l'œil Par contre, le niveau de gris de la pupille est quant à lui toujours plus bas dans l'image (entre zéro et 25) La région de l'iris est entourée de la pupille et on peut trouver un seuil pour les séparer Si on connaỵt ó se situe la pupille dans image, on peut déterminer la région de l'iris en concentrant les recherches autour de cette région pour trouver les contours de l'iris
De plus, j'ai pu obtenir des informations sur le rayon maximal et le rayon minimal de la pupille et de l'iris Se sont:
− Le rayon minimal de la pupille (LOWER_PUPIL_RADIUS) est d’environ 26 pixels
− Le rayon maximal de la pupille (UPPER_PUPIL_RADIUS) est d’environ 77 pixels
− Le rayon minimal de l'iris (LOWER_IRIS_RADIUS) est d’environ 92 pixels
− Le rayon maximal de l'iris (UPPER_IRIS_RADIUS) est d’environ 140 pixels
On peut utiliser ces informations pour limiter le domaine de variation des valeurs du rayon lorsqu'on applique la transformée de Hough À partir de ces connaissances, j'ai proposé une solution qui se décompose en 6 grandes étapes:
1 Localisation de pupille : Le but de cette première étape est de localiser la région de la pupille Cette information est très utile Grâce à elle, on a pu réduire la taille de la zone de recherche dont on a besoin pour trouver le contour
2 Recherche du contour initial de la pupille : Dans cette étape, j'ai utilisé la transformée de Hough pour chercher les cercles présents dans la région pupille qu'on a obtenu dans l'étape ci-dessus
3 Recherche du vrai contour de la pupille : On cherche le ôvraiằ contour de la pupille en utilisant la méthode du contour actif et se servant du contour initial de l'étape précédente
4 Recherche du contour initial de l'iris : En utilisant la ôrộgionằ pupille, je j'estime la pour chercher le contour initial de l'iris
5 Recherche du vrai contour de l'iris : On utilise le contour initial et applique le contour actif pour trouver le ôvraiằ contour de l'iris
6 Génération du masque : Cette dernière étape permet de générer un masque qui nous indique quelle région va être utilisée pour l'analyse de la texture de l'iris
Dans les sections suivantes, je parlerai de manière plus détaillée ces six étapes
III - Localisation de la pupille
Algorithme
Comme j'ai pu le souligner dans la section précédente, la localisation de la pupille dans l'image est une phase trốs importante Si on la connaợt, on peut diminuer la taille de la zone de recherche et donc augmenter la vitesse d'exécution et diminuer l'erreur De plus, le niveau de gris de la pupille est le plus bas dans image et ne varie pas beaucoup Donc, la région de la pupille est la plus facile à détecter dans l'image On peut faire un simple seuillage pour obtenir cette région
Pourtant, lorsque j'ai appliqué le seuillage, j'ai rencontré un problème J'ai obtenu dans l'image binaire non seulement la région de la pupille mais aussi celle des cils Chaque cil est svelte Normalement, on pourrait faire une érosion pour supprimer ou séparer les régions présentant des cils dans image binaire Mail il existe beaucoup de cas ó on ne peut pas supprimer tous les cils dans image ou au minium les séparer d'avec la pupille En réalité, les femmes aiment bien utiliser du mascara pour bien marquer leurs cils En utilisant cet outil, les cils se regroupent et deviennent encore plus noir Dans les images capturées des yeux utilisant du mascara, la rộgion des cils est trốs ôprononcộeằ Et parfois elle fusionne avec la rộgion de la pupille, et donc rend difficile la dộtection exacte de la rộgion ôpupilleằ
Dans le tableau suivant, je montre trois exemples La première colonne représente l'image d'origine et la deuxième colonne contient l'image binaire après application d'une érosion Dans le premier cas, la région des cils est très prononcée et elle fusionne avec la rộgion ôpupilleằ On ne peut pas alors les sộparer Dans le deuxiốme cas, les cils sont aussi prononcés Mais ils sont séparés d'avec la pupille Le dernier cas, on n'obtient que la pupille dans l'image binaire
La région de la pupille et la région des cils sont mélangées C'est très difficile de les séparer
La région des cils et la région de la pupille sont séparées Dans ce cas, on peut détecter quelle région représente la pupille
Dans ce cas, on n'obtient que la région de la pupille
Tableau 4: Exemple du résultat de localisation de la pupille
Alors, pour résoudre ces problèmes, j'ai proposé l'algorithme adaptatif suivant :
− Étape 0 : Donner un seuil initial S Le niveau de gris de la pupille est très bas (à partir de zéro à 25) Donc j'ai choisi le seuil initial S égal à 22
⁃ Étape 1 : (Binarisation) On crée une image binaire (imb) en utilisant le seuil S Les points ayant le niveau de gris supérieur du seuil S vont être noir (niveau de gris égale zéro)
Donc les régions blanches dans l'image imb seront les régions de la pupille et les régions des cils
⁃ ẫtape 2 : Faire une ộrosion avec une fenờtre en forme de ô croix ằ et de taille 15x15 Le but de cette étape est de distinguer les régions dans l'image imb
⁃ Étape 3 : Chercher les régions les plus grandes dans imb Dans cette étape, on recherche une liste des 10 régions (au maximum) les plus grandes dans imb Chaque dimension de chaque région dans cette liste doit être supérieur de LOWER_PUPIL_RADIUS*2-13
− Étape (4-a) : S’il n'y a aucune région qui est satisfaite avec la condition du dessus, on augmente le seuil S de 10 et on retourne à l'étape 1 (Dans ce cas, cela veut dire que le seuil qu’on a utilisé, est trop petit On n'obtient que de petites régions (les cils ou une partie de la pupille) Donc il faut augmenter la valeur du seuil S et recommencer)
− Étape (4-b) : Si les deux dimensions de toutes les régions dans la liste que on a obtenu, ne sont pas comparables (c'est à dire que la différence entre les deux dimensions est inférieure à 50 pixels), on diminue le seuil de 5 et retourne à l'étape 1 (Dans ce cas, cela veut dire que le seuil utilisé est trop grand Les régions de la pupille et des cils sont mélangées On ne peut pas les distinguer Alors il faut diminuer la valeur du seuil S et recommencer)
− Étape (4 -c) : Pour les régions satisfaisantes toutes les conditions ci-dessus ont ộtộ respectộes, on les compare alors avec un modốle de rộgion ôrondằ de mờme taille pour en déduire la région la plus proche de ce modèle
Condition d'arrêt de l'algorithme : Cet algorithme va terminer si on a trouvé une rộgion plus proche du modốle (rộgion ôrondằ de l'ộtape 4-c) Sinon, il va s'arrờter lorsque le seuil devient inférieur de zéro ou supérieur à 255 ou après 20 boucles Dans ce cas, on va chercher les contours dans toute image
Il faut maintenir la liste des régions les plus grandes dans imb car la région la plus grande dans image peut-être celles des cils À cause du bruit et du spotlight, après l'étape (2), la région de la pupille peut-être plus faible que celle-là des cils La deuxième condition dans l'étape (3) a pour but d’éliminer les régions trop petites dans image
Dans les étapes (4-a) et (4-b), si le seuil qu'on a utilisé n'est pas approprié alors, il faut le corriger et recommencer Si on tombe sur le cas (4-c), on obtient la liste des régions les plus grandes dans image Ces régions ont leurs deux dimensions comparables Elles sont des candidates pour examiner la présence de la pupille Je trouve que toutes les régions de la pupille dans image binaire ont une forme ronde Donc, pour déterminer quelle région représente la pupille, j'ai comparé les régions obtenues avec un modèle d'une région ronde de même taille J'ai décidé que la région la plus proche de ce modèle est la région de la pupille
Figure 16: La région du cil est plus grande que celle-là de la pupille
Expériences
Au départ, j'ai fait plusieurs tests sur la base de données ICE_2005 Elle est composée de
2953 images en niveau de gris Pour évaluer les résultats de ma méthode de segmentation, je me suis servi d'une base d'images dộjà segmentộes dite de ôrộfộrenceằ Cette base de référence a été créée par les autres membres l'équipe: Ils ont déterminé les contours en utilisant la transformée de Hough et ensuite les ont corrigés à la main Ainsi, les contours de référence sont très bien situés
Concernant le travaille de localisation proprement dit, il n'y a pas eu d'itération au départ dans cette phase J'ai fixé un seul seuil pour créer les images binaires dans l'étape 1 Pourtant, on ne peut pas utiliser un même seuil pour toutes les images de la base de données car le niveau de gris de la pupille et de l'iris de chaque image varié Dans un premier temps, j'ai d'abord essayé de chercher un seuil qui fonctionne bien sur la plupart des cas La meilleure valeur de seuil que j'ai obtenue est 22 Avec cette valeur (et sans itération), j'ai pu déterminer la position de la pupille dans 2855 images soit dans 96,68% des cas Dans les autres cas, je n'ai pas pu localiser la pupille car elle s'était regroupée avec la région des cils; ce qui laissait supposer que cette valeur du seuil (s") n'était pas appropriée pour ces images en question
Les résultats de cette phase sont très importants La qualité de la localisation de la pupille influe sur la vitesse et l’efficacité de la segmentation C’est la raison pour laquelle j’ai proposé et pris beaucoup de temps pour améliorer cette phase La meilleure amélioration que j'ai obtenue est l'ajout d'une boucle Au lieu d'exécuter une seule fois, j'ai essayé de l'exécuter plusieurs fois À la fin de chaque fois, si je ne peux pas localiser la pupille, j'essaye de déterminer quel est le problème Dans les épates (4-a) et (4-b), j’ai cité les deux cas les plus rencontrés Le problème de ces deux cas est que le seuil utilisé était non convenable (soit trop petit soit trop grand) Après avoir repérer le problème, j'ai essayé de modifier le seuil puis de recommencer Grâce à cette amélioration, j'ai réussi à localiser la pupille dans 2948 cas (soit 99,83% des cas) Il restait alors seulement 5 images pour lesquelles je ne suis pas arrivé à localiser la pupille
IV - Segmentation de la pupille
Recherche du contour initial
L'étape de localisation de la pupille étant très importante, toutes les étapes suivantes se sont basées sur ses résultats Alors si on s'est trompé, on détectera de mauvais contours de pupille et d'iris À cet instant, on suppose qu'on connait la zone contenant la pupille dans l'image Par ailleurs dans l'étape précédente on a utilisé une érosion Résultat: la région obtenue est plus petite que la région réelle De plus, la région obtenue contient peut-être seulement une partie de la pupille Alors, il faut agrandir cette région pour avoir la zone complète de la pupille
Suivant diverses mes expériences, j'ai constaté que si on considérait pour chaque dimension de la zone trouvée un au diamètre supérieur au maximum possible de la pupille (à savoir UPPER_PUPIL_RADIUS*2), on couvrait toute la pupille Ainsi, La taille de la zone pupille après l'agrandissement est environ 100 pixels Elle est beaucoup plus petite que celle de l'image totale (640x480 pixels) On constate alors qu'on peut améliorer de beaucoup la vitesse d'exécution si on utilise seulement cette zone comme entrée de la transformée de Hough
L'algorithme réalisé est le suivant :
− Étape 1 : Agrandir la région contenant la pupille (Chaque dimension est égale à UPPER_PUPIL_RADIUS*2+20) On l'appelle la zoneP
− Étape 2 : Chercher les cercles dans la zoneP en utilisant la transformée de Hough
− Étape 3 : Normalisation du nombre de vote pour chaque cercle obtenu en utilisant la formule suivant : nVoteNorm = nVote / rayon
Avec nVote : le nombre de vote de ce cercle rayon : le rayon de ce cercle nVoteNorm : le nombre de vote normalisé
− Étape 4 : On ne compte que les cercles qui sont bien centré dans la zoneP (La distance entre le centre de ces cercles et le centre de la zoneP doit ờtre infộrieure ou ộgale à ẳ de la dimension la plus petite de la zoneP ) On prend le cercle ayant nVoteNorm le plus grand comme étant le cercle initial de la pupille À l'étape 2, on donne la zone de la pupille comme entrée de la transformée de Hough
Toutefois avant, on va chercher les contours dans cette zone (image de la zone pupille) grâce au filtre de Canny Puis, on va chercher tous les cercles possibles ayant un rayon compris entre de LOWER_PUPIL_RADIUS et UPPER_PUPIL_RADIUS Voici quelques images de la zone pupille après application du filtre de Canny:
Figure 17: Quelques images binaires de la zone de la pupille
Je trouve que dans tous les cas, les contours du spotlight et des cils sont très forts dans l'image binaire de la pupille Dans quelque cas, il me pose certaines difficultés quand j'essaye de trouver le contour de la pupille Par exemple, dans le cas ci-dessus, le contour de la pupille est très faible par rapport au contour du spotlight et des cils Dans ce cas, le contour initial de la pupille obtenu est un peut loin du ôvraiằ contour
En plus, les contours de la texture de l'iris sont aussi forts Dans le deuxième et le troisième exemple que je montre ci-dessus, il y a beaucoup de contour de la texture autour du contour de la pupille Il se pose donc un autre problème : on obtient alors plusieurs cercles ayant le même centre mais avec des rayons différents Pour le plus grand rayon, le cercle correspondant peut avoir le plus grand nombre de vote Dans ce cas, si on prend le cercle qui a le plus grand nombre de vote comme contour initial de la pupille, on gagne beaucoup d'erreur Pour résoudre ce problème, j'ai rajouté une étape pour normaliser le nombre de vote pour chaque cercle obtenu à l'étape (3) Donc, le critère de choix du meilleur cercle dans l'étape (4) n'est pas le nombre de vote, mais le nombre de vote normalisé Le nombre de vote normalisé est calculé par la division du nombre de vote par le rayon de cercle Pourtant, avant de choisir le meilleur cercle, je filtre les cercles obtenus pour diminuer les erreurs Après analyse des images binaires de la zone de pupille de la base de données, je constate que la pupille est bien centrée dans cette zone Ensuite, j'ai calculé la distance entre le centre de la zone de pupille et le centre des cercles obtenus Je n'ai maintenu que la liste des cercles qui ont une distance infộrieure ou ộgale ẳ de la dimension de la plus petite zone de pupille en question Enfin, j'ai cherché le cercle qui a le nombre de vote normalisé le plus grand dans la liste de cercle qu'on a filtrée
Tout d'abord, je n'ai pas utilisé la première condition de l'étape (4) J'ai cherché simplement le cercle ayant le nombre de vote normalisé le plus grand J'ai fait le test sur toute la base de données Pour mieux analyser le résultat, j'ai créé un tableau de comparaison entre le cercle obtenu avec le cercle annoté Voici un exemple de ce tableau avec quelques images:
Tableau 5: Une partie du tableau de comparaison entre le cercle obtenu avec le cercle référence
Chaque ligne dans de ce tableau représente une image La première colonne dans ce tableau contient le nombre d'image, le six colonnes suivantes contiennent la position et le rayon du cercle que j'ai obtenu et du cercle de référence, la huitième et neuvième colonne sont les nombres de vote normalisé de chaque cercle, et les deux dernières colonnes contiennent la distance entre deux centres de deux cercles et la différence absolue entre les deux rayons
Selon, ce tableau, j'ai considéré que les cercles ayant une distance supérieure à 20 avec leurs cercles de référence ou que la différence entre leurs rayons soit supérieur à 10 est considéré comme une erreur Ces cercles sont trop loin le cercle référence Au final, il y a eu
19 erreurs (soit 0,64% de la base) Après analyse du tableau, j'ai constaté que le cercle ayant le nombre de vote normalisé le plus grand que j'ai choisi n'est pas toujours le cercle auquel on s'intéresse Il faut ajouter des conditions pour qu’on puisse éliminer ces derniers
Figure 18: La pupille est bien centrée dans la zoneP
En supposant qu’on a réussi de localiser la pupille après l'étape (1) de cette phase, on a une image avec la pupille au centre: c'est une très bonne information On peut en profiter pour augmenter l'effet de cette phase J'ai rajouté alors une condition à l'étape (4), ó j'ai rejeté les cercles qui ne sont pas bien centrés sur la zoneP avant de recherche ceux dont le nombre de vote normalisé est le plus grand Voici le tableau de comparaison du test dans ce cas :
Tableau 6: Le résultat de la comparaison entre le cercle obtenu et le cercle de référence après ajout de la condition
Grâce à l'addition de cette condition, j'ai amélioré de beaucoup le résultat Il n'y a plus que 7 erreurs (soit 0,23% des cas) par rapport à 19 erreurs (soit 0,64% des cas) dans précédemment
N points RefDistance(Ch,Cr)
Nom d'image Localisation Cany Segmentation
Tableau 7: Les 7 cas d'erreur de la phase de recherche du contour initial de la pupille
Dans le tableau (7), j'ai mis les résultats de chaque étape pour les 7 cas d'erreur On peut voir que l'erreur de l'étape de localisation de la pupille cause des erreurs de segmentation dans les quatre premiers cas du tableau Dans les trois derniers cas, on a bien localisé la pupille
Pourtant, le niveau de gris de l'iris est très bas Donc, il est difficile de trouver le contour entre la pupille et l'iris Par contre, le reflet dans la pupille est très important C'est pour ces raisons qu'on a obtenu une erreur de segmentation malgré qu'on a réussi à localiser la pupille.
Application du contour actif
Avant la phase d'application des contours actifs, j'ai appliqué quelques prétraitements sur l'image d'entrée dont but est d’augmenter le niveau de gris de la région intéressante et diminuer les autres Alors après application des prétraitements, la région intéressante est plus forte que les autres
Voici les étapes de prétraitements avant application des contours actifs pour la pupille :
− Étape 1 : Calculer la valeur médiane des pixels dans la région limitée par le contour initial de la pupille qu’on a trouvé
− Étape 2 : Calculer la probabilité de similarité avec cette valeur pour toutes les valeurs dans l'image d'origine (P1)
− Étape 3 : Calculer la probabilité de similarité avec la valeur 255 (sportlight) pour toutes les valeurs dans l'image d'origine (P2)
− Étape 4 : On donne un seuil pour jeter les pixels ayant une probabilité basse
− Étape 5 : Pour chaque pixel dans image, on compte les pixels qui ont une probabilité P1 ou P2 élevée dans un carrée de 10x10 pixels autour du pixel actuel Si ce nombre est supérieur au 1/3 du nombre de point dans ce carrée, le pixel actuel va prendre la probabilité totale de P1 et P2
Dans les deuxième et troisième étapes, on calcule la probabilité de similarité avec la valeur moyenne m en utilisant la fonction de gaussien:
P(i) : La probabilité à pixel i xi : Le niveau de gris du pixel i : L’écart-type
Voici quelques exemples d'images après application de ces différents prétraitements :
Avant prétraiter P1 (pupille) P2 (sportlight) Après prétraiter
Tableau 8: Les résultats de prétraitements avant application du contour actif pour la pupille
On peut voir qu'en ajoutant P2 (la probabilitộ de reflet), on rempli le ôtrouằ dans la région pupille On a ajouté aussi quelques régions qui présentent la peau Pourtant, elles sont loin de la région pupille Donc, elles n'ont pas de conséquences sur le résultat du contour actif
Le contour actif n'est pas une nouvelle technique Il a été proposé depuis long temps Il est implémenté dans la bibliothèque ouverte OpenCV J'ai utilisé directement cette fonction
Pourtant, il faut choisir les paramètres appropriés pour nos images J'ai fait beaucoup de tests avec différentes valeurs de chaque paramètre soit plusieurs combinaisons
Il y a trois paramètres principaux (alpha, bêta, gamma) qui contrôlent la force d'élasticité, la force de courbure et l'énergie externe Dans les figures au-dessous, on peut voir l'effet de chaque paramètre sur le contour final À chaque fois, on fait varier la valeur d'un paramètre (par exemple alpha) en fixant la valeur des deux autres (par exemple bêta et gamma) à 1.0
J'ai tracé le cercle qui présente le contour initial et le contour trouvé en utilisant le contour actif dans la même image
Pour l'alpha : (bêta = 1.0 et gamma = 1.0)
Tableau 9: Effet du paramètre alpha
Pour le bêta : (alpha = 1.0 et gamma = 1.0)
Tableau 10: Effet du paramètre bêta
Pour le gamma : (alpha = 1.0 et bêta = 1.0)
Tableau 11: Effet du paramètre gamma
Ainsi après plusieurs tests de différentes valeurs pour chaque paramètre, j'ai constaté qu’une combinaison m'a donné le meilleur résultat pour toute la base de données Pour la pupille, la combinaison optimale que j'ai trouvée est : alpha = 1.5 bêta = 4.5 gamma = 1.0
En utilisant cette combinaison et la même image dans la figure au-dessus, on obtient le résultat suivant:
Figure 19: Le résultat du contour actif en utilisant les paramètres optimaux
La pupille est homogène Le niveau de gris de pixel dans la pupille est noir (excepté les pixels correspondant à des reflets) Grâce à cet avantage, on peut trouver facilement le contour de la pupille Par contre, l'iris contient les textures différentes Le niveau de gris des pixels dans l'iris est très varié De plus dans plusieurs cas, le niveau de gris de l'iris est semblable au niveau de gris du blanc de l'œil Il est alors très difficile de trouver le contour de l'iris
Le niveau de gris de l'iris dans ce cas est très bas On peut distinguer facilement ó est l'iris et ó est le blanc de l'œil
Dans ce cas, le niveau de gris de l'iris et du blanc de l'œil sont très semblables Il est très difficile de trouver le contour de l'iris
Figure 20: Le niveau de gris de l'iris est très varié
Le contour de l'iris et le contour de la pupille sont deux cercles ayant le même centre (à peu près) Le rayon de l'iris est plus grand que celui-ci de la pupille Alors, si on a le contour initial de la pupille, on peut estimer la région contenant l'iris
En utilisant le centre du contour initial de la pupille, j'ai pris une zone carrée autour de ce centre Chaque dimension de cette zone est plus grande que le diamètre maximum possible de l'iris de la base de données Comme dans l'étape de recherche du contour de la pupille, on utilise cette zone comme l'entrée de la transformée de Hough
− Étape 1 : Prendre une région de la taille (UPPER_IRIS_RADIUS x 2 + 100) pour chaque dimension On l'appelle zoneI paupière en utilisant la transformée de Hough
− Étape 3 : Chercher les cercles dans la zoneI en utilisant la transformée de Hough
− Étape 4 : Normaliser le nombre de vote pour chaque cercle obtenu en utilisant la formule suivant : nVoteNorm = nVote / rayon
Avec nVote : le nombre de vote de ce cercle rayon : le rayon de ce cercle nVoteNorm : le nombre de vote normalise
− Étape 5 : Prendre le cercle qui satisfait aux conditions suivantes comme le cercle initial de l'iris :
− distIP