20 import SimpleITK
as sitk
25 def command_iteration(method):
27 f
"{method.GetOptimizerIteration():3} "
28 + f
"= {method.GetMetricValue():10.5f} "
29 + f
": {method.GetOptimizerPosition()}"
37 "ImageRegistrationMethod4",
38 "<fixedImageFilter> <movingImageFile>",
39 "<outputTransformFile> <numberOfBins> <samplingPercentage>",
47 samplingPercentage = 0.10
50 numberOfBins = int(args[4])
52 samplingPercentage = float(args[5])
55 R.SetMetricAsMattesMutualInformation(numberOfBins)
56 R.SetMetricSamplingPercentage(samplingPercentage, sitk.sitkWallClock)
57 R.SetMetricSamplingStrategy(R.RANDOM)
58 R.SetOptimizerAsRegularStepGradientDescent(1.0, 0.001, 200)
60 R.SetInterpolator(sitk.sitkLinear)
62 R.AddCommand(sitk.sitkIterationEvent,
lambda: command_iteration(R))
64 outTx = R.Execute(fixed, moving)
68 print(f
"Optimizer stop condition: {R.GetOptimizerStopConditionDescription()}")
69 print(f
" Iteration: {R.GetOptimizerIteration()}")
70 print(f
" Metric value: {R.GetMetricValue()}")
75 resampler.SetReferenceImage(fixed)
76 resampler.SetInterpolator(sitk.sitkLinear)
77 resampler.SetDefaultPixelValue(100)
78 resampler.SetTransform(outTx)
80 out = resampler.Execute(moving)
83 cimg =
sitk.Compose(simg1, simg2, simg1 // 2.0 + simg2 // 2.0)
85 return {
"fixed": fixed,
"moving": moving,
"composition": cimg}
88 if __name__ ==
"__main__":
89 return_dict = main(sys.argv)
90 if "SITK_NOSHOW" not in os.environ:
91 sitk.Show(return_dict[
"composition"],
"ImageRegistration4 Composition")