|
27 | 27 | raise Exception(f"Usage: {sys.argv[0]} fixed_image moving_image output_image")
|
28 | 28 |
|
29 | 29 | # 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) |
32 | 32 |
|
33 | 33 | # Preprocess images
|
34 | 34 | fixed_normalized_image = itk.normalize_image_filter(fixed_image)
|
|
49 | 49 | type(fixed_image), type(moving_image)
|
50 | 50 | ].New()
|
51 | 51 |
|
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) |
55 | 58 |
|
56 | 59 | metric.ReinitializeSeed(121212)
|
57 | 60 |
|
|
65 | 68 | # large steps along translation parameters,
|
66 | 69 | # moderate steps along rotational parameters, and
|
67 | 70 | # 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 | +) |
82 | 83 |
|
83 | 84 | # Print final results
|
| 85 | +print("Number of samples: " + str(number_of_samples)) |
84 | 86 | print(f"Its: {optimizer.GetCurrentIteration()}")
|
85 | 87 | print(f"Final Value: {optimizer.GetValue()}")
|
86 |
| -print(f"Final Position: {list(registrar.GetLastTransformParameters())}") |
| 88 | +print(f"Final Position: {list(transform.GetParameters())}") |
87 | 89 |
|
88 | 90 | # 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, |
98 | 99 | )
|
99 | 100 |
|
100 |
| -resample.Update() |
101 |
| - |
102 |
| -itk.imwrite(resample.GetOutput(), sys.argv[3]) |
| 101 | +itk.imwrite(resampled, sys.argv[3]) |
0 commit comments