Reconstruction of the Corpus Callosum

Hi there,

I am trying to manually segment the corpus callosum using the tckgen approach.

I am very new to tractography and all the different options are daunting.

I am running the following:

tckgen -seed_image CC_ROI_291123.mif sub_acq-HARDI_dir-AP_part-mag_dwi_driftCo_TED_gibbsCorrSubVoxShift_wm.mif CC_291123.tck -force

Below is my ROI image:

I get a very messy tractogram which is contaminated with different fibres.

Then I tried to run this again but this time having an exclude ROI drawn in the axial plane to remove any fibres crossing the CST, like below:

But I am still getting a messy tractogram.

I tried an automated approach using TractSeg but because my sample consists of patients with neurodegeneration and movement artefacts, it has been argued that it might not be the best approach.

Could anyone help/guide me please?

Many thanks,

Hi Vasilis

Welcome to tractography mayhem! It is indeed daunting and difficult. :slight_smile: Starting with the corpus callosum is also quite a baptism of fire…

The main thing to know is the tracking algorithm doesn’t know what the bundle is supposed to look like, and especially with probabilistic tractography, most streamlines are going to be false positives, due to the many crossing fibre configurations which will tempt a streamline down a different path than where you want it to go. Hence the mess!

Step 1 is to have a good understanding of the anatomy of the tract you want to reconstruct. The CC is a difficult one here, since it doesn’t really have well defined start and end regions (as I understand it). For example, many CC segmentations (including e.g. TractSeg) are basically the whole brain! Others divide it into chunks. Maybe you’re interested in just the connections between bilateral motor cortices? The definition will depend on your research question, and whether you need a reproducible pipeline for quantitative analysis or just pretty pictures. You should be able to describe in words or sketch out in anatomical terms what the tract looks like along it’s entire length.

Step 2 is to see how others have used tractography in the CC. You’ll notice that ROI protocols are pretty non-standardised. Do a quick literature search for studies involving tractography of the CC, and focus on recent ones using similar tractography algorithms to you (results from 2005 using diffusion tensor tractography will look very different and won’t be as relevant). Use these past works as guides for your own ROIs (e.g. if there’s something everyone agrees on, like your cyan midline ROI).

Step 3 is to figure out your ROIs and other tracking parameters. Usually the seed or inclusion ROIs are quite clear, like the one you’ve already drawn, but you could refine them based on your specific research question. Most of the work is in managing false positives with exclusion ROIs, as you’ve started doing, but you could also add more precise target ROIs e.g. cortical regions if you have a parcellation. You could also look at other tckgen settings like -max_length, which could reduce the number of crazy streamlines looping all over the place, or -stop if you have inclusion ROIs which represent where you want the tract to terminate.

Try out combinations of ROIs and parameters until you have maximum quality for as little effort as possible (especially if your sample size is large). It’s also good to be aware of some of the pitfalls of tractography and how they might affect your results.

Note that movement artefacts will effect all your processing (including CSD and tractography) and should be corrected for in pre-processing. TractSeg uses the orientations peaks from the same FODs which you’ll (presumably) be running your tractography from. It’s true that TractSeg can be less robust to pathology, and you may prefer a different anatomical definition than the default model. But it might be useful as an initial mask for you to use in combination with your own ROIs to reduce stray streamlines. Also consider how the same pathology might affect your tractography.

Hope that helps as a starting point. Feel free to shoot over any more specific questions if you’re still feeling lost.



Hi Fiona

Thank you so much for your patience and time into writing your reply to my question.

All of this is very helpful.

With the parcellations - do you have any software that you would recommend? I’ve only done fMRI and EEG analysis before, so all the new avenues that remain to be explored in anatomical and diffusion imaging are exciting but also overwhelmingly numerous! As I understand, this approach would involve coregistering the T1 image to my diffusion space, then extracting the cortical surface of the area where I want my tckgen algorithm to end, right?

You mentioned this with regards to TractSeg

you may prefer a different anatomical definition than the default model

But I’m not sure I understand what it means. Can I switch models in TractSeg? Also how can one use the output from TractSeg as ROI into tckgen?

Thanks again so much.


I’ve not worked a whole lot with parcellations, so I don’t have a comprehensive view of what options there are unfortunately. I think the most well established and widely used is Freesurfer, it takes a very long time to run though so bear that in mind. (I’ve also heard good things about FastSurfer but I have no direct experience.)

Exactly, and you’ll find lots of other threads on this forum about coregistering T1w and DWI; FSL is a good toolbox for this task (either flirt or epi_reg, for example).

Yes indeed, a parcellation will typically consist of a label image, where the value of each voxel maps to a specific structure.

So for example, lets say you wanted an ROI for your tractography for the left primary motor cortex (left precentral gyrus). If you run Freesurfer, one of the outputs should be the parcellation file aparc.a2009s+aseg.mgz (a2009s+aseg refers to the specific atlas used). So to get just the PCG as a binary region you find the corresponding parcellation label:

11129  ctx_lh_G_precentral                     60 140 180   0

and extract it with MRtrix like this:

mrcalc aparc.a2009s+aseg.mgz 11129 -eq lh_precentral_gyrus.mif
tckgen wm_fod.mif -include lh_precentral_gyrus.mif # ... etc

There is one other pretrained model (use the --tract_definition option) which is based on XTRACT segmentations, but I wouldn’t recommend it… But no harm in checking it out, it only takes 3 minutes. Other than that, you would have to retrain the model yourself with new training data, which is technically possible but not well supported.

ROIs are just binary images, and TractSeg outputs binary segmentations (by default, this is the model’s inference probability thresholded at 0.5 and cleaned up a bit. You can get the raw probabilities and threshold them yourself using the --get_probabilities option).

My suggestion was that you could use the TractSeg segmentation as a tracking mask (-mask option in tckgen), since it is very big and would help clean up the image a bit. Be aware that the -mask option simply cuts off any streamlines leaving the mask, rather than discarding them. If you wanted to reject any streamline that tries to leave the mask then you’d need to invert it and use it as an -exclude ROI.

1 Like