Interpolate Bspline Transformation

I have images of same object at t0 and t1. I have a bspline transformation that can be used to obtain the image at t1 from the image at t0. I would like to obtain an image at t0 < tx < t1. Is there a way to modify the bspline transformation to do that?

It is very simple if the transformation is the same for all voxels, such as a combination of rotation and translation. But I don’t see how to do this when all voxels are transformed differently.

I appreacite your help!

Hello @Mikhail,

Not sure if you are working in ITK or SimpleITK, so rough pseudocode which is relevant for both:

  1. t_x = 0.2 # some value in [0,1].
  2. original_displacement = sitk.TransformToDisplacementField(original_bspline_transformation).
  3. intermidiate_displacement_field = sitk.DisplacementFieldTransform(t_x* original_displacement.GetDisplacementField())

This is simple and problematic. The problem is that we are assuming that all points are moving at a constant velocity between times t0 and t1 (they are moving at different speeds). Unless you are really lucky this will not be the case for your data where regions accelerate/decelerate between t0, t1.

That being said, all our computations are approximations of a continuous world, so this approach may just be good enough for your needs.


Dear @zivy,

your solution is what I was looking for. Thanks!

1 Like