Skip to content

Commit de1f204

Browse files
committed
WIP: Use functional interface
1 parent 314dcd4 commit de1f204

File tree

1 file changed

+31
-32
lines changed
  • src/Core/Transform/MutualInformationAffine

1 file changed

+31
-32
lines changed

src/Core/Transform/MutualInformationAffine/Code.py

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
raise Exception(f"Usage: {sys.argv[0]} fixed_image moving_image output_image")
2828

2929
# Import images
30-
fixed_image = itk.imread(sys.argv[1], itk.UC)
31-
moving_image = itk.imread(sys.argv[2], itk.UC)
30+
fixed_image = itk.imread(sys.argv[1], itk.SS)
31+
moving_image = itk.imread(sys.argv[2], itk.SS)
3232

3333
# Preprocess images
3434
fixed_normalized_image = itk.normalize_image_filter(fixed_image)
@@ -49,9 +49,12 @@
4949
type(fixed_image), type(moving_image)
5050
].New()
5151

52-
metric.SetNumberOfSpatialSamples(100)
53-
metric.SetFixedImageStandardDeviation(5.0)
54-
metric.SetMovingImageStandardDeviation(5.0)
52+
number_of_pixels = fixed_image.GetBufferedRegion().GetNumberOfPixels()
53+
number_of_samples = int(number_of_pixels * 0.01)
54+
metric.SetNumberOfSpatialSamples(number_of_samples)
55+
56+
metric.SetFixedImageStandardDeviation(25.0)
57+
metric.SetMovingImageStandardDeviation(25.0)
5558

5659
metric.ReinitializeSeed(121212)
5760

@@ -65,38 +68,34 @@
6568
# large steps along translation parameters,
6669
# moderate steps along rotational parameters, and
6770
# small steps along scale parameters
68-
optimizer.SetScales([100, 0.5, 0.5, 100, 0.001, 0.001])
69-
70-
registrar = itk.ImageRegistrationMethod[type(fixed_image), type(moving_image)].New()
71-
registrar.SetFixedImage(fixed_smoothed_image)
72-
registrar.SetMovingImage(moving_smoothed_image)
73-
registrar.SetTransform(transform)
74-
registrar.SetInterpolator(interpolator)
75-
registrar.SetMetric(metric)
76-
registrar.SetOptimizer(optimizer)
77-
78-
registrar.SetFixedImageRegion(fixed_image.GetBufferedRegion())
79-
registrar.SetInitialTransformParameters(transform.GetParameters())
80-
81-
registrar.Update()
71+
optimizer.SetScales([100, 100, 100, 100, 0.01, 0.01])
72+
73+
result_object = itk.image_registration_method(
74+
fixed_image=fixed_image,
75+
moving_image=moving_image,
76+
transform=transform,
77+
interpolator=interpolator,
78+
metric=metric,
79+
optimizer=optimizer,
80+
fixed_image_region=fixed_image.GetBufferedRegion(),
81+
initial_transform_parameters=transform.GetParameters(),
82+
)
8283

8384
# Print final results
85+
print("Number of samples: " + str(number_of_samples))
8486
print(f"Its: {optimizer.GetCurrentIteration()}")
8587
print(f"Final Value: {optimizer.GetValue()}")
86-
print(f"Final Position: {list(registrar.GetLastTransformParameters())}")
88+
print(f"Final Position: {list(transform.GetParameters())}")
8789

8890
# Resample and write out image
89-
ResampleFilterType = itk.ResampleImageFilter[type(fixed_image), type(fixed_image)]
90-
resample = ResampleFilterType.New(
91-
Transform=transform,
92-
Input=moving_image,
93-
Size=fixed_image.GetLargestPossibleRegion().GetSize(),
94-
OutputOrigin=fixed_image.GetOrigin(),
95-
OutputSpacing=fixed_image.GetSpacing(),
96-
OutputDirection=fixed_image.GetDirection(),
97-
DefaultPixelValue=100,
91+
resampled = itk.resample_image_filter(
92+
input=moving_image,
93+
transform=result_object,
94+
size=fixed_image.GetLargestPossibleRegion().GetSize(),
95+
output_origin=fixed_image.GetOrigin(),
96+
output_spacing=fixed_image.GetSpacing(),
97+
output_direction=fixed_image.GetDirection(),
98+
default_pixel_value=100,
9899
)
99100

100-
resample.Update()
101-
102-
itk.imwrite(resample.GetOutput(), sys.argv[3])
101+
itk.imwrite(resampled, sys.argv[3])

0 commit comments

Comments
 (0)