Présentation
SimpleITK simplifie l'Insight Toolkit (ITK) pour le traitement d'images médicales : segmentation, recalage, filtrage, rééchantillonnage et opérations morphologiques. Supporte DICOM, NIfTI, NRRD et 50+ formats de fichiers.
Installation
uv pip install SimpleITK
Opérations d'image de base
import SimpleITK as sitk
import numpy as np
image = sitk.ReadImage("ct_scan.nii.gz")
print(image.GetSize(), image.GetSpacing(), image.GetOrigin())
array = sitk.GetArrayFromImage(image)
print(array.shape) # (z, y, x)
Segmentation
binary = sitk.BinaryThreshold(image, lower=200, upper=500, insideValue=1, outsideValue=0)
cc = sitk.ConnectedComponent(binary)
stats = sitk.LabelIntensityStatisticsImageFilter()
stats.Execute(cc, image)
for label in stats.GetLabels():
print(f"Label {label}: mean={stats.GetMean(label):.1f}")
Recalage
fixed = sitk.ReadImage("template.nii.gz")
moving = sitk.ReadImage("moving.nii.gz")
R = sitk.ImageRegistrationMethod()
R.SetMetricAsMattesMutualInformation(numberOfHistogramBins=50)
R.SetOptimizerAsGradientDescent(learningRate=1.0, numberOfIterations=100)
R.SetInitialTransform(sitk.CenteredTransformInitializer(fixed, moving, sitk.Euler3DTransform()))
final_transform = R.Execute(fixed, moving)
resampled = sitk.Resample(moving, fixed, final_transform, sitk.sitkLinear)
Flux de travail
- Lire les images avec
sitk.ReadImage()(détecte automatiquement le format) - Prétraitement :
BinaryThreshold,MedianFilter,ResampleImageFilter - Segmenter avec seuillage, watershed ou composantes connexes
- Recaler avec
ImageRegistrationMethod+ transformation - Mesurer les volumes avec
LabelStatisticsImageFilter - Écrire les résultats avec
sitk.WriteImage()