Assessing structural connectivity at voxel-level within a given ROI



I would like to perform whole-brain tractography, but within one particular ROI I’d like to keep voxel-specific information on where tracts start/terminate, rather than store everything at the ROI level i.e. I’d like to perform an analysis similar to the one presented in this paper

Is there any way to do this within the MRTrix3 architecture, other than assigning each voxel within the target ROI as a separate, new ROI (this would be possible, but get a little messy)? If yes, how would you recommend doing this?


Hi @Reinder,

A quick look at the manuscript suggests that it’s a typical connectivity-based parcellation type application. FSL’s tractography basically does this “internally”; with MRtrix3 it requires more explicit consideration of the individual steps required; but by “exposing” the internal steps there’s in fact a number of different ways that such an experiment can be done.

If you genuinely want to derive such connectivity information from “whole-brain tractography”, i.e. a whole-brain tractogram where streamlines are seeded throughout the entire brain rather than just your region of interest, then giving each voxel of interest a unique index and running tck2connectome is an option; alternatively, you can run your ROI through maskdump to get the voxel locations, then loop over those voxel locations using mredit to get a series of single-voxel ROIs that you could feed to tckedit.

If you want to seed streamlines just from the region of interest, you could use -seed_grid_per_voxel or -seed_random_per_voxel within tckgen, or you could use the maskdump | mredit trick described above to generate single-voxel ROIs that can be provided to tckgen as seeds in a loop. This is what I’ve done in a script of my own; which I’ve had a number of requests to upload…



Hi Rob,

Thanks for the help. Would you consider uploading this script? :slight_smile:

If I seed streamlines from a specific region only will the SIFT2 algorithm still work to optimize the weights? I recall reading somewhere that SIFT2 only works for whole-brain tractography. If that is correct, how would you recommend analyzing streamlines from a region of interest?


Providing my script on good faith (despite having been burned doing such of late); anyone looking to make genuine use of it please get in touch.

SIFT2 cannot be used unless the tractogram provided to it encompasses the entire brain white matter. To demonstrate this: Imagine that you perform tractography seeded from a single region. Now imagine two voxels: the first is right in the middle of where the streamlines seeded from that region traverse; another that is traversed by a single erroneous streamline that goes somewhere it shouldn’t have. The FODs in these voxels are expected to be of fairly comparable overall size. Yet because the latter only has a single streamline traversing it, that one streamline will be assigned a very large weight by SIFT2, as that is the only streamline that it has available to it with which to “explain” the FOD amplitude. It’s genuinely erroneous to be applying an algorithm that enforces correspondence between whole-brain FODs and a not-whole-brain tractogram, because they shouldn’t match.

Connectivity-based parcellation