Overview
SimpleITK simplifies the Insight Toolkit (ITK) for medical image processing: segmentation, registration, filtering, resampling, and morphological operations. Supports DICOM, NIfTI, NRRD, and 50+ file formats.
Installation
uv pip install SimpleITK
Basic Image Operations
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}")
Registration
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)
Workflow
- Read images with
sitk.ReadImage()(auto-detects format) - Preprocess:
BinaryThreshold,MedianFilter,ResampleImageFilter - Segment with thresholding, watershed, or connected components
- Register with
ImageRegistrationMethod+ transform - Measure volumes with
LabelStatisticsImageFilter - Write results with
sitk.WriteImage()