import SimpleITK as sitk
#read the images
fixed_image = sitk.ReadImage('training_001_ct.mha', sitk.sitkFloat32)
moving_image = sitk.ReadImage('training_001_mr_T1.mha', sitk.sitkFloat32)
#initial alignment of the two volumes
transform = sitk.CenteredTransformInitializer(fixed_image,
moving_image, sitk.Euler3DTransform(), sitk.CenteredTransformInitializerFilter.GEOMETRY) #multi-resolution rigid registration using Mutual Informationregistration_method = sitk.ImageRegistrationMethod()registration_method.SetMetricAsMattesMutualInformation(numberOfHistogramBins=50)registration_method.SetMetricSamplingStrategy(registration_method.RANDOM)registration_method.SetMetricSamplingPercentage(0.01)registration_method.SetInterpolator(sitk.sitkLinear)registration_method.SetOptimizerAsGradientDescent(learningRate=1.0, numberOfIterations=100, convergenceMinimumValue=1e-6, convergenceWindowSize=10)registration_method.SetOptimizerScalesFromPhysicalShift()registration_method.SetShrinkFactorsPerLevel(shrinkFactors = [4,2,1])registration_method.SetSmoothingSigmasPerLevel(smoothingSigmas=[2,1,0])registration_method.SmoothingSigmasAreSpecifiedInPhysicalUnitsOn()registration_method.SetInitialTransform(transform)registration_method.Execute(fixed_image, moving_image)
sitk.WriteTransform(transform, 'ct2mrT1.tfm')
댓글
댓글 쓰기