Mercurial > repos > greg > create_streamlines
comparison create_streamlines.py @ 12:883327c42970 draft
Uploaded
| author | greg | 
|---|---|
| date | Thu, 30 Nov 2017 10:11:00 -0500 | 
| parents | 1f1fdfe9ac4d | 
| children | ab72c2d00e5a | 
   comparison
  equal
  deleted
  inserted
  replaced
| 11:7b98048e1904 | 12:883327c42970 | 
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 2 import argparse | 2 import argparse | 
| 3 import os | |
| 3 import shutil | 4 import shutil | 
| 4 | 5 | 
| 5 from dipy.data import fetch_stanford_t1, read_stanford_labels, read_stanford_t1 | |
| 6 from dipy.reconst import peaks, shm | 6 from dipy.reconst import peaks, shm | 
| 7 from dipy.tracking import utils | 7 from dipy.tracking import utils | 
| 8 from dipy.tracking.eudx import EuDX | 8 from dipy.tracking.eudx import EuDX | 
| 9 from dipy.viz import fvtk | 9 from dipy.viz import fvtk | 
| 10 from dipy.viz.colormap import line_colors | 10 from dipy.viz.colormap import line_colors | 
| 14 import nibabel as nib | 14 import nibabel as nib | 
| 15 | 15 | 
| 16 import numpy as np | 16 import numpy as np | 
| 17 | 17 | 
| 18 parser = argparse.ArgumentParser() | 18 parser = argparse.ArgumentParser() | 
| 19 parser.add_argument('--drmi_dataset', dest='drmi_dataset', help='Input dataset') | 19 parser.add_argument('--input', dest='input', help='Input dataset') | 
| 20 parser.add_argument('--input_extra_files_path', dest='input_extra_files_path', help='Input dataset extra files paths') | |
| 20 parser.add_argument('--output_superiorfrontal_nifti', dest='output_superiorfrontal_nifti', help='Output superiorfrontal nifti1 dataset') | 21 parser.add_argument('--output_superiorfrontal_nifti', dest='output_superiorfrontal_nifti', help='Output superiorfrontal nifti1 dataset') | 
| 22 parser.add_argument('--output_superiorfrontal_nifti_files_path', dest='output_superiorfrontal_nifti_files_path', help='Output superiorfrontal nifti1 extra files path') | |
| 21 parser.add_argument('--output_trackvis_header', dest='output_trackvis_header', help='Output superiorfrontal track visualization header dataset') | 23 parser.add_argument('--output_trackvis_header', dest='output_trackvis_header', help='Output superiorfrontal track visualization header dataset') | 
| 22 | 24 | 
| 23 args = parser.parse_args() | 25 args = parser.parse_args() | 
| 24 | 26 | 
| 25 hardi_img, gtab, labels_img = read_stanford_labels() | 27 def move_directory_files(source_dir, destination_dir, copy=False, remove_source_dir=False): | 
| 28 source_directory = os.path.abspath(source_dir) | |
| 29 destination_directory = os.path.abspath(destination_dir) | |
| 30 if not os.path.isdir(destination_directory): | |
| 31 os.makedirs(destination_directory) | |
| 32 for dir_entry in os.listdir(source_directory): | |
| 33 source_entry = os.path.join(source_directory, dir_entry) | |
| 34 if copy: | |
| 35 shutil.copy(source_entry, destination_directory) | |
| 36 else: | |
| 37 shutil.move(source_entry, destination_directory) | |
| 38 if remove_source_dir: | |
| 39 os.rmdir(source_directory) | |
| 40 | |
| 41 # Get input data. | |
| 42 # TODO: do not hard-code 'stanford_hardi' | |
| 43 input_dir = 'stanford_hardi' | |
| 44 os.mkdir(input_dir) | |
| 45 for f in os.listdir(args.input_extra_files_path): | |
| 46 shutil.copy(os.path.join(args.input_extra_files_path, f), input_dir) | |
| 47 hard_img, gtab = read_stanford_hardi() | |
| 26 data = hardi_img.get_data() | 48 data = hardi_img.get_data() | 
| 49 labels_file = os.path.join(input_dir, "aparc-reduced.nii.gz") | |
| 50 labels_img = nib.load(labels_file) | |
| 27 labels = labels_img.get_data() | 51 labels = labels_img.get_data() | 
| 28 | 52 | 
| 29 # For possible later use: if args.drmi_dataset == 'stanford_t1': | |
| 30 #fetch_stanford_t1() | |
| 31 #t1 = read_stanford_t1() | |
| 32 #t1_data = t1.get_data() | |
| 33 white_matter = (labels == 1) | (labels == 2) | 53 white_matter = (labels == 1) | (labels == 2) | 
| 34 csamodel = shm.CsaOdfModel(gtab, 6) | 54 csamodel = shm.CsaOdfModel(gtab, 6) | 
| 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) | 55 csapeaks = peaks.peaks_from_model(model=csamodel, data=data, sphere=peaks.default_sphere, relative_peak_threshold=.8, min_separation_angle=45, mask=white_matter) | 
| 36 seeds = utils.seeds_from_mask(white_matter, density=2) | 56 seeds = utils.seeds_from_mask(white_matter, density=2) | 
| 37 streamline_generator = EuDX(csapeaks.peak_values, csapeaks.peak_indices, odf_vertices=peaks.default_sphere.vertices, a_low=.05, step_sz=.5, seeds=seeds) | 57 streamline_generator = EuDX(csapeaks.peak_values, csapeaks.peak_indices, odf_vertices=peaks.default_sphere.vertices, a_low=.05, step_sz=.5, seeds=seeds) | 
| 38 affine = streamline_generator.affine | 58 affine = streamline_generator.affine | 
| 39 streamlines = list(streamline_generator) | 59 streamlines = list(streamline_generator) | 
| 40 cc_slice = labels == 2 | 60 cc_slice = labels == 2 | 
| 41 cc_streamlines = utils.target(streamlines, cc_slice, affine=affine) | 61 cc_streamlines = utils.target(streamlines, cc_slice, affine=affine) | 
| 42 cc_streamlines = list(cc_streamlines) | 62 cc_streamlines = list(cc_streamlines) | 
| 43 #other_streamlines = utils.target(streamlines, cc_slice, affine=affine, include=False) | 63 | 
| 44 #other_streamlines = list(other_streamlines) | |
| 45 #assert len(other_streamlines) + len(cc_streamlines) == len(streamlines) | |
| 46 ## Make display objects | |
| 47 #color = line_colors(cc_streamlines) | |
| 48 #cc_streamlines_actor = fvtk.line(cc_streamlines, line_colors(cc_streamlines)) | |
| 49 #cc_ROI_actor = fvtk.contour(cc_slice, levels=[1], colors=[(1., 1., 0.)], opacities=[1.]) | |
| 50 #vol_actor = fvtk.slicer(t1_data) | |
| 51 #vol_actor.display(40, None, None) | |
| 52 #vol_actor2 = vol_actor.copy() | |
| 53 #vol_actor2.display(None, None, 35) | |
| 54 ## Add display objects to canvas | |
| 55 #r = fvtk.ren() | |
| 56 #fvtk.add(r, vol_actor) | |
| 57 #fvtk.add(r, vol_actor2) | |
| 58 #fvtk.add(r, cc_streamlines_actor) | |
| 59 #fvtk.add(r, cc_ROI_actor) | |
| 60 ## Save figures | |
| 61 #fvtk.record(r, n_frames=1, out_path="corpuscallosum_axial.png", size=(800, 800)) | |
| 62 #shutil.move("corpuscallosum_axial.png", args.output_corpuscallosum_axial) | |
| 63 #fvtk.camera(r, [-1, 0, 0], [0, 0, 0], viewup=[0, 0, 1]) | |
| 64 #fvtk.record(r, n_frames=1, out_path="corpuscallosum_sagittal.png", size=(800, 800)) | |
| 65 #shutil.move("corpuscallosum_sagittal.png", args.output_corpuscallosum_sagittal) | |
| 66 M, grouping = utils.connectivity_matrix(cc_streamlines, labels, affine=affine, return_mapping=True, mapping_as_streamlines=True) | |
| 67 #M[:3, :] = 0 | |
| 68 #M[:, :3] = 0 | |
| 69 #plt.imshow(np.log1p(M), interpolation='nearest') | |
| 70 #plt.savefig("connectivity.png") | |
| 71 #shutil.move("connectivity.png", args.output_connectivity) | |
| 72 lr_superiorfrontal_track = grouping[11, 54] | 64 lr_superiorfrontal_track = grouping[11, 54] | 
| 73 shape = labels.shape | 65 shape = labels.shape | 
| 74 dm = utils.density_map(lr_superiorfrontal_track, shape, affine=affine) | 66 dm = utils.density_map(lr_superiorfrontal_track, shape, affine=affine) | 
| 75 # Save density map | 67 # Save density map | 
| 76 dm_img = nib.Nifti1Image(dm.astype("int16"), hardi_img.affine) | 68 dm_img = nib.Nifti1Image(dm.astype("int16"), hardi_img.affine) | 
| 77 dm_img.to_filename("lr-superiorfrontal-dm.nii") | 69 dm_img.to_filename("lr-superiorfrontal-dm.nii") | 
| 78 shutil.move('lr-superiorfrontal-dm.nii', args.output_superiorfrontal_nifti) | 70 shutil.move('lr-superiorfrontal-dm.nii', args.output_superiorfrontal_nifti) | 
| 71 move_directory_files(input_dir, args.output_superiorfrontal_nifti_files_path) | |
| 72 | |
| 79 # Make a trackvis header so we can save streamlines | 73 # Make a trackvis header so we can save streamlines | 
| 80 voxel_size = labels_img.header.get_zooms() | 74 voxel_size = labels_img.header.get_zooms() | 
| 81 trackvis_header = nib.trackvis.empty_header() | 75 trackvis_header = nib.trackvis.empty_header() | 
| 82 trackvis_header['voxel_size'] = voxel_size | 76 trackvis_header['voxel_size'] = voxel_size | 
| 83 trackvis_header['dim'] = shape | 77 trackvis_header['dim'] = shape | 
