Deformable registration, but only allow deformation in one direction

Hi message board,

I would like to implement the algorithm described in the first paragraph of section 2.3 of this paper:

The algorithm performs deformable registration between two images but only allows for stretching/compressing of the moving image in one dimension. The deformation is otherwise rigid.

Is there an obvious or straight forward way to do that within creating any new ITK classes?

I don’t see an obvious way. Have you contacted the author to check whether he is willing to share his implementation?

Unless you count as obvious inheriting BSpline transform and modifying it to be constrained along one direction only.

Hello @Nick_Rubert,

You can constrain the transformation via the weighting scheme (see SetOptimizerWeights). For the BSpline transform the parameters are the translation deltas of the control points. For n control points you have dx_0,dy_0,dz_0...dx_n,dy_n,dz_n . If you set the weights to 0,0,1...0,0,1 you limit the control point motion to the z axis, which limits deformation to that direction.

Generally, you zero out the axes along which you want to limit the deformation. This is crude, as you are limited to the imaging axes which don’t necessarily correspond to the arbitrary direction you want.

1 Like

Thanks for the responses everyone. I’ll try out adjusting the optimizer weights. I’ll try to post a code solution if I get a good result.

Hi @dzenanz

Is there any way to adjust the Optimizer Weights for the 5.x registration framework?

The method you suggest is actually perfect for the particular MRI application in this post. For the diffusion imaging application in question the image deformation will always align perfectly with one of the imaging axes.

There is no v5 registration framework, only v4 and pre-4 (stuff without v4 extension in the name). So what Ziv pointed you to is the newer stuff.