1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import itk
20from sys import argv
21
22
23
24
25
26
27
28if len(argv) < 4:
29 print("Missing Parameters")
30 print(
31 "Usage: ImageRegistration4.py fixedImageFile movingImageFile outputImagefile"
32 )
33 exit()
34
35
36
37
38
45 FixedImageType, MovingImageType
46]
47
48
49
50
51
52
55
56fixedImageReader.SetFileName(argv[1])
57movingImageReader.SetFileName(argv[2])
58
59fixedImageReader.Update()
60movingImageReader.Update()
61
62fixedImage = fixedImageReader.GetOutput()
63movingImage = movingImageReader.GetOutput()
64
65
66
67
68
69registration = RegistrationType.New()
70imageMetric = MetricType.New()
71transform = TransformType.New()
72optimizer = OptimizerType.New()
73
74registration.SetOptimizer(optimizer)
75registration.SetMetric(imageMetric)
76
77numberOfBins = 24
78
79imageMetric.SetNumberOfHistogramBins(numberOfBins)
80imageMetric.SetUseMovingImageGradientFilter(False)
81imageMetric.SetUseFixedImageGradientFilter(False)
82
83registration.SetFixedImage(fixedImage)
84registration.SetMovingImage(movingImage)
85
86registration.SetInitialTransform(transform)
87
88
89
90
91
92optimizer.SetLearningRate(8.00)
93optimizer.SetMinimumStepLength(0.001)
94optimizer.SetNumberOfIterations(100)
95optimizer.ReturnBestParametersAndValueOn()
96optimizer.SetRelaxationFactor(0.8)
97
98
99
100
101
102registration.SetNumberOfLevels(1)
103registration.SetSmoothingSigmasPerLevel([0])
104registration.SetShrinkFactorsPerLevel([1])
105
106registration.SetMetricSamplingStrategy(RegistrationType.RANDOM)
107registration.SetMetricSamplingPercentage(0.20)
108
109
110
111
112
113def iterationUpdate():
114 currentParameter = registration.GetOutput().Get().GetParameters()
115 print(
116 "M: %f P: %f %f "
117 % (
118 optimizer.GetValue(),
119 currentParameter.GetElement(0),
120 currentParameter.GetElement(1),
121 )
122 )
123
124
125iterationCommand = itk.PyCommand.New()
126iterationCommand.SetCommandCallable(iterationUpdate)
127optimizer.AddObserver(itk.IterationEvent(), iterationCommand)
128
129print("Starting registration")
130
131
132
133
134
135registration.Update()
136
137
138
139
140
141finalParameters = registration.GetOutput().Get().GetParameters()
142
143print("Final Registration Parameters ")
144print(f"Translation X = {finalParameters.GetElement(0):f}")
145print(f"Translation Y = {finalParameters.GetElement(1):f}")
146
147
148
149
150
151
153resampler.SetTransform(registration.GetTransform())
154resampler.SetInput(movingImageReader.GetOutput())
155
156region = fixedImage.GetLargestPossibleRegion()
157
158resampler.SetSize(region.GetSize())
159resampler.SetOutputOrigin(fixedImage.GetOrigin())
160resampler.SetOutputSpacing(fixedImage.GetSpacing())
161resampler.SetOutputDirection(fixedImage.GetDirection())
162resampler.SetDefaultPixelValue(100)
163
166outputCast.SetInput(resampler.GetOutput())
167
168
169
170
171
173writer.SetFileName(argv[3])
174writer.SetInput(outputCast.GetOutput())
175writer.Update()
Casts input pixels to output pixel type.
Data source that reads image data from a single file.
Writes image data to a single file.
Interface method for the current registration framework.
Templated n-dimensional image class.
Regular Step Gradient descent optimizer.
Resample an image via a coordinate transform.