Skip to content

Chaîne de traitement complète pour volumes IRM (.nrrd), incluant l’alignement, l’extraction d’une région d’intérêt et le calcul du volume segmenté.

Notifications You must be signed in to change notification settings

Merilonimbus/VITK

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projet : Enregistrement et Segmentation d’Images Médicales

🎯 Objectif

Fournir une chaîne de traitement complète (registration + segmentation + visualisation) pour deux volumes IRM (.nrrd), incluant l’alignement, l’extraction d’une région d’intérêt et le calcul du volume segmenté.


🛠️ Structure du projet

project_root/
├── Data/
│   ├── case6_gre1.nrrd
│   └── case6_gre2.nrrd
├── src/
│   ├── registration.py
│   ├── segmentation.py
│   └── visualisation.py
├── main.py
├── README.md
└── requirements.txt

📌 Choix techniques

1. Enregistrement (registration)

  • Librairie : ITK (Insight Toolkit)
  • Transformation : VersorRigid3DTransform (translation + rotation)
  • Optimiseur : RegularStepGradientDescentOptimizerv4
    • Learning rate : 4.0
    • Step minimum : 0.001
    • Itérations : 100
  • Métrique : MattesMutualInformationImageToImageMetricv4
    • Nombre de bins : 32 (pour histogramme)
  • Stratégie multi-résolution (pyramide) :
    • shrink_factors = [4, 2, 1]
    • smoothing_sigmas = [2.0, 1.0, 0.0]
  • Poids sur les paramètres : rotation ×1000 par rapport aux translations

2. Segmentation

  • Technique : ConnectedThresholdImageFilter (ITK)
  • Plage de seuils : ±10% autour de la valeur du point seed
  • Seed : sélectionné manuellement dans un plan (Z,X) avec matplotlib.ginput()
  • Visualisation slice : par VTK avec glissière interactive
  • Résultat : masques binaires en 3D

3. Visualisation

  • Type : rendu volumique GPU (vtkGPUVolumeRayCastMapper)
  • Rendu surfacique : vtkMarchingCubes sur image et masques
  • Affichage combiné : IRM + 2 masques avec rendu 3D et transparence
  • Calcul de volume : via vtkImageAccumulate (mm³)

⚠️ Difficultés rencontrées

  • Réglage délicat des paramètres d’optimisation pour éviter les mauvais minima
  • Nécessité d’un bon placement du seed (risque de fuite du contour)
  • Interopérabilité ITK <-> VTK (types, dimensions, repères)
  • Conversion des slices 3D vers 2D pour affichage ou interaction utilisateur

✅ Résultats

  • Images correctement alignées
  • Masques 3D extraits à partir d’un seul clic utilisateur
  • Volumes comparés (en mL) entre deux IRM pour détection de changement
  • Affichage 3D interactif avec vtkRenderWindowInteractor (rouge = ancienne tumeur et vert = nouvelle tumeur)

▶️ Utilisation

  1. Installez les dépendances :

    pip install -r requirements.txt
  2. Placez vos fichiers .nrrd dans le dossier Data/.

  3. Exécutez le script principal :

    python main.py
  4. Suivez les instructions pour :

    • Choisir une slice via glissière VTK
    • Sélectionner une seed sur l’image slice (clic matplotlib)
    • Visualiser les résultats en 3D

📚 Références

About

Chaîne de traitement complète pour volumes IRM (.nrrd), incluant l’alignement, l’extraction d’une région d’intérêt et le calcul du volume segmenté.

Topics

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •  

Languages