20 import SimpleITK
as sitk
26 def command_iteration(method):
27 if method.GetOptimizerIteration() == 0:
28 print(
"Scales: ", method.GetOptimizerScales())
30 f
"{method.GetOptimizerIteration():3} "
31 + f
"= {method.GetMetricValue():7.5f} "
32 + f
": {method.GetOptimizerPosition()}"
40 "<fixedImageFilter> <movingImageFile>",
41 "<outputTransformFile>",
51 R.SetMetricAsMattesMutualInformation(numberOfHistogramBins=50)
54 if fixed.GetDimension() == 2:
58 R.SetOptimizerAsExhaustive([sample_per_axis // 2, 0, 0])
60 R.SetOptimizerScales([2.0 * pi / sample_per_axis, 1.0, 1.0])
61 elif fixed.GetDimension() == 3:
63 R.SetOptimizerAsExhaustive(
75 2.0 * pi / sample_per_axis,
76 2.0 * pi / sample_per_axis,
77 2.0 * pi / sample_per_axis,
88 R.SetInitialTransform(tx)
90 R.SetInterpolator(sitk.sitkLinear)
92 R.AddCommand(sitk.sitkIterationEvent,
lambda: command_iteration(R))
94 outTx = R.Execute(fixed, moving)
98 print(f
"Optimizer stop condition: {R.GetOptimizerStopConditionDescription()}")
99 print(f
" Iteration: {R.GetOptimizerIteration()}")
100 print(f
" Metric value: {R.GetMetricValue()}")
104 if "SITK_NOSHOW" not in os.environ:
106 resampler.SetReferenceImage(fixed)
107 resampler.SetInterpolator(sitk.sitkLinear)
108 resampler.SetDefaultPixelValue(1)
109 resampler.SetTransform(outTx)
111 out = resampler.Execute(moving)
115 cimg =
sitk.Compose(simg1, simg2, simg1 // 2.0 + simg2 // 2.0)
116 sitk.Show(cimg,
"ImageRegistrationExhaustive Composition")