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?
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.
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.