wmFOD overflow T1

My data is single shell DTI (b0+b1000), commands I used are as follow:


flirt -dof 6 -cost normmi -ref T1w.nii -in b0.nii -omat T_fsl.txt

transformconvert T_fsl.txt b0.nii T1w.nii flirt_import T_DTI2T1.txt

mrtransform -linear T_DTI2T1.txt eddy_corrected_dti.nii out_align.nii


dwi2response tournier align.nii out_wm.txt

dwi2fod csd align.nii out_wmCSD.nii

But when I overlap the wmCSD.nii on T1w.nii, I found that there are many voxels beyond the brain. I wonder what causes this phenomenon? Is this normal?

Thank you in advance!

This is probably simply because you haven’t applied a brain mask to zero out voxels outside the brain. These are basically just noise.

That said, I don’t quite get how the commands you show can work correctly. The dwi2response call requires knowledge of the DW gradient table, and the NIfTI format can’t store that in the headers. For your call to work, you would have needed to add the -fslgrad option, was this the case? Same applies to the dwi2fod call, with the addition that the WM response file hasn’t been provided to the command.

Otherwise, to avoid the noisy voxels outside the brain, it should be sufficient to run dwi2mask before the dwi2fod call, and pass the resulting binary mask image to the subsequent dwi2fod call via the -mask option.

But you could probably do better with a 2 tissue decomposition, using the MSMT-CSD algorithm. You need to extract response functions for all 3 tissue types (WM, GM, CSF), but then perform the MSMT CSD using only two of them (since you have only 2 b-values), and the most effective combination is WM & CSF:

dwi2response dhollander align.nii -fslgrad bvecs bvals wm.txt gm.txt csf.txt
dwi2fod msmt_csd align.nii -fslgrad bvecs bvals wm.txt wm.nii csf.txt csf.nii 

Not as good as a full-blown 3-tissue MSMT CSD, but better than the regular CSD as it reduces the effects of CSF contamination.

Sorry, actually I have executed the -fslgrad command, but I didn’t show here ( I thought it wasn’t important to this question).

And I preprocessed my data with fsl in advance, I wonder which bvecs I should import here, the original bvecs or the eddy_corrected bvecs?

About the CSD and msmt_CSD, I actually got confused.

According to the manual, I first ran “dwi2response dhollander”, because I want to get multi-tissue response function. But then I found that the manual says if I want to execute msmt_CSD, there should have at least 3 shells, so I choose the dwi2response tournier + dwi2fod csd algorithm.

Thanks a lot to your reply.
According to your reply, I change my commands, are there any problems this time?

dwi2response dhollander align.mif wm.txt gm.txt csf.txt -fa 0.2
dwi2mask align.mif align_mask.mif 
dei2fod msmt_csd align.mif wm.txt wm.mif csf.txt csf.mif -mask align_mask.mif

Yes, I really need to update the docs to explain the issues here… In general, you can’t estimate more tissue types than the number of distinct b-values (at least when using regular MSMT-CSD). With single-shell data, you will normally have two distinct b-values, so you can readily estimate WM and CSF components. We need to make that more obvious…

I assume even you say “eddy_corrected”, that’s produced by eddy, not eddy_correct, right? The latter doesn’t perform very well in my experience. But yes, use the corrected bvecs.

No, that looks ok to me!

1 Like

Very thankful to you!