20 import SimpleITK
as sitk
25 def command_iteration(method, bspline_transform):
26 if method.GetOptimizerIteration() == 0:
30 print(bspline_transform)
32 print(f
"{method.GetOptimizerIteration():3} " + f
"= {method.GetMetricValue():10.5f}")
35 def command_multi_iteration(method):
39 if R.GetCurrentLevel() > 0:
41 "Optimizer stop condition: " + f
"{R.GetOptimizerStopConditionDescription()}"
43 print(f
" Iteration: {R.GetOptimizerIteration()}")
44 print(f
" Metric value: {R.GetMetricValue()}")
46 print(
"--------- Resolution Changing ---------")
53 "<fixedImageFilter> <movingImageFile>",
54 "<outputTransformFile>",
62 transformDomainMeshSize = [2] * fixed.GetDimension()
65 print(f
"Initial Number of Parameters: {tx.GetNumberOfParameters()}")
68 R.SetMetricAsJointHistogramMutualInformation()
70 R.SetOptimizerAsGradientDescentLineSearch(
71 5.0, 100, convergenceMinimumValue=1e-4, convergenceWindowSize=5
74 R.SetInterpolator(sitk.sitkLinear)
76 R.SetInitialTransformAsBSpline(tx, inPlace=
True, scaleFactors=[1, 2, 5])
77 R.SetShrinkFactorsPerLevel([4, 2, 1])
78 R.SetSmoothingSigmasPerLevel([4, 2, 1])
80 R.AddCommand(sitk.sitkIterationEvent,
lambda: command_iteration(R, tx))
81 R.AddCommand(sitk.sitkMultiResolutionIterationEvent,
lambda: command_multi_iteration(R))
83 outTx = R.Execute(fixed, moving)
88 print(f
"Optimizer stop condition: {R.GetOptimizerStopConditionDescription()}")
89 print(f
" Iteration: {R.GetOptimizerIteration()}")
90 print(f
" Metric value: {R.GetMetricValue()}")
94 if "SITK_NOSHOW" not in os.environ:
96 resampler.SetReferenceImage(fixed)
97 resampler.SetInterpolator(sitk.sitkLinear)
98 resampler.SetDefaultPixelValue(100)
99 resampler.SetTransform(outTx)
101 out = resampler.Execute(moving)
104 cimg =
sitk.Compose(simg1, simg2, simg1 // 2.0 + simg2 // 2.0)
105 sitk.Show(cimg,
"Image Registration Composition")