Segmentation d’Images par Contours Actifs Tensoriels Compte-rendu projet s8 2010-2011 Salwa Debbagh Véronique bruno Marieme toure Iris lavayssiere Jonas pichat Lucas serdic
Organigramme projet Segmentation par contours actifs tensotiels Tenseurs (Véro, Iris, Jonas) Décomposition image en champ de tenseur + représentation ellipses (Véro) Opérations sur les tenseurs (Iris, Jonas) Segmentation (Salwa, Marieme, Lucas) Level-set (Salwa, Jonas) Noyaux gaussiens (Marieme, Lucas)
Chronologie Projet [2] Image couleur Sélection contour [1] Calcul densité de probabilités [2] Évolution du contour Définition champs de tenseurs Opérations sur les tenseurs Image quelconque en entrée Sélection d’un contour initial [1]qui évoluera au cours du temps. Les calculs [2] se font d’abord sur scalaires puis sur tenseurs. Évolution dynamique du contour
Chronologie finale du projet Image couleur Calcul du champ de tenseur Sélection d’un contour « grossier » Calcul de densité de probabilités Evolution du contour
Décomposition d’une image en champ de tenseurs Modèle RGB Modèle HSL Champs de tenseurs A partir d’une image RGB Obtention d’un champs de tenseur Avec :
Décomposition d’une image en champ de tenseurs Obtention des composantes du tenseur : Composante de la matrice L Composante de la matrice S Composante de la matrice H
Représentation du champ de tenseurs détermine : La teinte (variation de ) La saturation (variation de l’excentricité : ) La luminance (variation de la taille : )
Représentation tensorielle d’une image couleur tenseur.m ellipse.m
Calculs sur les tenseurs Comment? 3 espaces différents Euclidien – Riemannien – log-Euclidien 1ère projection pour utiliser la bonne métrique dans le calcul de la distance. 2ème projection pour revenir dans l’espace de départ (projection inverse) et calculer la moyenne intrinsèque d’un champ de tenseur Pourquoi projeter? Pour que le résultat d’une opération sur des tenseurs soit un tenseur. Ici, pour que la moyenne intrinsèque associée aux différentes métriques soit bien un tenseur.
Calculs sur les tenseurs θ suit une distribution gaussienne On fixe et (valeurs propres du tenseur pour un θ donné) On fait varier θ selon une distribution gaussienne. On a: et On obtient alors les composantes des différents tenseurs T (=pour différents θ) avec: On moyenne ces tenseurs suivant les 3 métriques: euclidienne, Rao et log-euclidienne.
Calculs sur les tenseurs θ suit une distribution gaussienne
Calculs sur les tenseurs θ suit une distribution gaussienne
Calculs sur les tenseurs λ2/λ1 suit une distribution gaussienne On fixe θ et λ1 (inclinaison et une des deux valeurs propres) On fait varier λ2/λ1 selon une distribution gaussienne. On déduit la 2ème valeur propre λ2 à partir de λ1 et λ2/λ1 . On obtient comme précédemment Vx et Vy à partir de θ. On obtient alors les composantes des différents tenseurs T (=pour différents λ2/λ1) avec: On moyenne ces tenseurs suivant les 3 métriques: euclidienne, Rao et log-euclidienne.
Calculs sur les tenseurs λ2/λ1 suit une distribution gaussienne
Calculs sur les tenseurs λ2/λ1 suit une distribution gaussienne
Calculs sur les tenseurs √(λ2*λ1) suit une distribution gaussienne On fixe θ et λ1 (inclinaison et une des deux valeurs propres) On fait varier √(λ2*λ1) selon une distribution gaussienne. On déduit la 2ème valeur propre λ2 à partir de λ1 et √(λ2*λ1) . On obtient comme précédemment Vx et Vy à partir de θ. On obtient alors les composantes des différents tenseurs T (=pour différents λ2/λ1) avec: On moyenne ces tenseurs suivant les 3 métriques: euclidienne, Rao et log-euclidienne.
Calculs sur les tenseurs √(λ2*λ1) suit une distribution gaussienne
Calculs sur les tenseurs √(λ2*λ1) suit une distribution gaussienne
Calcul d’un noyau Gaussien Qu’est ce qu’un noyau? il s’agit d’une technique d’estimation de densité de probabilité dans laquelle une fonction de densité connue (le noyau) est moyennée le long des données observées pour créer une approximation lisse. Expression : où y est |C| est le déterminant de la matrice de covariance du noyau et n la dimension de y. Notre programme permet pour le moment de calculer la valeur du noyau gaussien pour un vecteur qui contient les coordonnées spatiales d’un point quelconque.
Calcul d’un noyau Gaussien Il nous reste à l’adapter pour un tenseur. Mais aussi à créer notre propre fonction de calcul de la matrice de covariance, car la fonction matlab cov n’utilise pas la même moyenne que celle que nous utilisons. De plus, il nous faut valider cette étape car lorsque nous traçons l’histogramme des valeurs de notre noyau, celui-ci ne suit pas une loi de probabilité gaussienne alors que notre distribution est gaussienne.
Estimation de la densité de probabilité L’expression de la densité de probabilité est la suivante : où K représente le noyau gaussien, z et x représentent des points, et n le nombre de points. Cette expression de la densité de probabilité nous sert à vérifier l’homogénéité de notre image en un point z donné : on calcule P(z) en prenant les xi à l’intérieur de contour pour estimer Pin, puis on calcule P(z) en prenant les xi à l’extérieur du contour pour estimer Pout. Si les 2 valeurs sont assez proches, alors nous sommes dans une zone homogène et il nous faut faire évoluer le contour.
Principe Level-Set L'idée consiste à remplacer une courbe plane fermée par une surface fixe dans un espace où le temps représente la troisième dimension. La méthode des Level Set est généralement utilisée pour suivre des interfaces à deux dimensions
Description La figure de droite illustre plusieurs idées importantes sur la méthode. En haut à gauche nous voyons une courbe, c'est-à-dire une région bornée par une frontière régulière. Au-dessous, la surface rouge représente une fonction phi qui détermine cette forme, le plan bleu étant le plan (x,y). Le bord de cette forme est alors la courbe de niveau de phi tandis que la forme proprement dite est l'ensemble des points pour lesquels phi est positif ou nul. Dans la rangée supérieure nous voyons la modification de la topologie par une scission. Il serait extrêmement difficile de décrire numériquement cette transformation en paramétrant la frontière et en suivant son évolution.
Γ(t) = {(x,t)/phi(x,t)=0} Technique L'idée de base de la méthode des courbes de niveau est simple. Une interface Γ qui borne une région ouverte Ω peut être définie à l'instant t au point x comme le niveau zéro d'une fonction lisse phi(x,t) L'interface variable est alors définie par Γ(t) = {(x,t)/phi(x,t)=0} Phi est négatif à l'intérieur de Ω, positif à l'extérieur et nul sur Γ(t).
La position initiale de l'interface étant donnée, il s'agit de calculer son mouvement ultérieur dans un champ de vitesses donné V. Ces vitesses peuvent être fonction de la position, du temps, de la géométrie de l'interface (par exemple sa normale ou sa courbure moyenne) … L'idée consiste simplement à définir une fonction lisse phi(x,t) qui représente l'interface comme l'ensemble tel que phi(x,t)=0. La fonction phi qui s'annule sur l'interface est positive à l'extérieur et négative à l'intérieur. Ainsi l'interface sera capturée à tous les instants ultérieurs en localisant simplement l'ensemble Γ(t) pour lequel phi s'annule. Les modifications de la topologie comme une séparation ou un regroupement sont alors bien définies sans ambiguïté.
Le mouvement s'analyse en faisant transporter les valeurs des niveaux φ par le champ de vitesse V. L'équation exprime qu'en chaque point la variation du niveau est portée par la normale à l'interface, c'est-à-dire par le gradient: En réalité, seule la composante normale de V est nécessaire : de sorte que l'équation devient où la fonction module représente la norme euclidienne et t le temps. C'est une équation aux dérivées partielles.
Où nous en sommes On arrive pour l’instant à faire évoluer un cercle, donc à afficher les différents levelset de l’équation phi(x,y)=x^2+y^2. Pour cela c’est la valeur c des différentes courbes de niveaux phi(x,y)=c que l’on fait varier. Or ce que l’on veut faire plus tard au moment de fusionner le travail de tous les membres du groupe, c’est de faire évoluer l’équation du contour, et toujours tracer le niveau 0 de chaque nouvelle courbe. L’outil matlab principal que l’on va utiliser est la fonction “contour” qui nous permet de tracer des lignes de niveau. Pour le moment il nous faut déterminer le contour initial, et le tracer avec les contraintes que les pixels soient positifs à l’extérieur, nuls sur le contour et négatifs à l’intérieur, c’est seulement comme cela que l’on pourra faire évoluer notre contour phi(x,y).