Segmentation et Analyse d`image

Transcription

Segmentation et Analyse d`image
Université Bordeaux 1
Master ISV, Image 3D
2014/2015
Segmentation et Analyse d’image - TP 3
Segmentation par contours actifs
1
Contours actifs 2D
Les contours actifs (ou snakes) sont une technique de segmentation d’image s’appuyant sur les
frontières des objets recherchés. Un contour est initialisé dans l’image à proximité de la forme à
extraire. Il est ensuite déformé en tenant compte des contraintes suivantes : résistance à l’étirement,
résistance à la torsion, présence de frontières dans l’image.
Le but de cet exercice est d’implémenter la méthode vue en cours permettant de calculer les
positions successives d’un contour actif jusqu’à ce qu’il corresponde au contour de l’objet recherché.
On rappelle qu’un snake (courbe paramétrée C(s) = (x(s), y(s)), s ∈ [0; 1]) cherche à minimiser
son énergie définie par :
Etotale (C)
=
avec Einterne (C)
=
et Eimage (C)
=
Einterne (C) + Eimage (C)
2
2
Z 1
∂v(s) 2
+ β ∂ v(s) ds
α 2
∂s
∂s 0
Z 1
λ
−|∇I(v(s))|2 ds
0
Les paramètres α, β et lambda permettent de pondérer l’influence des deux énergies internes
liées à l’étirement et à la courbure et de l’énergie externe liée au gradient de l’image. Pour mettre en
œuvre un snake, le contour est discrétisé comme une courbe polygonale, i.e. une liste de N points
définis par leurs coordonnées (les tableaux X et Y de la classe Snake). Ensuite, la minimisation
ci-dessus est transformée en équations aux dérivées partielles :
∂|∇I(v)|2
(x(s), y(s))
∂x
∂|∇I(v)|2
−αy 00 (s) + βy (4) (s) = λ
(x(s), y(s))
∂y
−αx00 (s) + βx(4) (s) = λ
(1)
(2)
Les dérivées sont approchées par différences finies de façon à exprimer (1) et (2) comme la
multiplication d’une matrice A avec X ou Y :
AX = λfx (X, Y )
AY = λfy (X, Y )

6β + 2α
−4β − α
β



La matrice A est la suivante : 



−4β − α
6β + 2α
−4β − α
β
−4β − α
..
.
6β + 2α
..
.
..
..
..
..
0
.
.
.
.
.
0
..
.
···
..
.
..
.
..
.
.
..
.
.
..
.




.



fx (X, Y ) (resp. fy (X, Y )) est un vecteur de N valeurs représentant la composante x (resp. y)
des forces issues de l’image appliquées sur les sommets du snake. Le système précédent n’étant
pas inversible, on va extraire une solution de manière progressive. Ce qui donne après quelques
manipulations (γ est le coefficient de frottement) :
Xt
=
(A + γI)−1 (γXt−1 + λfx (Xt−1 , Yt−1 ))
Yt
=
(A + γI)−1 (γYt−1 + λfy (Xt−1 , Yt−1 ))
Un point de départ pour implémenter cette méthode de segmentation vous est fourni par
l’archive (http ://dept-info.labri.fr/∼vialard/Image3D/src/tp3.tgz) qui contient :
— un répertoire images contenant des images de test,
— un répertoire src contenant les fichiers source du plugin ImageJ à compléter Snake.java et
Snake_Viewer.java ainsi que la classe Deriche qui effectue le calcul du gradient d’une image,
— le paquetage de manipulation de matrices numériques Jama.
Calcul de la déformation
Complétez la méthode initParametres de la classe Snake par le calcul de la matrice M =
(A + γI)−1 . Le paquetage Jama permet de définir des matrices de réels, de leur appliquer des
opérations (addition, inversion). Ce paquetage et sa documentation sont disponibles à l’adresse
http://math.nist.gov/javanumerics/jama/.
Ecrire la méthode iteration de la classe Snake, c’est-à-dire traduisez les formules suivantes :
Xt = (A + γI)−1 (γXt−1 + λfx (Xt−1 , Yt−1 ))
Yt = (A + γI)−1 (γYt−1 + λfy (Xt−1 , Yt−1 ))
Les forces image fx et fy en un point du snake s’obtiennent en dérivant suivant x et suivant y
l’image de la norme du gradient au carré. Ce calcul se fait en discrétisant la dérivée partielle par
différences finies. Attention, en pratique il est bon d’empêcher de trop grands déplacements des
points : pour ce faire, vous limiterez les forces images à l’intervalle [−1.0 : 1.0].
Tests
Si l’on fait évoluer un snake dans une image de couleur uniforme, quelle est l’énergie image ?
Quelle est la forme finale obtenue ? Pourquoi ?
Testez sur l’image vide.png avec les paramètres α = 0.01, β = 0.5, γ = 2. Faites varier
progressivement ces différents paramètres pour bien comprendre leur influence.
Testez votre programme sur les autres images en choisissant avec attention les paramètres α,
β, λ et γ.
2
Contours actifs 3D : utilisation de ITK-Snap
ITK-Snap est une application destinée à la segmentation interactive d’images médicales. L’utilisateur peut effectuer une segmentation manuelle en détourant coupe par coupe la zone d’intérêt (édition de labels, définition d’un contour polygonal). Il peut également segmenter semiautomatiquement un organe de l’image 3D en utilisant des surfaces actives.
Téléchargez ITK-Snap à partir de la page http://www.itksnap.org/ (Downloads / Linux
Binary). Téléchargez également les images de test MRIcrop-orig.gipl et MRIcrop-seg.gipl
(archive MRIcrop.zip).
Visualisation image 3D / segmentation associée
Ouvrez l’image MRIcrop-orig.gipl. L’interface permet de visualiser l’image suivant 3 coupes
orthogonales. Testez les différents outils d’exploration de l’image (Main Toolbox) : parcours des
coupes, zoom. Testez l’ajustement du contraste (Tools/ImageContrast).
2
Ouvrez l’image MRIcrop-seg.gipl qui contient un étiquetage partiel de l’image précédente
(Segmentation / Load from Image). Visualisez les structures segmentées en 3D (update mesh).
Editez les labels de façon à ne visualiser que le ventricule.
Segmentation semi-automatique basée sur les contours de l’image
Le but de cette partie est d’obtenir une segmentation du ventricule à partir de l’image MRIcrop-orig.gipl
en utilisant les surfaces actives dirigées par les contours de l’image. Les étapes successives sont
décrites en détail dans la section 7 du tutorial de ITK-Snap.
La première étape consiste à paramétrer la fonction gI basée sur un calcul de gradient et qui
permet de prendre en compte l’information image dans l’évolution de la surface. Cette fonction
prend une valeur proche de 0 sur les frontières et une valeur proche de 1 dans les zones uniformes.
La seconde étape est l’initialisation de la surface par un ensemble de sphères de rayon à définir.
Enfin il faut fixer les paramètres de l’évolution appelés α, β et γ dans le mode mathématique.
Testez la segmentation en jouant sur les différents paramètres.
L’interface utilisateur de ITK-Snap précise l’équation d’évolution utilisée, de type level-set.
Pour la comprendre en détail, il faut se référer à l’article de Yushkevich paru dans la revue
NeuroImage en 2006 (fourni avec les fichiers du TP). Quel est le rôle de chaque paramètre ?
Comment est définie la fonction gI ?
Trois algorithmes différents de calcul de l’évolution de la surface sont proposés dans ITK-Snap
(Sparse Field / Narrow Band / Dense). Qu’est ce qui les différencie ?
Segmentation de l’endocrâne
Utilisez le même processus pour segmenter l’endocrâne (surface de l’os à l’intérieur de la boîte
crânienne) dans l’image tete.img.
3