# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Segmentation d'images mdicales

## Billi

Bonjour,

Je travail sur des images IRM d'un crne humain. Mon but est d'isoler les globes oculaires du reste de l'image. Vu que je suis un dbutant dans l'imagerie, j'aimerai savoir si quelqu'un connat une mthode ou un algorithme de segmentation qui serait capable de m'aider rsoudre mon problme!?

Voici un exemple d'IRM d'un crne avec la partie que je dois isoler entoure en rouge:

----------


## Ivory69

Je pensais  priori  une segmentation avec des contours actifs, mais cela ncessite une initialisation " la main". Tu peux trouver quelques exemples de rsultats ici: http://www.postulate.org/segmentation.php
@ + bon courage  ::P:

----------


## Billi

Merci pour ta rponse, cela me donne dj une bonne base pour commencer ma rflexion. Mais j'ai oubli de prciser dans mon message prcdent que la segmentation doit se faire automatiquement  ::?:  !

----------


## parp1

Premiere question avec toi travailles tu?

Connais tu ImageJ c'est un logiciel que je te conseil, car il est gratuit et permet de tester des algorithme avant de les programmer.

Avec ImageJ j'ai fait quelque petite etapes que les habitu du Forum Traitement d'image commenceront a connaitre.

- Etalement d'histogramme : mene ImageJ ---- > Process Enhance Contrast avec 0%, et Equalize Histogram

- Substract BackGround ----> Process / SubstractBackground / size 50

- Seuillage ----> Image/Adjust/Threshold/ (54 - 68)

Tu obtiens cette image (Voir piece jointe)

Avec celle ci tu applique les oprateurs morphologique de base Erosion-Dilation, et Extraction de contour de l'oeil. ( par exemple) Image Dilat-ImageErod c'est tres simple.

Pour finir il te reste plus qu'a colorier ton contour en couleur sur l'image.

J'imagine que ton image est en niveau de gris.

Tu crer trois image identique, dans la composante rouge tu met a 255 tout les pixels commun a l'image du contour et la composante rouge.

Tu fais de meme pour les composante Bleu et Verte sauf que tu mets les pixels en commun a zero.

Tu auras ainsi en recomposant ton image le contour sur ton image en NdG de couleur ROUGE.

Voila n'esite pas si tu as des questions.

PS: La qualit de tes image n'est pas gnial on dirait que ca sort d'un livre.

Aussi, j'ai travaill sur une image en niveau de Grsi.

----------


## parp1

J'applique une petite modification :

Si tu applique un flou sur l'image tu obtiens un meilleur resultats. j'arrive a extraire le contour des globes occulaire facilement, grace au operation dites du le message prcdents et y ajoutant des *Ouverture* et un *Bouchage de trou*. C'est a toi de tester. 
Si tu as toujours la meme coupe alors c-a-d a peu pret passant par le milieu de la pupille Je pense qu'il est facile d'automatis cela. Peut tu nous mettres d'autre image afin que l'on teste la robustesse. Pour le seuillage il existe des seuillage auto...

----------


## Billi

Tout d'abord merci parp1 pour tes rponses! 

Je dveloppe en c# avec Visual Studio 2005.

Non je ne connais pas ImageJ, mais je vais m'empresser de le trouver afin de le tester avec mes images.

Effectivement l'image que j'ai mise comme exemple est de mauvaise qualit car elle provient d'un livre. Les images sur lesquelles je travail sont de meilleures qualits mais je nai pas le droit de diffuses, je vais quand mme essay de me renseigner pour voir si cela est faisable

Bref les images IRM que je dois traiter sont toutes en niveau de gris.

Pour le moment je vais tester la marche  suivre que tu as propose et je viendrais redonner des nouvelles.

----------


## parp1

Oh il faudrait simplement bidouill dans le fichier DICOM afin de le rendre anonyme. Demande a tes patrons ils doivent savoir faire.


> Je dveloppe en c# avec Visual Studio 2005.


Trop de la chance je  bosse en VB6...

----------


## Billi

Bon voil du nouveau, j'ai le droit de diffuser les images et pour viter toutes ambiguts, j'ai converti les images DICOM en jpg. 

Pour rpondre  une des remarques que tu as fait hier, je ne travail pas tout le temps sur la mme coupe, mais sur toutes les coupes ou lil apparat !

Voici donc les images sur lesquelles je travail :

----------


## parp1

Bon avec tes images, j'ai modifier un peu l'algorithme.

Cependant je fais certaines meme oprations.

Je Floute l'image.J'tale l'histogramme.J'applique un rolling ball de 25Je seuilJe fais une ouverture.Je fais une carte des distancesJe seuil cette carte afin d'extraire l'oeil, (plus gros objet donc plus de couleur dans la distance) J'obtiens ainsi des germes qui peuvent servir a un growing region ou simplement pour designer l'objet entier quivalent dans l'image du seuil (le premier).


Jusqu'au seuil tout est automatisable. Je pense meme qu'il y a moyen de tout automatiser.

Tu a combiens de coupes dans ton volume? En fait si tu as une procdure automatique pour les sauvegarder en Jpg ou BMP ca m'interesserai de recuperer un volume. Je travaille sur VTK et j'ai besoin d'un volume. le mien fais 64*64*93 et c'est un crane image Scanner...

Mes images dans l'avenir feront plutot du 1000*1000*130... donc si tu as le temps ... pourrais tu me faire parvenir le volume. Meme au format DICOM Anomym.

Merci mais surtout si tu ne peux pas, t'embete pas.


Voir image en piece jointes

----------


## Billi

Alors, je n'ai pas de procdure automatique pour passer d'images DICOM  BMP ou JPG. Je dois aussi en crer une mais je vais utiliser la librairie Leadtool, a va grandement me faciliter le travail!

Par contre, tu parles parle de volume. Je dois avouer que je ne vois pas exactement ce que tu veux dire par la!

Pour ma part je dispose de trois types de coupes (sagittale, coronale et transversale) pour chaque type de coupe, je dispose denviron 10 slices (juste la zone des yeux), mon but est rcuprer la partie de limage ou lil se situe afin de reconstruire ce dernier en 3d. 

Afin de faire ceci, je  mix  tout les slices de chaque type pour obtenir une grosse matrice 3d. Cest peut-tre a que tu entends par volume !?

----------


## parp1

Voila moi j'utilise une bibliotheque VTK.

Est ce que ton maitre de stage... ou patron serait pret a debourser 300 de licence afin qu'il puisse developper son soft.

Je m'explique.

Voila je suis en stage et je dois faire un control ActiveX pour une visualisation 3D de dosimetrie.

Je developpe sous VB6 et des qu'il sera termin je devrais en faire une sous VB.net

La bibliotheque Visualization Tool Kit (VTK) est open source pour certain language. Cependant elle est payant pour l'environnement Visual Studio...

L'interet que tu aurais avec ce produit c'est qu'il est aseez simple de crer et traiter des volumes. En piece jointe ce que j'arrive a faire. En plus de l'extraction de coupe sagital coronal et axial. (donc pas besoin de 3*10 coupe) dix coupes axial suffises et tu peux calculer toute les autre.

Le truc c'est que lorsque tu achetes cette licence (elle est monopost donc pas de distribution) On te donnes deux gros bouquin tres bien fait pour apprendre a faire cela... en anglais... mais ca fallait s'en douter.

En plus il y a le VTK network qui est un bot mail, qui envoi a tout les personnes inscrite (programmeurs) un mail ou tu exprime ton probleme.

Le probleme c'est que la bibliotheque ACTIVIZ (VTK for Visual Studio) est peu document, donc j'aime autant te dire que j'en est bav pour comprendre tout , mais maintenant ca roule niquel.

En gros si tu a besoin d'un coup de main... il n'y a pas de soucis.


Pourrais tu m'envoyer les 10 slices au format bmp si possible. Afin que jessai de lire ton volume ...  :;):  et te montrer ce que ca peu donner?.(dans un Tar) je te filerai mon mail par MP. si tu veux. 

Volume : pour moi c'est une pile d'image. Une image est constitu de pixels
Un volume de voxel. Les coupes associer entre donne un Volume!

----------


## ToTo13

Bonjour,

je radote encore pour rappeler les fondamentaux : la bibliothque ImageJ est open source et fournit un ensemble d'outils (ou de combinaison) qui font cela.

Si tu ne trouve pas ton bonheur dedans, il existe des articles sur la segmentation d'images mdicales.

----------


## parp1

Il est possible d'interface un outils si puissant avec ImageJ.

C'est a dire construire un volume, le seuiller, tourner autour a 360 sur les trois axes, et extraire n'importe quelle coupe du volume? 

Et peut on l'interfacer en C#?

Je pense que tu voulais dire qu'il fallait qu'il prtraite ses images avec ImageJ et construite le volume ensuite.

J'ai un collegue qui en stage devait reconstituer le volume d'un foie a partir d'image scanner. Le seul hic, il ne pouvait rotater que sur un axe.

Peut on realiser un volume telque je le decris ci dessus?

----------


## ToTo13

Bonjour,

ImageJ possde une classe ImageStack qui reprsente un volume sous forme de couches et le visualise soit directement soit avec les nombreux plugin ajout dans ce but.
Pour les rotations, c'est dj  l'intrieur de ImageJ.

----------


## parp1

Mais par exemple avec ImageJ est ce que tu peux extraire une couche Coronal alors que tu n'as donn que des couches saggitales?

Et c'est facilement implmentable en C#?

----------


## ToTo13

Bonjour,

dsol, je n'ai pas d'ide sur le sujet, je n'ai pas assez regard la conception ImageJ  ::(:

----------


## parp1

Il n'y a pas de mal, mais ca m'aurait interesse qu'ImageJ fasse tous ca...Mais VTK est une bibliotheque ou tous ses outils sont deja implenter.

Elle est open source pour JAVA, python Tcl/TK et C++. Mais si on utilise Visual Studio elle devient payante, car ils ont developp des controles ActiveX expres.

----------


## coolzy

ahah ben moi j'ai un peu le meme genre de truc a faire, sauf que se sont des images IRM des reins et je bosse sous matlab. je dois donc isoler les reins.
Donc j'ai fait ca un peu a l'arrache, c'est pas super efficace ( ca depend de la qualite de la sequence d'images) : je commence par une segmentation kmeans en utilisant la distance cosinus et non distance euclidienne. Je ne garde que la classe a plus significative. A partir de la, j'erode, je ne garde que les plus gros elements, je combine des fermetures/erosion, j'elimine les plus petits elements, et a la fin je prend les deux elements les plus proches d'un certain point ( pour avoir un element de chaque cote de l'axe central). tu peux sans doute appliquer ce genre de methode mais ce n'est pas ultra efficace.
Par contre dans tous les cas j'arrive bien a isoler a la fin les deux zones qui m'interessent avec des cadres: meme si le masque de la region n'est pas tres bien, le cadre englobe bien la region en general, et donc apres tu peux recommencer a bosser sur cette region plus precise.

Sinon je me demandais comment utiliser le fait que les deux reins sont a peu pres symetriques (meme genre de forme et de disposition) vis a vis de l'axe central pour mieux les isoler. je ne sais pas si tu utilises cet elements ou pas...

Au pire tu peux peut-etre selectionner les zones a la main.

Sinon concernant le traitement d'image en C++ moi j'utilisais CImg qui est assez complet, gratuit et avec une bonne aide en ligne.

----------


## pseudocode

... ou sinon l'aglo de selection "fast marching + level set", vu qu'il a t cr pour faire cela.

----------

