20 import SimpleITK
as sitk
25 def command_iteration(method):
27 f
"{method.GetOptimizerIteration():3} "
28 + f
"= {method.GetMetricValue():10.5f}"
37 "<fixedImageFilter> <movingImageFile>",
38 "<outputTransformFile>",
46 transformDomainMeshSize = [8] * moving.GetDimension()
49 print(
"Initial Parameters:")
50 print(tx.GetParameters())
53 R.SetMetricAsCorrelation()
55 R.SetOptimizerAsLBFGSB(
56 gradientConvergenceTolerance=1e-5,
57 numberOfIterations=100,
58 maximumNumberOfCorrections=5,
59 maximumNumberOfFunctionEvaluations=1000,
60 costFunctionConvergenceFactor=1e7,
62 R.SetInitialTransform(tx,
True)
63 R.SetInterpolator(sitk.sitkLinear)
65 R.AddCommand(sitk.sitkIterationEvent,
lambda: command_iteration(R))
67 outTx = R.Execute(fixed, moving)
71 print(f
"Optimizer stop condition: {R.GetOptimizerStopConditionDescription()}")
72 print(f
" Iteration: {R.GetOptimizerIteration()}")
73 print(f
" Metric value: {R.GetMetricValue()}")
78 resampler.SetReferenceImage(fixed)
79 resampler.SetInterpolator(sitk.sitkLinear)
80 resampler.SetDefaultPixelValue(100)
81 resampler.SetTransform(outTx)
83 out = resampler.Execute(moving)
86 cimg =
sitk.Compose(simg1, simg2, simg1 // 2.0 + simg2 // 2.0)
88 return_images = {
"fixed": fixed,
94 if __name__ ==
"__main__":
95 return_dict = main(sys.argv)
96 if "SITK_NOSHOW" not in os.environ:
97 sitk.Show(return_dict[
"composition"],
"ImageRegistrationMethodBSpline1 Composition")