Skip to content

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

Languages