Hi all,
I have a very basic question regarding the TransformContinuousIndexToPhysicalPoint()
function.
I have two images:
- isotropically sampled image (1x1x1)
- anisotropically acquired image (0.2x0.2x5)
I would like to obtain the physical coordinates of both images, however I do not get the results of the coordinates grids for anistropically sampled images that I expect. I have illustrated this in the code snippet below. This should clarify my problem.
import SimpleITK as sitk
import numpy as np
image = sitk.ReadImage(args.image)
image = sitk.Cast(image, sitk.sitkFloat32)
image_spacing = image.GetSpacing()
image_origin = image.GetOrigin()
image_data = sitk.GetArrayFromImage(image)
(x, y, z) = image.GetSize()
coord1 = image.TransformContinuousIndexToPhysicalPoint((0,0,0))
coord2 = image.TransformContinuousIndexToPhysicalPoint((0,0,1))
x1, y1, z1 = image.TransformContinuousIndexToPhysicalPoint((0,0,0))
x2, y2, z2 = image.TransformContinuousIndexToPhysicalPoint((x,y,z))
xmin = np.amin([x1, x2])
xmax = np.amax([x1, x2])
ymin = np.amin([y1, y2])
ymax = np.amax([y1, y2])
zmin = np.amin([z1, z2])
zmax = np.amax([z1, z2])
local_bound_x = [xmin, xmax]
local_bound_y = [ymin, ymax]
local_bound_z = [zmin, zmax]
print("Image:")
print(f'Spacing: {image_spacing}')
print("X:", local_bound_x)
print("Y:", local_bound_y)
print("Z:", local_bound_z)
res = tuple(map(lambda i, j: i - j, coord1, coord2))
print(f'Physical Coordinates [0,0,0]: {coord1}')
print(f'Physical Coordinates [0,0,1]: {coord2}')
print(f'Difference coord1 - coord2: {res}')
Results for isotropic image:
Spacing: (1.0, 1.0, 1.0)
X: [-97.0, 96.0]
Y: [-97.0, 132.0]
Z: [-78.0, 115.0]
Physical Coordinates [0,0,0]: (96.0, 132.0, -78.0)
Physical Coordinates [0,0,1]: (96.0, 132.0, -77.0)
Difference coord1 - coord2: (0.0, 0.0, -1.0)
→ This behaves as I expected.
Results for anistropic image:
Spacing: (0.2083333283662796, 0.2083333283662796, 5.0)
X: [-56.08902359008789, 63.94401697175637]
Y: [-71.00065914028002, 66.02693176269531]
Z: [-62.45258712768555, 43.568669158926525]
Physical Coordinates [0,0,0]: (-56.08902359008789, 66.02693176269531, -62.45258712768555)
Physical Coordinates [0,0,1]: (-56.087482356984445, 65.29397413920222, -57.50660181161718)
Difference coord1 - coord2: (-0.0015412331034454496, 0.7329576234930926, -4.9459853160683664)
→ I would have expected the following difference
Difference coord1 - coord2: (0.0, 0.0, -5.0)
Why do the anistropic and isotropic physical scanner coordinates behave differently? How can I correct this?