Quality control for FD images

Hello!

I am quite new in the fixel area and currently working on extracting optic tract fixel measures from a set of subject DWI images. To do this I first calculated the tracks on the FOD template between the optic chiasm and left/right LGN which I calculated form an anatomical template and then I cropped the FD and FC maps of each subject using these tracks at the end of the fixel analysis. I was wondering if there are any tips you can give me for checking the quality of these calculations.

I know that FC values are not comparable across different studies, so comparing the values I got against the literature won’t be very useful. So in order to check the quality there I first looked at my subject to template warps which all look pretty good. Then, I looked at the correlation between the right and left hemisphere track FC values from each subject and this correlation appears to be quite high, so I am pretty confident that my FC values are good. However, I cannot say the same for my FD values. A similar left-right correlation is there for FD although it is lower. I thought this might be because our multi-shell b-values are on the lower side (our highest b is 3000) and there could be some extra cellular signal in there. I believe, although not sure, that this is not too much of a concern, but the more worrying thing I observed is that there is a strong negative correlation between our FD values and subject body size (weight and height). I was made aware that subject intra cranial volume is related to FC and should be corrected for, but I thought this shouldn’t be the case for FD. Could there be a correlation between FD and cranial volume as well or do you think my results are related to some sort of an error in the analysis? If there could be an error, where should I look for it? I already checked the orientation of the fixels and they look sensible. I got around ~450.000 fixels in the mask with the suggested thresholds and the fixels all look to be in the correct places.

Also, is it a good idea to do the tractography on the FOD template or should I have done it on each FOD image and calculate a common tract for the template by warping those individual tracks?

I’d appreciate any tips. Thanks!
Ozzy

1 Like

Hello Ozzy from an Aussie! :upside_down_face:

I’ve not had the experience of a large number of different FBA cohorts and applications coming across my desk, so I’ve not thought particularly hard about what a systematic FBA QC might look like. Certainly taking the subject FODs warped to template space (preferably with reorientation, even though that’s explicitly disabled for the sake of fixel calculations) and running an animation across them seeking gross anatomical misalignments is low-hanging fruit. Another you might want to consider is looking at, for each fixel, the number of subjects for which the value of FD is zero, i.e. no corresponding subject fixel was found. Those can influence the GLM quite strongly. Hopefully soon this work will get integrated, which will give some different options for mitigating such. Beyond that, it’s definitely something toward which community members could contribute ideas and code :crossed_fingers:

I was made aware that subject intra cranial volume is related to FC and should be corrected for, but I thought this shouldn’t be the case for FD. Could there be a correlation between FD and cranial volume as well or do you think my results are related to some sort of an error in the analysis?

So the advice you received may or may not have been downstream of this abstract. But this is actually quite an interesting point in the context of your specific work.

Over and above the experimental data shown there, the logic behind ICV influencing FC but not FD is that, within an image voxel in the middle of the WM of some small volume (e.g. 2mm x 2mm x 2mm), the fraction of the volume of just that voxel that is / can be filled with axons vs. other things possesses no logical link to the total volume of the whole head / brain. But this assumes a purely WM voxel, that’s surrounded by other WM, and WM fibre bundles that are wider in cross-section than the imaging resolution, such that differences in bundle cross-sectional area can be found morphologically using image registration. If the cross-sections of the various mesoscale WM bundles scale in appropriate proportion to total brain size, then it makes sense that the expansions / contractions necessary to align those image data to a central template space would possess some correlation with total brain size measurements. But for individual voxels within the cores of such bundles, it’s difficult to rationalize why that “packing density” / “volume fraction” would change as a function of brain size. Sure, if you were to take a brain, double its volume, but keep the same number of axons and not modify their diameters, then the voxel-wise fibre density would change along with that change in brain volume; but I simply don’t see why a healthy brain that is simply of larger volume would fail to pack in a comparable density of fibres per unit volume.

But you’re not looking at large macroscale bundles with wide cross-sections. Therein potentially lies a problem.

Imagine a WM bundle whose width & height is 1/10th the width & height of the image voxels. Firstly, this can present problems for image registration, which is what FC is derived from, but I’ll skip those details here. If there is a direct correlation between the actual physical cross-section of that bundle and brain size, this will manifest as a correlation between brain size with FD. Because within that voxel, the total volume that contains axons, and therefore contributes restriction toward a non-zero diffusion-weighted signal, increases in relation to such. So maybe in the case of looking specifically at narrow bundles, total brain size is not something you want to be ignoring.

the more worrying thing I observed is that there is a strong negative correlation between our FD values and subject body size (weight and height).

Aaaaand you broke my logic :stuck_out_tongue:. Though this is weight and height rather than brain size, I don’t know how strongly those are correlated. Implying a link between visual system density and weight based on utilisation during exercise is probably a bit strenuous :grimacing:. Another risk is T2 effects, which is a persistently annoying confound in FD, though you’d want a reasonable argument for why it would influence your particular measurements rather than using it as an escape clause.

Also, is it a good idea to do the tractography on the FOD template or should I have done it on each FOD image and calculate a common tract for the template by warping those individual tracks?

I think that as long as you can delineate the tract on the FOD template, it makes sense to do it that way. The alternative is a lot more work, so you’d need a reasonable expectation of it being somehow beneficial to justify the effort. If the resulting fixel mask looks faithful to known anatomy and seems to be selecting quantitative data from appropriate fixels, personally I’d stick with that.

Cheers
Rob

Thanks Rob, that’s plenty to think about and it looks like we need to be careful explaining all of these relationships with FD. I actually calculated the intracranial volume for all subjects and they seem to be correlated with FC but not with FD which makes sense.

I’d like to investigate the correlation we have with height a bit more by looking at the whole brain maps. To do this I think I can reduce the fixel maps to voxel maps by taking the mean of each fixel and then calculate the correlation with height at each voxel, but I was wondering if there is a better way to do this in MRtrix. Is there a function for instance that I can use to make a correlation fixel map which will look at the correlation of height at each of the individual fixels?

To do this I think I can reduce the fixel maps to voxel maps by taking the mean of each fixel and then calculate the correlation with height at each voxel

If you had to project things to the voxel grid, then the appropriate statistic depends on the nature of the metric. E.g. For FD, you would want to be summing FD across fixels within a voxel (though taking the WM l=0 term would be more direct and have less variance since it doesn’t necessitate fixel segmentation; see e.g. this work). Whereas for FC, I’d personally instead advocate a weighted mean, where fixels with greater FD make greater contribution toward the mean; see e.g. this thread for a more extensive justification (In hindsight, taking the log, then a weighted mean, then the exponent if wanting FC rather than log(FC), would probably be slightly better).

This however assumes that computing correlations between covariate data and fixel-wise data is not the way to go. There’s no existing MRtrix3 command that will do this for you, but there’s a number of possible solutions:

  • If you have an existing solution for this for voxel data, just save the fixel data files as NIfTI, and (as long as NIfTI-2 is supported) your existing solution should just work; the “voxel images” will be interpreted as size e.g. 500,000 x 1 x 1.

  • A command written against the MRtrix3 C++ API for this task would not be terribly difficult to produce for anyone with some familiarity with the C++ language.

  • You could use the MRtrix3 image format MatLab functions to get the fixel data in & out of MatLab / Octave in order to perform the correlations there.

Cheers
Rob

Hi Rob,

Just to follow-up on the voxel-wise aggregate measures:

  • Taking the weighted mean (weighed by FD) of the log_FC gives me a map full of zeros. Which sort of makes sense as the goal of taking the log of fc was to centred data around zero and ensure it’s normally distributed. Although I would have expected that weighing by the mean would make the mean of log FC deviate from zero. Maybe better take the voxel-wise mean of FC instead? I used the -fmls_no_thresholds option in fod2fixel.
  • For FD, I tried using the l=0 term (1st volume) of the WM FOD (warped but NOT reoriented) and scaled by the SH factor as in the mrcalc documentation (mrcalc wm_fod_vol0.mif 4 pi -mult -sqrt -div wm_fod_vol0_scaled.mif). When comparing the voxel-wise FD sum to the scaled l=0 term of the FOD, I am getting maps which look similar but with very different intensity ranges (max values of the scaled l=0 term of the FOD are about 0.09 while max values of the sum FD are about 1.7). Was I supposed to multiply by sqrt of 4pi and not by 1/sqrt of 4pi as in the documentation? This would result in values closer to the sum of FD, although still different.
  • For FDC, doing the voxel-wise sum of FDC gives an image full of zeros (same as for the mean of log_fc). I inspected the FDC images (with fixel plot), as well as the FD and FC and they look ok to me. I don’t understand where the issue comes from. Could it be because of the absence of a segmentation threshold? I used -fmls_no_thresholds as you suggested as to get a more accurate representation for the complexity metrics but could this result in maps full of zeros for voxel-wise aggregate measures of FC and FDC?

Thank you so much for your very detailed feedback on this topic. I really appreciate it.

Stefanie

Taking the weighted mean (weighed by FD) of the log_FC gives me a map full of zeros.

Yeah, that’s definitely not correct. I just did a quick test and the functionality seems to be working. So if you’re getting nothing but zeros, you’ll have to check your input data and your command carefully. I also couldn’t find any evidence of a prior bug fix that your local installation may lack.


Here is an image of:
fixel2voxel logFC.mif mean unweighted.mif
, with the fixel data overlaid using the fixel tool, and the same colour map & scaling used for both. Most of the fixels are indistinguishable, because they have the same colour as the background voxel image. There are however some regions of inconsistency due to the number of fixels chaning between adjacent voxels (see focus point):

Now here’s the same, but with the background image calculated using:
fixel2voxel logFC.mif mean unweighted.mif -weighted FD.mif
The differences are mostly subtle, but in areas of higher complexity the voxel map is a little smoother if contributions to the voxel-wise aggregate are weighted by FD:


(max values of the scaled l=0 term of the FOD are about 0.09 while max values of the sum FD are about 1.7). Was I supposed to multiply by sqrt of 4pi and not by 1/sqrt of 4pi as in the documentation? This would result in values closer to the sum of FD, although still different.

Correct. Can you please link to the specific documentation you’re looking at?

I used -fmls_no_thresholds as you suggested as to get a more accurate representation for the complexity metrics but could this result in maps full of zeros for voxel-wise aggregate measures of FC and FDC?

I don’t see any reason why having a larger number of fixels in each voxel would have such a detrimental effect on the fixel2voxel operation; it’s all designed around not knowing a priori how many fixels are present in each voxel. But certainly if you omit that option in fod2fixel, and then fixel2voxel works as expected, it would require closer inspection.

Rob

1 Like