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…

1 Like

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,

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?

What SIFT2 (and related methods) will do is provide some some guarantee of correspondence between:

  • Local fibre density as estimated from the DWI data on a voxel-wise level (i.e. a volume measurement);
  • The local density of streamlines as produced by the tractogram (which is technically achieved in SIFT2 as a sum of streamline-voxel-intersection lengths—see Figure A3 here—but other related methods do it differently—see Figure 3 here).

Having done so, it then gives some greater degree of confidence in interpreting the total endpoint-to-endpoint “connectivity” between two regions as estimated from the tractogram as being proportional to “fibre density” (which in this instance is actually a cross-sectional area measurement; again I try to explain this concept here).

I may come off as exceptionally convoluted here, but I’m endeavouring to be very precise out of necessity. A statement like “SIFT2 makes the resulting streamlines more biologically meaningful” would be heavily criticised by those in the know, and for good reason. For one, SIFT2 makes no attempt to modify the streamlines trajectories in any way; so if those trajectories are incorrect (which we know is ubiquitous), that’s not a problem that SIFT2 can solve. It’s specifically the endpoint-to-endpoint connection density of some bundle of interest—which is intrinsically presumed to consist of many streamlines—that is more biologically meaningful with use of this method. The best case I can make for this argument is the OSF preprint linked above (which I wrote largely because there was an absence of understanding of these relationships in the community); so if that’s still not adequate to communicate what’s going on here, I may need to rethink the volume of time I invested into it; and/or my life in general… :sweat_smile: