Measure of fibre orientation dispersion in MRTrix3

Dear MRtrix3 experts,

I have been looking for ways to obtain, in MRTrix3, a measure of fibre orientation dispersion similar to the Orientation Dispersion Index (ODI) obtained with NODDI. However, the closest command I have found is ‘sh2peaks’, which does not really give you a voxel-wise ODI-like metric.

I would be very grateful if you could guide me on that.

Thanks so much in advance.

Best wishes,
Carmen

Hi Carmen,

You can currently get a quantity that is somehow proportional to fibre orientation dispersion using fod2fixel -disp. It’s literally just the integral divided by the peak amplitude of the FOD lobe, so it’s not ‘calibrated’ to e.g. a dispersion angle; but it should be small for sharp FODs and larger for fatter ones.

If you’re an ISMRM member, you can access my 2016 abstract, which presented a more sophisticated FOD post-processing algorithm trying to get at this quantity. It may eventually see the light of day if I ever find the time to get back to it. :tired_face:

Cheers
Rob

Dear Rob,

Thanks a lot for your reply! that looks great and I will try it asap. I will also look at the abstract, for sure!

Best wishes,
Carmen

Dear Rob,

I tried to use the command you suggested and it does not seem to work in my computer.

I run: fod2fixel sub0001.wm_odf.mif -disp sub0001.wm_odf_dispersion2.mif -debug

where sub0001.wm_odf.mif is my odf file,

and I got:

fod2fixel sub0001.wm_odf.mif -disp sub0001.wm_odf_dispersion2.mif -debug*
fod2fixel: [INFO] reading config file “/etc/mrtrix.conf”…
fod2fixel: [DEBUG] reading key/value file “/etc/mrtrix.conf”…
fod2fixel: [INFO] reading config file “/home/carmen/.mrtrix.conf”…
fod2fixel: [DEBUG] reading key/value file “/home/carmen/.mrtrix.conf”…
fod2fixel: [INFO] opening image “sub0001.wm_odf.mif”…
fod2fixel: [DEBUG] reading key/value file “sub0001.wm_odf.mif”…
fod2fixel: [DEBUG] sanitising image information…
fod2fixel: [DEBUG] memory-mapping file “sub0001.wm_odf.mif”…
fod2fixel: [DEBUG] file “sub0001.wm_odf.mif” mapped at 0x7f688226d000, size 61931520 (read-only)
fod2fixel: [DEBUG] image “sub0001.wm_odf.mif” loaded
fod2fixel: [DEBUG] image “sub0001.wm_odf.mif” initialised with strides = [ 28 2688 258048 1 ], start = 0, using direct IO
fod2fixel: [INFO] creating image “sub0001.wm_odf_dispersion2.mif”…
fod2fixel: [DEBUG] sanitising image information…
fod2fixel: [DEBUG] creating empty file "sub0001.wm_odf_dispersion2.mif"
fod2fixel: [DEBUG] resizing file “sub0001.wm_odf_dispersion2.mif” to 4426152
fod2fixel: [DEBUG] sanitising image information…
fod2fixel: [DEBUG] memory-mapping file “sub0001.wm_odf_dispersion2.mif”…
fod2fixel: [DEBUG] “sub0001.wm_odf_dispersion2.mif” appears to reside on a networked filesystem - using delayed write-back
fod2fixel: [DEBUG] file “sub0001.wm_odf_dispersion2.mif” held in RAM at 0x7f6881e34010, size 4423680
fod2fixel: [DEBUG] image “sub0001.wm_odf_dispersion2.mif” loaded
fod2fixel: [DEBUG] image “sub0001.wm_odf_dispersion2.mif” initialised with strides = [ 1 96 9216 ], start = 0, using direct IO
fod2fixel: [INFO] writing back contents of mapped file “sub0001.wm_odf_dispersion2.mif”…
fod2fixel: [DEBUG] image “sub0001.wm_odf_dispersion2.mif” unloaded
fod2fixel: [DEBUG] unmapping file "sub0001.wm_odf.mif"
fod2fixel: [DEBUG] image “sub0001.wm_odf.mif” unloaded
fod2fixel: [ERROR] cannot create sparse image to access non-sparse data

Do you have any idea of why this may be happening?

Thanks so much in advance.

Best wishes,
Carmen

The final error message:

fod2fixel: [ERROR] cannot create sparse image to access non-sparse data

is arising because you are attempting to write the output image as a standard .mif image type. Because the output of fod2fixel is fixel data, the output image must be in the .msf sparse image format.

At least that will be the case for a few hours yet: the .msf format is about to become redundant (which is also why I haven’t put the effort into generating more useful error images).

Cheers
Rob

Hi Rob,

Thanks so much for this.

Best wishes,
Carmen

Dear Rob,

Sorry to bother you with that again.

I tried what you said: fod2fixel sub0001.wm_odf.mif -disp sub0001.wm_odf_dispersion.msf but I got an almost flat map, which doesn’t look like a quantitative map (see attached 2 screenshots).

Do you know why this may be happening?

Thank you very much for your help.

Best,
Carmen

Hi @carmentur,

That’s because .msf files aren’t really meant to be viewed directly as a main image in mrview, or at least not with the intention of seeing the actual data in there. Try to open the .msf volume in the Vector (or Fixel; depending on your version) tool! The dispersion measure is computed per individual fixel in a voxel, so there may be multiple ones in case of crossing fibres.

If you want to see a map, you could try fixel2voxel, but you’d have to think very carefully about what operation you’d choose to combine the dispersion measure of several fixels in a voxel. I can see good reasons and (vague) interpretations for both mean as well as sum, but they’re both fundamentally different… :warning:

Hi Thijs,

Thanks a lot for your reply.

I will try these options you suggest.

Thanks again!!
Carmen

Hello,

I also need to measure the amount of dispersion within different ROIs and am looking at these options (fod2fixel -disp & fixel2voxel mean/sum). I wonder what it measures, angles? and these dispersion can be negative or always positive? what the unit is? Also, higher number means more dispersion?
Thanks!!

SH

Hi @shae94,

The measure was described here:

It’s literally just the integral divided by the peak amplitude of the FOD lobe, so it’s not ‘calibrated’ to e.g. a dispersion angle; but it should be small for sharp FODs and larger for fatter ones.

I suppose technically the units are (steradian-1): The integral is in units of AFD, and the peak amplitude is a point sample of the FOD, which technically has units of AFD per steradian. But this is so far corrupted by spherical harmonic truncation, the only time I’d actually label it as such is if I’m trying to get a laugh :grin:

A slightly similar question, forgive me if this has already been addressed and I missed it, but is there a way to calculate the neurite density with MRtrix?

TY

Well, in many ways that’s what CSD has always reported (particularly the first l=0 term in the output)… We would now call it apparent fibre density, but in essence it’s based on very much the same assumptions - as long as you use relatively high b-values. It’s also slightly different in that the NODDI model provides NDI as a proportion of the non-iso compartment, whereas MRtrix would just give you a map that is (approximately) proportional to the overall amount of fibres per voxel (or neurites) - so the methods will give different results in regions that contain a significant amount of CSF, where the NDI estimated by NODDI tends to get noisy (since most of the voxel is CSF, so there’s not a lot of signal left to figure out the Vic/(Vec+Vic) ratio).

This probably gets a bit messy when using multi-tissue CSD though, since the GM part is factored out - I’d be surprised if that didn’t interfere somehow with the interpretation of the signal as ‘neurite density’ (if we allow neurites to encompass dendrites too). But that’s another story, probably a bit too much detail for a Monday morning…

1 Like

This is the perfect amount of detail for a Monday morning! So would you recommend not using msmt_csd if I’m interested in neurite density?

Basically, we’re interested in obtaining neurite density as well as water fraction maps, and it seems like the information that NODDI & MRtrix provide differ in the ways you mention. I’m guessing you prefer the MRtrix method? :slight_smile:

Am I really this transparent…? :wink:

Not necessarily - but you do need to be aware that there are conceptual differences in the information provided. It’s not like you can ‘just measure NDI using MRtrix3’. You can obtain maps that report on similar features, but they will have subtly different meanings. So as long as you’re aware of these differences, and if MRtrix3 does allow you to address your research question, then by all means, go for it.