I am using ANTS to coregister clinical acute stroke DWI scans with other modalities obtained at the same time on the same patient, e.g. FLAIR. As expected, there is significant geometric distortion of the echo-planar DWI sequences. I'm hoping ANTS can correct this to some extent. I'm using the antsRegistration binary with a rigid body step (in case there is patient movement between sequences) followed by SyN to deal with the distortion. Results so far are not as good as I hoped for.
Critically, the DWI scans as well as the FLAIR scans (and other possible targets) all have thick axial slices (5mm). In-plane resolution is good (~1mm) though there is sometimes motion artifact.
I am wondering if anyone has any suggestions for parameters or strategies to optimize coregistration in this context.
Thank you for any help you can give.
best,
Stephen
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thanks, yes I started with defaults based on the provided scripts, but didn't get great results. Here are some of the changes I am considering specific to my coreg context:
(1) the SyN stage from the script has:
-c [50x0,1e-6,10] -f 2x1 -s 1x0vox']
I changed this to:
-c [1000x750x500,1e-7,20] -f 1x1x1 -s 5x2x0mm
My reasoning:
(i) why 0 iterations at the second step?
(ii) require more convergence
(iii) don't want to shrink at all in the z plane where voxels are 5 mm, so better not to shrink at all?
(iv) specify smoothing in mm instead of voxels because of anistropic voxels
(2) set --initial-moving-transform = 2 (align origins) because my images are usually quite well aligned initially, coming from the same patient, same session, and the geometry is correct in the headers
(3) increase the sampling from 0.25 to 0.5 -- would this improve ability to line up specific sulci?
If possible, I'd appreciate any feedback on the logic of these changes. I will experiment with different parameters, but I'd like to be sure I'm understanding the functions of the different parameters so that I can try things that are sensible.
Thanks again.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The script is named Quick for a reason. A 0at the final iteration is used to ensure that the final displacement field is interpolated to the highest resolution level without the overhead of runnning the registration at that stage. Also, that's way too many SyN iterations. You're probably around the local minimum a good percentage of the time and even those final iterations are probably not changing the solution noticeably.
(iii) don't want to shrink at all in the z plane where voxels are 5 mm, so better not to shrink at all?
Concerns about huge anisotropy are already taken care of in the multi-resolution scheme.
(3) increase the sampling from 0.25 to 0.5 -- would this improve ability to line up specific sulci?
You might want to try the non-Quick version which uses CC as the metric and samples all voxels.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
It's pretty customized to work with in-house data, but could be a starting point.
It uses a Rigid stage then BSplineSyN. I avoid affine as I find there is little true affine distortion between the DWI and T1, and it just makes the solution worse.
For anisotropic voxels, you might try anisotropic spline spacing, as commented in the script. You can also try adding regularization and / or restricting deformation along the phase encode axis, with the -g or --restrict-deformation option, eg something like -g 0.1x0.8x0.1.
Last edit: Philip Cook 2020-04-14
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thank you Philip, I will read your script and see if it works for my data, or at least provides pointers to the right parameters. Indeed I can't get a field map here--these are pre-existing clinical scans that I'm just using for research after the fact.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Question for @ntustison - how does the metric radius handle anisotropic voxels? I know the shrink factors use the smallest of the three dimensions. Does CC[fixed, moving, 1, 4] work the same way? I kind of think it would have to, but I've not checked the code.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Question for @ntustisonhttps://sourceforge.net/u/ntustison/ - how does
the metric radius handle anisotropic voxels? I know the shrink factors use
the smallest of the three dimensions. Does CC[fixed, moving, 1, 4] work
the same way? I kind of think it would have to, but I've not checked the
code.
I am using ANTS to coregister clinical acute stroke DWI scans with other modalities obtained at the same time on the same patient, e.g. FLAIR. As expected, there is significant geometric distortion of the echo-planar DWI sequences. I'm hoping ANTS can correct this to some extent. I'm using the antsRegistration binary with a rigid body step (in case there is patient movement between sequences) followed by SyN to deal with the distortion. Results so far are not as good as I hoped for.
Critically, the DWI scans as well as the FLAIR scans (and other possible targets) all have thick axial slices (5mm). In-plane resolution is good (~1mm) though there is sometimes motion artifact.
I am wondering if anyone has any suggestions for parameters or strategies to optimize coregistration in this context.
Thank you for any help you can give.
best,
Stephen
You could start with the basic script
antsRegistrationSyNQuick.sh
. That has default parameters which are a good place to start.Thanks, yes I started with defaults based on the provided scripts, but didn't get great results. Here are some of the changes I am considering specific to my coreg context:
(1) the SyN stage from the script has:
-c [50x0,1e-6,10] -f 2x1 -s 1x0vox']
I changed this to:
-c [1000x750x500,1e-7,20] -f 1x1x1 -s 5x2x0mm
My reasoning:
(i) why 0 iterations at the second step?
(ii) require more convergence
(iii) don't want to shrink at all in the z plane where voxels are 5 mm, so better not to shrink at all?
(iv) specify smoothing in mm instead of voxels because of anistropic voxels
(2) set --initial-moving-transform = 2 (align origins) because my images are usually quite well aligned initially, coming from the same patient, same session, and the geometry is correct in the headers
(3) increase the sampling from 0.25 to 0.5 -- would this improve ability to line up specific sulci?
If possible, I'd appreciate any feedback on the logic of these changes. I will experiment with different parameters, but I'd like to be sure I'm understanding the functions of the different parameters so that I can try things that are sensible.
Thanks again.
The script is named
Quick
for a reason. A0
at the final iteration is used to ensure that the final displacement field is interpolated to the highest resolution level without the overhead of runnning the registration at that stage. Also, that's way too many SyN iterations. You're probably around the local minimum a good percentage of the time and even those final iterations are probably not changing the solution noticeably.Concerns about huge anisotropy are already taken care of in the multi-resolution scheme.
You might want to try the non-Quick version which uses
CC
as the metric and samples all voxels.Thank you Nick, these responses were all very helpful. I will post again when I have tried some of this out.
Here's a script I have used with some success. Nothing's as good as a field map, but this is what I use when that's not an option
https://github.com/ftdc-picsl/dtProcessing/blob/master/preproc/distCorrDiffToStructural.pl
It's pretty customized to work with in-house data, but could be a starting point.
It uses a Rigid stage then BSplineSyN. I avoid affine as I find there is little true affine distortion between the DWI and T1, and it just makes the solution worse.
For anisotropic voxels, you might try anisotropic spline spacing, as commented in the script. You can also try adding regularization and / or restricting deformation along the phase encode axis, with the
-g
or--restrict-deformation
option, eg something like-g 0.1x0.8x0.1
.Last edit: Philip Cook 2020-04-14
Thank you Philip, I will read your script and see if it works for my data, or at least provides pointers to the right parameters. Indeed I can't get a field map here--these are pre-existing clinical scans that I'm just using for research after the fact.
Question for @ntustison - how does the metric radius handle anisotropic voxels? I know the shrink factors use the smallest of the three dimensions. Does CC[fixed, moving, 1, 4] work the same way? I kind of think it would have to, but I've not checked the code.
No, I'm pretty certain it does not. I can't remember why but I'm guessing there was a reason why it wasn't added with the shrink factor option.
cc radius is voxels
brian
On Tue, Apr 14, 2020 at 4:39 PM Philip Cook cookpa@users.sourceforge.net
wrote:
Thanks guys. So that's one thing to consider with big slices and the CC metric.