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} = {method.GetMetricValue():10.5f}")
35 def command_multi_iteration(method):
39 if R.GetCurrentLevel() > 0:
40 print(f
"Optimizer stop condition: {R.GetOptimizerStopConditionDescription()}")
41 print(f
" Iteration: {R.GetOptimizerIteration()}")
42 print(f
" Metric value: {R.GetMetricValue()}")
44 print(
"--------- Resolution Changing ---------")
48 print(
"Usage:", sys.argv[0],
"<fixedImageFilter> <movingImageFile>",
49 "<outputTransformFile>")
56 transformDomainMeshSize = [2] * fixed.GetDimension()
58 transformDomainMeshSize)
60 print(f
"Initial Number of Parameters: {tx.GetNumberOfParameters()}")
63 R.SetMetricAsJointHistogramMutualInformation()
65 R.SetOptimizerAsGradientDescentLineSearch(5.0,
67 convergenceMinimumValue=1e-4,
68 convergenceWindowSize=5)
70 R.SetInterpolator(sitk.sitkLinear)
72 R.SetInitialTransformAsBSpline(tx,
74 scaleFactors=[1, 2, 5])
75 R.SetShrinkFactorsPerLevel([4, 2, 1])
76 R.SetSmoothingSigmasPerLevel([4, 2, 1])
78 R.AddCommand(sitk.sitkIterationEvent,
lambda: command_iteration(R, tx))
79 R.AddCommand(sitk.sitkMultiResolutionIterationEvent,
80 lambda: command_multi_iteration(R))
82 outTx = R.Execute(fixed, moving)
87 print(f
"Optimizer stop condition: {R.GetOptimizerStopConditionDescription()}")
88 print(f
" Iteration: {R.GetOptimizerIteration()}")
89 print(f
" Metric value: {R.GetMetricValue()}")
93 if (
"SITK_NOSHOW" not in os.environ):
95 resampler.SetReferenceImage(fixed)
96 resampler.SetInterpolator(sitk.sitkLinear)
97 resampler.SetDefaultPixelValue(100)
98 resampler.SetTransform(outTx)
100 out = resampler.Execute(moving)
103 cimg =
sitk.Compose(simg1, simg2, simg1 // 2. + simg2 // 2.)
104 sitk.Show(cimg,
"Image Registration Composition")