FNIRT registration problem into MNI 1mm space

Hi everyone,

I am working with high-resolution rs-fmri data. I am trying to register the bold images to MNI using FSL by
1.registering bold to T1 using FLIRT
2.T1 to MNI with FLIRT(dof 9)
3.T1 to MNI with FNIRT using the transformation from the 2nd step
4. Applying to warp from the 3rd to the bold images, along with the transformation matrix from the 1st step. However, I get weird results specifically around the lateral top parts of the cortex, near(ish) to the boundaries, both with the T1 and the bold (see the screenshots below, both overlaid on the MNI 1mm template).Medial and inferior looks fine (not shown)

I tried resolving the issue by changing some of the parameters/options and arguments as below. As a reference, I used the default MNI_2mm template configuration file in FSL. However, this did not make much difference. I am aware this configuration file is for 2mm space, however I do not know which parameters would optimize registration into the 1mm space. Does anyone have an idea or have used FNIRT to normalize into 1mm space?

I am using fsl/ Voxel sizes; bold 1.6 mm iso, and T1 0.73mm iso.

Any help would be appreciated! Thank you!

fnirt --ref=${FSLDIR}/data/standard/MNI152_T1_1mm.nii.gz
–inmask=sub-01-brain_mask.nii.gz --imprefm=1 --impinm=1
–imprefval=0 --impinval=0 -
-subsamp=4,4,2,2,1,1 --miter=5,5,5,5,5,10
–infwhm=8,6,5,4.5,3,2 --reffwhm=8,6,5,4,2,0
–lambda=300,150,100,50,40,30 --estint=1,1,1,1,1,0
–applyrefmask=0,0,0,0,1,1 --applyinmask=1
–warpres=10,10,10 --ssqlambda=1 --regmod=bending_energy
–intmod=global_non_linear_with_bias --intorder=5 --biasres=50,50,50
–biaslambda=10000 --refderiv=0

Screenshots / relevant information:


Did you brain-extract your MNI image, T1w image and bold image before doing linear registration with flirt? That would help as mentioned in the FNIRT user page.

Fnirt can be quite sensitive to the starting estimate ( the value of --aff), and if flirt fails, or performs poorly, so will fnirt. It is therefore a good idea to make sure flirt does as well as it can. Flirt is e.g. typically more robust when data has been betted first, whereas fnirt takes un-betted data. The following strategy will therefore often work well:

bet my_image.nii my_betted_image.nii
flirt -ref MNI152_T1_2mm_brain.nii -in my_betted_image.nii -omat my_affine_guess.mat
fnirt --ref=MNI152_T1_2mm.nii --in=my_image.nii --aff=my_affine_guess.mat ...

To identify where the issue is, you should look at the images your register after each step to see from which stage the problem comes.

Also, you can also ask the FSL forum where FSL developers are present and can answer more efficiently any FSL-related question.

Thank you responding jsein!

Yes, I skull-stripped both images before using FLIRT (bold data with bet in FSL and T1 with antsBrainExtraction.sh, which also does intensity normalisation).

I also used the non-skull stripped versions of both T1 and MNI template in FNIRT since apparently boundary information is useful in FNIRT. I also entered both template and T1 image masks here.

I checked the outputs after FLIRT, and these seem completely fine (both for the bold and the T1, in step 1 and 2 above).

I have checked the FSL forum already for answers but I will post this there as well. I found this entry from 2 years ago. It sounds like they had the same problem as well with 7T data.

Thank you for these details, you identified correctly the step that is wrong within your pipeline.
There are many parameters that you can tune within flirt to optimize the non-linear registration and it appears from your example that the parameters you chose so far do not work well for your data. You could try to optimize those by trials and errors but that would take a lot of time if don’t find proper guidance for these tests.
Another suggestion would be to try with other tools than FSL. To name a few:
ANTs, 3dQwarp, Geodesic Shooting, DARTEL, NiftyReg