I’m trying to register functional data to the anatomical in 20 subjects in a study where both inferior medulla and cortex are involved in the analysis. I first tried the “usual” registration with align_epi_anat.py, the results on the cortex and superior brainstem were good, but I had some problems from the lowest part of the pons dawnwards. I used the suggested procedure on the help page of 3dQwarp and I obtained very good improvements as i set -maxlev 3, while things get worse with higher levels of maxlev. Are there to your knowledge any drowbacks in doing this? Are T2 to T1 nonlinear registrations typical in fmri? Also, should I first invert the contrast in the t2 image?
Thanks for your opinion
Well it depends on the details, of course. Nonlinear warping is often done for distortion correction. So things like blip-up/blip-down distortion and B0 field map correction require computing a nonlinear warp to apply to the EPI data. A single nonlinear warp is applied to all the EPI volumes equally for the purpose. Often this is combined with affine transformation for motion correction and for alignment to a corresponding anatomical dataset. Additionally, affine and nonlinear warps are concatenated and applied to bring the processsed data into a standard template space.
Usually we compute an affine alignment between the EPI data and the anatomical data. Is the result not good at that step of the alignment? Or are you not seeing good alignment of the anatomical dataset to a template? There we do use a nonlinear warp to align the data to the template. You can potentially increase the weighting for some areas or allow for more distortion. Or do separate analyses with different alignments. The cerebellum is a bit trickier thant other areas because it hangs very differently from one person to another. That sometimes makes a separate cerebellum analysis necessary. Jorn Diedrichsen made a separate cerebellum template and atlas for this purpose.
We generally do not apply a different nonlinear warp for the purpose of motion correction though. For this to work at all, you need to have exceptionally good structural resolution. I’ve tried something similar in the past, and I’ve seen best performance visually with an inilev and maxlev both set to 4, so no big warps and no tiny warps. That was for that particular data, and your data will be different. In the end, we decided against it, because there is still some arbitrary warping inside areas that have little visible structure in the EPI data.
Hi Daniel, thank you so much for the reply, here are some more details
What I’m doing on 7T data (1.1mm iso) is:
- applying motion correction and taking the bias-field-corrected time-average as base for registration (should increase SNR)
- correcting for distortions using fieldmaps and fsl fugue
- affine registration epi 2 anat with align_epi_anat.py
- nonlinear registration epi 2 anat with 3dQwarp
- concatenation of transforms from steps 1,2,3,4 into a single transform to be applied to original data
I already computed anat 2 template transforms, so now I’m just focusing on epi 2 anat.
I added step 5 because the output of step 4 was very good in the cortex and midbrain, but there were problems in the lowest part of medulla which was usually displaced anteriorly or posteriorly wrt the anatomy
This looks mostly pretty reasonable. I will add a few comments about some of the steps.
- Averaging is everyone’s, including mine, first instinct as a base. This works well for very well-behaved subjects, but it’s not terribly robust to motion. We generally will recommend a minimum outlier volume or sub-bricks 0 or 1 for difficult cases. A reliable individual sub-bricks generally works better, but if you have a very still subject, then averaging is fine.
- We do have B0 correction software now - epi_b0_correct.py.
- Nonlinear warp of EPI to anat. So I think this is a good idea, and one that has been on my list of things to try for quite some time in combination particularly with the similar blip-up/down correction. DR.BUDDI in the Tortoise package also does this. This would be limited to a single, specified EPI sub-brick volume and using a limited range of distortion, as you said.
- Concatenating is possible with 3dNwarpApply. See unWarpEPI.py for an example of how something similar was done with blip-up/down. Going to standard space adds more transformations.
Adding -nopenalty or specifying a small penalty with -penfac with 3dQwarp will allow more distortion, but it might not be enough. I’m surprised you would get that much distortion between EPI and anat though; I would expect only relatively small amounts left, especially after the B0 correction. The initial levels will allow larger displacements. Include -workhard too. Separating the analysis into two sections - cerebrum, and then cerebellum and brainstem might work better.
Hi Daniel, thank you very much for the useful suggestions. I came up with averaging after it gave me some improvements when I was still using fsl, but now I will pay more attention to subject-specific movement, thanks.
Also, I didn’t know about epi_b0_correct.py, I’m glad it has been finally implemented
“I’m surprised you would get that much distortion between EPI and anat though; I would expect only relatively small amounts left, especially after the B0 correction”
Yes, I understand. Since when I tried -maxlev 0 I had very good results for the cortex and poor results only for medulla, I guess that’s because we have a problem of fieldmaps quality in the most inferior regions. That’s why distortion correction can’t do the whole work in there.
I will give a look at the other options you mentioned, anyway, let me say that you’re all making a really great job!