|
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