Translation only registaton between two scans

I have a 3D-CT and 3D-CBCT scan of the same patient. I just used rigid transformation in SlicerANTs to register 3D-CT (moving image) on 3D-CBCT (fixed image). However, I want to avoid rotation in rigid transforamtion, so I can only allow translation for registration. Is it possible to do so in 3D-slicer?

Is it possible with SlicerANTs or Elastix or BRAINS in 3D slicer ? If so can anyone help me on resolving this issue.

The interpolation also caused grey pixels to appear within the bounds of the registered CT volume, as shown in the attached image. Is it possible to avoid those artefacts?

(image removed due to privacy concerns)

In SlicerANTs you can, instead of choosing one of the “Stages (Presets)”, set up a translation stage only yourself:

(image removed due to privacy concerns)

Also there is a Settings section below that lets you choose the output interpolation mode; this might help with the gray pixels you are talking about

1 Like

To avoid the gray values, I just right click on the moving image and apply tranform file to it to deform so that these gray values no longer exists. However, I’m not sure whether that step is correct or not ? Here I attached a screenshot of that.

Oh, now I see what you meant by gray pixels— at the image boundary. I retract my comment about setting the interpolation mode. IDK where those gray values coming from.

However, I’m not sure whether that step is correct or not ?

I guess you are talking about “Harden Transfrom”? That will apply the transform to the volume node “MCR” baking the transform into the volume node. Nothing wrong with that but IDK where the gray pixels are coming from.

The gray pixels are probably the fill value of zero (in a CT zero is in the middle of the expected intensity range). I believe this is called the Default Value in the Resample Image (BRAINS) module and you could set it to -1024 or similar.

1 Like

Yes, it’s fine to apply the transform to the image volume by right-clicking on it as you do, and it will always avoid the creation of the filled gray pixels because you are moving the existing image volume in space rather than resampling it into the image grid defined by the fixed image you are registering to.

It looks like the SlicerAnts graphical interface doesn’t allow you to set what voxel value areas outside your transformed original image should be set to, and the default value is probably zero, as @pieper suggests, which shows up as gray because it’s a middling value for CT images.