annotate create_streamlines.py @ 8:1f1fdfe9ac4d draft

Uploaded
author greg
date Wed, 29 Nov 2017 13:43:15 -0500
parents 606a712b6322
children 883327c42970
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1c5508f627ec Uploaded
greg
parents:
diff changeset
1 #!/usr/bin/env python
1c5508f627ec Uploaded
greg
parents:
diff changeset
2 import argparse
1c5508f627ec Uploaded
greg
parents:
diff changeset
3 import shutil
1c5508f627ec Uploaded
greg
parents:
diff changeset
4
1c5508f627ec Uploaded
greg
parents:
diff changeset
5 from dipy.data import fetch_stanford_t1, read_stanford_labels, read_stanford_t1
1c5508f627ec Uploaded
greg
parents:
diff changeset
6 from dipy.reconst import peaks, shm
1c5508f627ec Uploaded
greg
parents:
diff changeset
7 from dipy.tracking import utils
1c5508f627ec Uploaded
greg
parents:
diff changeset
8 from dipy.tracking.eudx import EuDX
1c5508f627ec Uploaded
greg
parents:
diff changeset
9 from dipy.viz import fvtk
1c5508f627ec Uploaded
greg
parents:
diff changeset
10 from dipy.viz.colormap import line_colors
1c5508f627ec Uploaded
greg
parents:
diff changeset
11
1c5508f627ec Uploaded
greg
parents:
diff changeset
12 import matplotlib.pyplot as plt
1c5508f627ec Uploaded
greg
parents:
diff changeset
13
1c5508f627ec Uploaded
greg
parents:
diff changeset
14 import nibabel as nib
1c5508f627ec Uploaded
greg
parents:
diff changeset
15
1c5508f627ec Uploaded
greg
parents:
diff changeset
16 import numpy as np
1c5508f627ec Uploaded
greg
parents:
diff changeset
17
1c5508f627ec Uploaded
greg
parents:
diff changeset
18 parser = argparse.ArgumentParser()
1c5508f627ec Uploaded
greg
parents:
diff changeset
19 parser.add_argument('--drmi_dataset', dest='drmi_dataset', help='Input dataset')
1c5508f627ec Uploaded
greg
parents:
diff changeset
20 parser.add_argument('--output_superiorfrontal_nifti', dest='output_superiorfrontal_nifti', help='Output superiorfrontal nifti1 dataset')
1c5508f627ec Uploaded
greg
parents:
diff changeset
21 parser.add_argument('--output_trackvis_header', dest='output_trackvis_header', help='Output superiorfrontal track visualization header dataset')
1c5508f627ec Uploaded
greg
parents:
diff changeset
22
1c5508f627ec Uploaded
greg
parents:
diff changeset
23 args = parser.parse_args()
1c5508f627ec Uploaded
greg
parents:
diff changeset
24
1c5508f627ec Uploaded
greg
parents:
diff changeset
25 hardi_img, gtab, labels_img = read_stanford_labels()
1c5508f627ec Uploaded
greg
parents:
diff changeset
26 data = hardi_img.get_data()
1c5508f627ec Uploaded
greg
parents:
diff changeset
27 labels = labels_img.get_data()
1c5508f627ec Uploaded
greg
parents:
diff changeset
28
3
51263bfe7b2c Uploaded
greg
parents: 0
diff changeset
29 # For possible later use: if args.drmi_dataset == 'stanford_t1':
8
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
30 #fetch_stanford_t1()
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
31 #t1 = read_stanford_t1()
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
32 #t1_data = t1.get_data()
0
1c5508f627ec Uploaded
greg
parents:
diff changeset
33 white_matter = (labels == 1) | (labels == 2)
1c5508f627ec Uploaded
greg
parents:
diff changeset
34 csamodel = shm.CsaOdfModel(gtab, 6)
1c5508f627ec Uploaded
greg
parents:
diff changeset
35 csapeaks = peaks.peaks_from_model(model=csamodel, data=data, sphere=peaks.default_sphere, relative_peak_threshold=.8, min_separation_angle=45, mask=white_matter)
1c5508f627ec Uploaded
greg
parents:
diff changeset
36 seeds = utils.seeds_from_mask(white_matter, density=2)
1c5508f627ec Uploaded
greg
parents:
diff changeset
37 streamline_generator = EuDX(csapeaks.peak_values, csapeaks.peak_indices, odf_vertices=peaks.default_sphere.vertices, a_low=.05, step_sz=.5, seeds=seeds)
1c5508f627ec Uploaded
greg
parents:
diff changeset
38 affine = streamline_generator.affine
1c5508f627ec Uploaded
greg
parents:
diff changeset
39 streamlines = list(streamline_generator)
1c5508f627ec Uploaded
greg
parents:
diff changeset
40 cc_slice = labels == 2
1c5508f627ec Uploaded
greg
parents:
diff changeset
41 cc_streamlines = utils.target(streamlines, cc_slice, affine=affine)
1c5508f627ec Uploaded
greg
parents:
diff changeset
42 cc_streamlines = list(cc_streamlines)
8
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
43 #other_streamlines = utils.target(streamlines, cc_slice, affine=affine, include=False)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
44 #other_streamlines = list(other_streamlines)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
45 #assert len(other_streamlines) + len(cc_streamlines) == len(streamlines)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
46 ## Make display objects
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
47 #color = line_colors(cc_streamlines)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
48 #cc_streamlines_actor = fvtk.line(cc_streamlines, line_colors(cc_streamlines))
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
49 #cc_ROI_actor = fvtk.contour(cc_slice, levels=[1], colors=[(1., 1., 0.)], opacities=[1.])
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
50 #vol_actor = fvtk.slicer(t1_data)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
51 #vol_actor.display(40, None, None)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
52 #vol_actor2 = vol_actor.copy()
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
53 #vol_actor2.display(None, None, 35)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
54 ## Add display objects to canvas
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
55 #r = fvtk.ren()
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
56 #fvtk.add(r, vol_actor)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
57 #fvtk.add(r, vol_actor2)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
58 #fvtk.add(r, cc_streamlines_actor)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
59 #fvtk.add(r, cc_ROI_actor)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
60 ## Save figures
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
61 #fvtk.record(r, n_frames=1, out_path="corpuscallosum_axial.png", size=(800, 800))
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
62 #shutil.move("corpuscallosum_axial.png", args.output_corpuscallosum_axial)
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
63 #fvtk.camera(r, [-1, 0, 0], [0, 0, 0], viewup=[0, 0, 1])
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
64 #fvtk.record(r, n_frames=1, out_path="corpuscallosum_sagittal.png", size=(800, 800))
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
65 #shutil.move("corpuscallosum_sagittal.png", args.output_corpuscallosum_sagittal)
0
1c5508f627ec Uploaded
greg
parents:
diff changeset
66 M, grouping = utils.connectivity_matrix(cc_streamlines, labels, affine=affine, return_mapping=True, mapping_as_streamlines=True)
8
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
67 #M[:3, :] = 0
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
68 #M[:, :3] = 0
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
69 #plt.imshow(np.log1p(M), interpolation='nearest')
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
70 #plt.savefig("connectivity.png")
1f1fdfe9ac4d Uploaded
greg
parents: 6
diff changeset
71 #shutil.move("connectivity.png", args.output_connectivity)
0
1c5508f627ec Uploaded
greg
parents:
diff changeset
72 lr_superiorfrontal_track = grouping[11, 54]
1c5508f627ec Uploaded
greg
parents:
diff changeset
73 shape = labels.shape
1c5508f627ec Uploaded
greg
parents:
diff changeset
74 dm = utils.density_map(lr_superiorfrontal_track, shape, affine=affine)
1c5508f627ec Uploaded
greg
parents:
diff changeset
75 # Save density map
1c5508f627ec Uploaded
greg
parents:
diff changeset
76 dm_img = nib.Nifti1Image(dm.astype("int16"), hardi_img.affine)
1c5508f627ec Uploaded
greg
parents:
diff changeset
77 dm_img.to_filename("lr-superiorfrontal-dm.nii")
1c5508f627ec Uploaded
greg
parents:
diff changeset
78 shutil.move('lr-superiorfrontal-dm.nii', args.output_superiorfrontal_nifti)
1c5508f627ec Uploaded
greg
parents:
diff changeset
79 # Make a trackvis header so we can save streamlines
1c5508f627ec Uploaded
greg
parents:
diff changeset
80 voxel_size = labels_img.header.get_zooms()
1c5508f627ec Uploaded
greg
parents:
diff changeset
81 trackvis_header = nib.trackvis.empty_header()
1c5508f627ec Uploaded
greg
parents:
diff changeset
82 trackvis_header['voxel_size'] = voxel_size
1c5508f627ec Uploaded
greg
parents:
diff changeset
83 trackvis_header['dim'] = shape
1c5508f627ec Uploaded
greg
parents:
diff changeset
84 trackvis_header['voxel_order'] = "RAS"
1c5508f627ec Uploaded
greg
parents:
diff changeset
85 # Move streamlines to "trackvis space"
1c5508f627ec Uploaded
greg
parents:
diff changeset
86 trackvis_point_space = utils.affine_for_trackvis(voxel_size)
1c5508f627ec Uploaded
greg
parents:
diff changeset
87 lr_sf_trk = utils.move_streamlines(lr_superiorfrontal_track, trackvis_point_space, input_space=affine)
1c5508f627ec Uploaded
greg
parents:
diff changeset
88 lr_sf_trk = list(lr_sf_trk)
1c5508f627ec Uploaded
greg
parents:
diff changeset
89 # Save streamlines
1c5508f627ec Uploaded
greg
parents:
diff changeset
90 for_save = [(sl, None, None) for sl in lr_sf_trk]
1c5508f627ec Uploaded
greg
parents:
diff changeset
91 nib.trackvis.write("lr-superiorfrontal.trk", for_save, trackvis_header)
1c5508f627ec Uploaded
greg
parents:
diff changeset
92 shutil.move('lr-superiorfrontal.trk', args.output_trackvis_header)