annotate fast_fiber_tracking.py @ 4:66b5ff1ff984 draft default tip

Uploaded
author greg
date Thu, 30 Nov 2017 09:15:19 -0500
parents 63aa79b5ebd6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
1 #!/usr/bin/env python
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
2 import argparse
3
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
3 import os
0
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
4 import shutil
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
5
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
6 from dipy.data import fetch_sherbrooke_3shell
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
7 from dipy.data import fetch_stanford_hardi
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
8 from dipy.data import get_sphere
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
9 from dipy.data import read_sherbrooke_3shell
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
10 from dipy.data import read_stanford_hardi
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
11 from dipy.direction import peaks_from_model
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
12 from dipy.io.image import save_nifti
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
13 from dipy.reconst.csdeconv import (ConstrainedSphericalDeconvModel, auto_response)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
14 from dipy.reconst.dti import TensorModel
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
15 from dipy.segment.mask import median_otsu
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
16 from dipy.tracking.local import LocalTracking, ThresholdTissueClassifier
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
17 from dipy.tracking.streamline import Streamlines
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
18 from dipy.tracking.utils import random_seeds_from_mask
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
19 from dipy.viz import actor, window
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
20
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
21 import numpy as np
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
22
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
23 parser = argparse.ArgumentParser()
3
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
24 parser.add_argument('--input', dest='input', help='Input dataset')
4
66b5ff1ff984 Uploaded
greg
parents: 3
diff changeset
25 parser.add_argument('--input_extra_files_path', dest='input_extra_files_path', help='Input dataset extra files paths')
0
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
26 parser.add_argument('--output_csd_direction_field', dest='output_csd_direction_field', help='Output csd direction field dataset')
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
27 parser.add_argument('--output_det_streamlines', dest='output_det_streamlines', help='Output det streamlines dataset')
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
28 parser.add_argument('--output_fa_map', dest='output_fa_map', help='Output fa map dataset')
3
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
29 parser.add_argument('--output_fa_map_files_path', dest='output_fa_map_files_path', help='Output fa map extra files path')
0
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
30
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
31 args = parser.parse_args()
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
32
3
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
33 def move_directory_files(source_dir, destination_dir, copy=False, remove_source_dir=False):
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
34 source_directory = os.path.abspath(source_dir)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
35 destination_directory = os.path.abspath(destination_dir)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
36 if not os.path.isdir(destination_directory):
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
37 os.makedirs(destination_directory)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
38 for dir_entry in os.listdir(source_directory):
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
39 source_entry = os.path.join(source_directory, dir_entry)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
40 if copy:
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
41 shutil.copy(source_entry, destination_directory)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
42 else:
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
43 shutil.move(source_entry, destination_directory)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
44 if remove_source_dir:
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
45 os.rmdir(source_directory)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
46
0
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
47 interactive = False
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
48
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
49 # Get input data.
3
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
50 # TODO: do not hard-code 'stanford_hardi'
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
51 input_dir = 'stanford_hardi'
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
52 os.mkdir(input_dir)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
53 for f in os.listdir(args.input_extra_files_path):
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
54 shutil.copy(os.path.join(args.input_extra_files_path, f), input_dir)
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
55 img, gtab = read_stanford_hardi()
0
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
56
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
57 data = img.get_data()
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
58 maskdata, mask = median_otsu(data, 3, 1, False, vol_idx=range(10, 50), dilate=2)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
59
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
60 response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
61 csd_model = ConstrainedSphericalDeconvModel(gtab, response)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
62 sphere = get_sphere('symmetric724')
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
63 csd_peaks = peaks_from_model(model=csd_model, data=data, sphere=sphere, mask=mask, relative_peak_threshold=.5, min_separation_angle=25, parallel=True)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
64
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
65 tensor_model = TensorModel(gtab, fit_method='WLS')
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
66 tensor_fit = tensor_model.fit(data, mask)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
67 fa = tensor_fit.fa
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
68
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
69 tissue_classifier = ThresholdTissueClassifier(fa, 0.1)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
70 seeds = random_seeds_from_mask(fa > 0.3, seeds_count=1)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
71
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
72 ren = window.Renderer()
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
73 ren.add(actor.peak_slicer(csd_peaks.peak_dirs, csd_peaks.peak_values, colors=None))
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
74 window.record(ren, out_path='csd_direction_field.png', size=(900, 900))
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
75 shutil.move('csd_direction_field.png', args.output_csd_direction_field)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
76
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
77 streamline_generator = LocalTracking(csd_peaks, tissue_classifier, seeds, affine=np.eye(4), step_size=0.5)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
78 streamlines = Streamlines(streamline_generator)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
79
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
80 ren.clear()
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
81 ren.add(actor.line(streamlines))
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
82 window.record(ren, out_path='det_streamlines.png', size=(900, 900))
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
83 shutil.move('det_streamlines.png', args.output_det_streamlines)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
84
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
85 save_nifti('fa_map.nii', fa, img.affine)
4e3d4331fa58 Uploaded
greg
parents:
diff changeset
86 shutil.move('fa_map.nii', args.output_fa_map)
3
63aa79b5ebd6 Uploaded
greg
parents: 0
diff changeset
87 move_directory_files(input_dir, args.output_fa_map_files_path, copy=True)