Hi @zivy
Thanks for the suggestions. I tried limiting the affine registration to translations in z only, but ran into the error:
itk::ERROR: MattesMutualInformationImageToImageMetricv4(000002376B655EA0):
All samples map outside moving image buffer. The images do not sufficiently overlap.
They need to be initialized to have more overlap before this metric will work.
For instance, you can align the image centers by translation.
When I tried limiting it to x, y and z translations only, I ended up with a result far worse than the initially aligned image using LandmarkBasedTransformInitializer
.
Interestingly I stumbled across an older thread that Andras Lasso commented on:
His suggestion to crop the larger image down to the smaller one is reasonable but it seems that I really ought to be able to crack the affine registration since I managed to get it working for the bspline.
Here is a collection of plots for 6 different fixed-moving image sets (“SR10”, “SR11”, … “SR15”), with 3 plots per set:
- Initial alignment (using geometry)
- Metric v iterations
- Difference between the fixed and registered image for a middle slice
These are all MR-to-MR registrations (no fiducials required), so I would expect the initial alignment using geometry or moments to provide decent starting points.
For some datasets I get good results using geometry or moments, for some I get better results using geometry, while for others I get poor results irrespective of the method of initialization.
I’ve not managed to find any patterns in good/bad results (e.g. relative voxel spacings, relative directions, relative T1/T2 contrast, etc.). Summary table here.
I wonder if someone experienced in registrations might be able to see any clues as to why they do so poorly for some datasets and what I might be able to do to make the registration method more robust. Thanks!