DETECTION D'AXES DE SYMETRIE DANS UNE IMAGE PAR TRANSFORMATION DE HOUGH


RESULTATS



Exemples de détection

Les figures ci-dessus représentent quelques exemples de détections réussies pour quelques images simples.
Nous nous sommes limités à des images ne comportant qu'un seul objet. La segmentation de l'image en objets simples débordant du cadre de ce projet.
La première image est un logo d'église initialement parfaitement symétrique et que nous avons tourné de 30 degrés (fig 3.1). Le logo reste assez symétrique. Ceci permet de tester notre méthode dans un cas simple.
On s'intéresse ensuite à des exemples d'images réelles qui ne sont qu'approximativement symétriques. La première, qui représente Saturne (fig 3.2) possède un axe franc, l'axe polaire de la planète et un axe secondaire significatif le long des anneaux.
Enfin, nous présentons une radiographie du bassin avec un axe le long de la colonne vertébrale (fig 3.3) ainsi que la même détection sur l'image tournée de 120 degrés (fig 3.4).
Logo d'église, seuil = 0.6, DistMax = 30 degrés
Nombre de points de contour = 1369
Accumulateur des axes trouvés = 462 (axe "vertical") et 233 (axe "horizontal")


fig 3.1

Saturne, seuil = 0.6, DistMax = 30 degrés
Nombre de points de contour = 764
Accumulateur des axes trouvés = 349 (axe polaire) et 163 (axe équatorial)


fig 3.2

Radio du bassin, seuil = 0.6, DistMax = 30 degrés
Nombre de points de contour = 1064
Accumulateur de l'axe trouvé = 360


fig 3.3
Radio du bassin tournée de 120 degrés, seuil = 0.6, DistMax = 30 degrés
Nombre de points de contour = 2062
Accumulateur de l'axe trouvé = 645


fig 3.4


Séquence détaillée pour Saturne

Dans cette partie nous détaillons les différentes étapes de la détection des axes de symétrie sur l'exemple de la planète Saturne. La fig 3.5 présente l'image originale sur laquelle nous avons décidé d'effectuer la détection. Cette image était de taille 438*328 et pour accélérer les calculs nous avons travaillé sur une image sous-échantillonnée de 50%. On remarque d'emblée que deux axes principaux sont présents dans l'image : l'un est l'axe polaire de la planète, l'autre se situe dans le plan défini par les anneaux.

Saturne

fig 3.5

La figure 3.6 représente les contours obtenus par la fonction EDGE de MATLAB avec un filtre de Canny et un seuil de 0.6. Ces contours sont de bonne qualité, grâce au fait que la planète se trouve sur un fond noir. Pour obtenir plus ou moins de points on peut jouer sur le seuil. Cependant, si un nombre supérieur de points ne nuit en général pas au calcul des axes de symétrie, il ralentit fortement les calculs puisque le nombre d'opérations nécessaires au calcul de la Transformée de Hough est proportionnel au carré du nombre de points de contour. Cependant, un nombre insuffisant de points de contour peut mener à des erreurs dans le calcul des axes. On peut retenir comme règle générale que les contours extérieurs de l'objet doivent être présents et les contours intérieurs peu représentés pour une détection optimale, sauf si la symétrie est essentiellement portée par les motifs intérieurs à l'objet bien sûr.

Contours, méthode = Canny, seuil = 0.6

fig 3.6


La figure 3.7 représente les valeurs prises par la transformée de Hough de l'image de contour 3.6. On remarque tout de suite que l'espace de paramètres est polaire : on donne la distance en pixels de la droite à l'origine du repère (située en haut à gauche de l'image) en ordonnées et en abscisses l'angle que forme le vecteur normal à la droite avec l'axe des abscisses dans le repère de l'image toujours. Nous avons choisi volontairement de prendre des cases d'accumulation très petites afin d'obtenir une précision satisfaisante. En effet, chaque case représente une différence d'un degré en angle et d'un pixel en distance à l'origine. Nous discuterons l'effet de ce choix dans le paragraphe consacré aux limites de notre méthode. On peut tout de suite grâce à l'échelle de valeurs portée à droite de l'image repérer les points d'accumulation de cet espace : il y en a deux principaux. L'une des difficultés du problème posé était la segmentation automatique de cet espace et les figures suivantes montrent les résultats obtenus avec différentes méthodes.

Transformation de Hough

fig 3.7


Les figures 3.8 à 3.10 montrent les segmentations obtenues avec les trois méthodes que nous avons implantées. Nous avons commencé par une méthode de nuées dynamiques de type ISODATA. Cette méthode, intellectuellement très satisfaisante, donnait de très bons résultats mais posait des problèmes de complexité, et nous a laissé l'impression d'utiliser une méthode très complexe pour résoudre un problème simple. Nous avons donc décidé d'implanter des méthodes plus simples, basé sur une connaissance a priori de la structure des solutions : nous avons supposé que sur un objet deux axes de symétrie différents ne pouvaient avoir des orientations proches de moins de DistMax degrés. Ainsi nous nous livrons à une classification itérative plus empirique certes mais aussi beaucoup plus simple. La première version sans élimination des points classifiés présentait le problème de pouvoir donner des centres finaux séparés de DistMax/2 au minimum. Nous avons donc implanté une deuxième version qui élimine les points déjà classifiés (et n'autorise pas à un point de changer de classe au fur et à mesure des itérations) qui satisfait notre postulat de base. Nous détaillons les algorithmes utilisés dans la partie de ce site consacrée à la méthode de détection.
Il est à noter que toutes ces méthodes donnent plus de 2 classes, alors que nous souhaitions obtenir 2 axes pour cette image. En fait malgré nos efforts nous n'avons pas réussi à obtenir un algorithme de filtrage des axes satisfaisant pour toutes les images. Le nombre d'axes détectés est donc un paramètre spécifié par l'utilisateur. Le programme rend en fonction de ce chiffre k les k axes les plus vraisemblants, la mesure de vraisemblance étant effectuée par le total d'accumulation obtenu par l'axe en question dans l'espace de Hough.

Isodata sans rejet, taille minimale des classes = 1000, seuil division = 20, seuil groupement = 10

fig 3.8
Séparation angulaire des maxima, DistMax = 30 degrés

fig 3.9
Séparation angulaire des maxima sans reclassification, DistMax = 30 degrés

fig 3.10


La figure 3.11 représente le résultat final de la détection des axes pour l'image Saturne. Nous pouvons être satisfaits de cette détection puisque les 2 axes détectés correspondent bien à des axes de symétrie de l'image.

Axes trouvés

fig 3.11

Ceci conclut la partie de ce site consacrée à la démonstration des étapes de la détection. En conclusion, nous pouvons regretter que l'algorithme lui-même ne décide pas du nombre d'axes présents dans l'image mais comme nous l'avons déjà dit nos efforts ont été effectués pour arriver à cela sans succès.


Limites

Ici un exemple flagrant de problème de détection : si nous demandons 4 axes au programme (ce qui semble tout de même un peu exagéré) nous obtenons les résultats illustrés par la figure 3.12 . Ces axes sont relativement cohérents si on regarde la structure de près, et l'axe principal reste beaucoup plus important que les autres en termes de vraisemblance. Cependant, le programme ne peut par lui-même décider que les 3 axes suivants sont incohérents.

Radio du bassin, seuil = 0.6, DistMax = 30 degrés
Nombre de points de contour = 1064
Accumulateur des axes trouvés = 360 (axe vertical), 158 (axe horizontal), 143 (axe diagonal de normal -39 degrés) et 143 (axe diagonal de normal 43 degrés)


fig 3.12

La dernière figure représente un essai de détection d'axe de symétrie sur un visage. Nous avons ajouté le masque des lunettes APRES détection bien sûr pour conserver l'anonymat de monsieur Henri Maître, professeur de traitement des images à l'E.N.S.T. et qui a proposé ce sujet.
L'axe oblique reste à peu près cohérent si l'on considère la détection de contour qui est faite, et le fait que le col du sujet ait été mieux détecté que les éléments internes du visage pèse lourdement sur les calculs. Ceci illustre une remarque faite précédemment : si la symétrie de l'objet est portée par des éléments qui sont détruits par la détection de contours alors on ne détecte pas les axes souhaités (on aurait aimé pouvoir détecter un axe vertical passant entre les deux yeux mais ceux ci n'étant pas détectés par la fonction EDGE, on pet difficilement espérer retrouver cet axe).

Visage original, seuil = 0.45, DistMax = 30 degrés
Nombre de points de contour = 193
Accumulateur des axes trouvés = 96 (axe horizontal), 78 (axe diagonal)


fig 3.13
Contours du visage, seuil = 0.45


fig 3.14


Ceci clôt le paragraphe sur les limites de l'algorithme que nous résumerons ainsi :
Retour au sommaire

mars 2001