Is there a better solution for head registration?

we now have different registration solutions for head registration,like elastix,ants,brainsfit
we now have different serials for registration,like T1,T2,Flair,PCA,CT
if we choose T1 as fixed volume , Other serials as moved volume,what’s the better solution to make the better registration effect?

It sounds like you have a good solution. Can you list any problems you have with the current approach?

i don’t have any good solution pieper,i’m just confusing
i have some serials to registe,like T1,T2,CT,Flair
I found some commercial software like brainlab don’t have registration options like [use rigid],[use affine] etc. so i wonder how to do in slicer can Implement this function

Check out the SlicerANTs extension; it offers options like rigid, rigid+scaling, and deformable registration via SyN

yes,Ants is a awesome extension,as well as elastix,brainsfit.
in the hospital enviroment, many doctor in the small or middle hospital don’t known the different between rigid and affine ,so some commercial software only provide one registation button without options
i want to Implement the button in slicer,and now have two directions
1.find a way to give a score to the result of registration ,run several registration,choose the biggest score
2.find better parameters from modal A to modal B (like T1 to CT),and record the parameters in the database,when encounter the modal pairs latter,choose the parameters from database
both directions have many problems to solve.is there a better solution to do this?

Here are my thoughts… but you are have thought about this more than me so don’t take me too seriously:

(1) will potentially take a long time, making registration take several times longer than any single processing. If that’s not a problem for your application, then maybe (1) sounds good. You could use normalized cross correlation for the score, for example. But taking so long to register is not good for an end user sort of thing.

(2) sounds interesting but I would start by experimenting with different modalities first. Maybe you can discover what approach is best for each pair of modalities, and then hard-code the choice of registration algorithm for each pair. If while doing this you feel that the process of discovery can be automated, then automate it once for yourself and hard-code the choice into your module. Having a system “learn” the best parameters while it is being used in a hospital environment sounds to me like it introduces too many unnecessary failure points as well as makes it a less consistent and more difficult to understand system.

thanks erahim,thank you for you reply.
Your ideas are important to me , I will seriously think about them.
you have mentioned [normalized cross correlation] above, is there a vtk filter or extensions to do this algorithm in Slicer?

Maybe someone else can comment if there is a vtk filter, I don’t know

But it’s pretty quick to implement in python using numpy for example:

import numpy as np

# create some random 3D image arrays with a bit of correlation to them
im1 = np.random.randn(50,50,50)
im2 = im1+np.random.randn(50,50,50)

# compute their NCC
mu1 = im1.mean() # means
mu2 = im2.mean()
alpha1 = (im1**2).mean() # second moments
alpha2 = (im2**2).mean()
alpha12 = (im1*im2).mean() # cross term
numerator = alpha12 - mu1*mu2
denominator = np.sqrt((alpha1 - mu1**2) * (alpha2-mu2**2))
ncc = numerator / denominator # be careful of division by zero!
print(ncc)
1 Like

thanks,you help me a lot.
your code is awesome.

1 Like