Streamline density of fibers?

Hello Mrtrix expert,

I am interested in finding the streamline density per voxel. So far, I could find the streamline count per voxel. However, I am not sure if this value is related to the actual density of the streamlines per voxel. I would appreciate any guidance you might have on this mater.

Thank you,

Hi Parand,

If, in differentiating between “streamline count” and “streamline density”, what you are intending to quantify in the latter case is the sum of streamline-voxel intersection lengths, then what you are looking for is the tckmap -precise option.

If instead, you are interested in the local voxel-wise fibre density—as in, in reference to the local density of biological neuronal axons—then I would recommend reading this article, as well as strongly discourage use of the word “streamlines” when referring to such.


Hi Rob,

Thank you for your response. Based on the article you provided, I can use tcksift2 command to get the fiber density. I’d appreciate it if you could correct me if I am wrong!

I think I am a bit confused about what is the difference between streamline and fiber and streamline count per voxel. Are they somehow related to each other?


Yes and no. What SIFT does is to correct the density of the streamlines – either by complete removal (SIFT) or by deriving appropriate weights (SIFT2) – so that the resulting streamline density reflects the observed apparent fibre density (see below). That’s a separate concept from the process of actually computing the final density of the streamlines, which is what tckmap is for.

To clarify, we can derive the density of streamlines from any given tractogram (collection of streamlines), irrespective of how biologically meaningful those streamlines might be. That’s the process that tckmap does, and it can do it several ways, which is what @rsmith was hinting at in his first paragraph.

The second point relates to what these streamlines were supposed to represent in the first place. Bear in mind streamlines are just virtual 3D paths, nothing more. They have no inherent meaning unless the process by which they were generated was designed to produce something meaningful. If your question was: how do I ensure the streamline density I obtain is biologically relevant, then we have to worry about how they were produced – and this is where techniques such as ACT and SIFT come into play. But this all happens before you compute the final voxel-wise streamline density.

What @rsmith is driving at here is that it’s very easy to introduce confusion when mixing terms that can be interpreted very differently by different people. This is why we strongly recommend only using the term streamline to refer to the output of tractography algorithms (i.e. computer-generated 3D delineations/paths), whereas the term fibre can easily be interpreted as referring to the biological axonal fibres that these streamlines are supposed to delineate. They’re not the same things, but it’s not uncommon for people to come away with the idea that the streamlines they’re being shown are one-to-one representations of individual axons – which is a long way from the truth.

What we can get with our current tools are:

  1. estimates of streamline density (based on the output of tractography algorithms), whether that be a straight streamline count per voxel, or a weighted sum of the contribution of each streamline to each voxel (i.e. a streamline that only clips the corner of a voxel won’t contribute much to the streamline density of that voxel, whereas one that traverses the voxel from one corner to the opposite corner will contribute maximally).

  2. estimates of the apparent fibre density, where in this instance we do mean the (apparent) density of axonal fibres. This is not based on tractography, but on the observation that at high b-value, the diffusion signal is overwhelmingly driven by the intra-axonal compartment, and since the fibre ODF we extract with CSD is directly proportional to the dMRI signal, the amplitude (or more precisely, integral) of our fibre ODF peaks provides an estimate of the apparent density of axonal fibres (with the term apparent here accounting for the fact that other factors such as T2, axonal radii, myelin level, etc will also likely modulate that relationship to some extent). This is the basis of the apparent fibre density framework, which typically constitutes the input data for fixel-based analyses.

There’s a lot of concepts to get familiar with before this can all make sense, but hopefully the above will steer you in the right direction…

Dear Donald,

Thank you for the detailed response. I have a more clear understanding now.

Here is what I used to generate streamlines:
tckgen -act 5tt_coreg.mif -seed_image ROI.mif -seed_unidirectional -seeds 0 -select 1000000 wmfod.mif Output.tck

I also applied sift2 weighting to the outcome.
Could you please let me know if this would make the resulted streamlines to be biologically meaningful?

Thank you,