Skip to content

Instantly share code, notes, and snippets.

@MarcCote
Last active June 16, 2022 07:51
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save MarcCote/ebf0ae83a9202eb96d1dfbb949cd98af to your computer and use it in GitHub Desktop.
Save MarcCote/ebf0ae83a9202eb96d1dfbb949cd98af to your computer and use it in GitHub Desktop.
Script that converts TCK to TRK using https://github.com/MarcCote/nibabel/tree/streamlines_tck
import os
import argparse
import nibabel as nib
from nibabel.streamlines import Field
from nibabel.orientations import aff2axcodes
def build_argparser():
DESCRIPTION = "Convert tractograms (TCK -> TRK)."
p = argparse.ArgumentParser(description=DESCRIPTION)
p.add_argument('anatomy', help='reference anatomy (.nii|.nii.gz.')
p.add_argument('tractograms', metavar='tractogram', nargs="+", help='list of tractograms (.tck).')
p.add_argument('-f', '--force', action="store_true", help='overwrite existing output files.')
return p
def main():
parser = build_argparser()
args = parser.parse_args()
try:
nii = nib.load(args.anatomy)
except:
parser.error("Expecting anatomy image as first agument.")
for tractogram in args.tractograms:
if nib.streamlines.detect_format(tractogram) is not nib.streamlines.TckFile:
print("Skipping non TCK file: '{}'".format(tractogram))
continue
output_filename = tractogram[:-4] + '.trk'
if os.path.isfile(output_filename) and not args.force:
print("Skipping existing file: '{}'. Use -f to overwrite.".format(output_filename))
continue
header = {}
header[Field.VOXEL_TO_RASMM] = nii.affine.copy()
header[Field.VOXEL_SIZES] = nii.header.get_zooms()[:3]
header[Field.DIMENSIONS] = nii.shape[:3]
header[Field.VOXEL_ORDER] = "".join(aff2axcodes(nii.affine))
tck = nib.streamlines.load(tractogram)
nib.streamlines.save(tck.tractogram, output_filename, header=header)
if __name__ == '__main__':
main()
@ThomasHMAC
Copy link

Hi MarcCote,

I have used the tck2trk.py to convert tck to trk format, however, the track is not shown when I visualize it on trackvis. Would you happen to know why?

@MarcCote
Copy link
Author

MarcCote commented May 5, 2020

Hi @ThomasHMAC. That's strange.

You might want to give Dipy's StatefulTractogram (see https://dipy.org/documentation/1.0.0./examples_built/streamline_formats/) to load the tck, then save the tractogram as a trk. They do more checks than my script above. Otherwise, would you mind sharing the files with me?

@ThomasHMAC
Copy link

Hi MarcCote,

Thank you for the suggestion. I have tried again and both are seemed to provide consistent output. This time I was able to show my track generated from ROIs after couples of twist on trackvis GUI as opposed to whole-brain tractography.

Thanks again,

Thomas

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment