Hello, I am trying to make an automatic registration between CT and MRI images of the spine with ITK, the images are of the same person but they can have different sizes as the example that I show in the attached images.
What can you recommend me for cases like these, should I use, for example, landmarks or is there an appropriate algorithmic variant for these cases without human intervention.
You should register images in physical space, not index space. Take a look here and here for some examples.
But why re-invent the wheel? You could use elastix, either directly or via ITKElastix. To easily experiment with it, use 3DSlicer’s elastix extension. If that doesn’t solve your problem, then start making your own solution.
If you use an automatic, intensity based image registration to align these images then (in addition to using the correct physical size of the voxels as @dzenanz suggested) you need to crop the CT to approximately the same region as the MRI and set initial alignment to be within about 5mm of translation and 5 degrees of rotation.
Thank you very much for your answer @dzenanz and @lassoan, now if after registration I want to automatically fusion the two images, what library or procedure can you recommend?
If you simply need to fade between images then you can compute weighted average between them. You may also put them in two different color channels to be able to distinguish them a little better. However, for most images this can result in very complex images that are hard to find interpret.
I find it much easier to evaluate image registration by extracting features from one image (use Canny edge detection or segment relevant structures) and add it to another image.
You can implement all these using ITK and numpy. For visualization you can use Jupyter notebooks, 3D Slicer, MITK, etc.