Transform Point from Affine Transform

I have a question regarding transforming a point with an affine transform. I have applied an affine transform (translation, rotation, scaling) two images (image and its segmentations) and after resampling it is working as intended. However, I am also trying to use the same affine transform to transform points I have (centroids for the segmentation), but it does not seem to be working as intended. An example affine transform is here to show how I am trying to transform the point.

aff_trans = sitk.AffineTransform(3)
aff_trans.Translate((5.8, -3, 6))
aff_trans.Rotate(1, 2, angle=0.5)
aff_trans.Rotate(0, 2, angle=0.2)
aff_trans.Rotate(0, 1, angle=0.65)

# Transform the voxel space landmark to physical space based on the original image
landmark_phys = image.TransformContinuousIndexToPhysicalPoint(landmark)  

# Shift the physical landmark based on the affine transform
shifted_landmark_phys = aff_trans.TransformPoint(landmark_phys)

transformed_landmark_vox = resampled_image.TransformPhysicalPointToContinuousIndex(shifted_landmark_phys)

However, when opening both the resampled image and segmentation with ITK-Snap, the transformed landmark does not align properly. The coordinate does align properly with the original image and segmentation when viewing them in ITK-Snap.

Hello,

Please review the documentation on how resampling works:
https://simpleitk.readthedocs.io/en/master/fundamentalConcepts.html#resampling

The transform maps points from the output image to the input image. To transform a landmark point from the original input space to the output, you’ll need to invert the transform.

1 Like