I’m trying to do registration in 2D using only one scale parameter applied to to both axes. I believe this is called isotropic scaling. I’ve been struggling because the scale transform is ansiotropic. I was thinking that perhaps I could use a similarity transform and constrain the translation and rotation terms, but I haven’t found a way to do this.
Does anyone know whether this is possible? I’d prefer to stay within Python SimpleITK but could migrate to something else if needed.
Have you experimented with the ImageRegistrationMethod:: SetOptimizerWeights method?
Thanks Bradley! I think that was exactly what I was looking for. For those interested in the full snippet, here it is below.
initial_transform = sitk.Similarity2DTransform()
# set the transform to rotate and scale about the center of the moving image
initial_transform.SetCenter([int(x / 2) for x in moving_image.GetSize()])
R = sitk.ImageRegistrationMethod()
# parameters are ordered as (scale, rotation, x, y)
R.SetOptimizerWeights((1, 0, 0, 0))
Thanks for sharing your solution.
Another tip you can use the CenterTransformInitializer to robustly do this center initialization. Your code only will work when the origin, spacing and direction cosine matrix are trivial (identity/unit).
Here is a notebook on the topic: http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/Python_html/63_Registration_Initialization.html