Mercurial > repos > greg > diffusion_signal_reconstruction
comparison diffusion_signal_reconstruction.py @ 9:dc700deb06c1 draft
Uploaded
author | greg |
---|---|
date | Thu, 30 Nov 2017 08:30:06 -0500 |
parents | 85df19d98cd0 |
children | 7bcc39c8ccfd |
comparison
equal
deleted
inserted
replaced
8:0c3f09c848be | 9:dc700deb06c1 |
---|---|
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_sherbrooke_3shell | 6 from dipy.data import fetch_sherbrooke_3shell |
6 from dipy.data import fetch_stanford_hardi | 7 from dipy.data import fetch_stanford_hardi |
7 from dipy.data import get_sphere | 8 from dipy.data import get_sphere |
17 import nibabel | 18 import nibabel |
18 import numpy | 19 import numpy |
19 | 20 |
20 # http://nipy.org/dipy/examples_built/reconst_dti.html#example-reconst-dti | 21 # http://nipy.org/dipy/examples_built/reconst_dti.html#example-reconst-dti |
21 parser = argparse.ArgumentParser() | 22 parser = argparse.ArgumentParser() |
22 parser.add_argument('--drmi_dataset', dest='drmi_dataset', help='Input dataset') | 23 parser.add_argument('--input', dest='input', help='Input dataset') |
24 parser.add_argument('--input_extra_files_path', dest='input_extra_files_path', help='Input dataset extra files path') | |
23 parser.add_argument('--output_nifti1_fa', dest='output_nifti1_fa', help='Output fractional anisotropy Nifti1 dataset') | 25 parser.add_argument('--output_nifti1_fa', dest='output_nifti1_fa', help='Output fractional anisotropy Nifti1 dataset') |
26 parser.add_argument('--output_nifti1_fa_files_path', dest='output_nifti1_fa_files_path', help='Output fractional anisotropy Nifti1 extra files path') | |
24 parser.add_argument('--output_nifti1_evecs', dest='output_nifti1_evecs', help='Output eigen vectors Nifti1 dataset') | 27 parser.add_argument('--output_nifti1_evecs', dest='output_nifti1_evecs', help='Output eigen vectors Nifti1 dataset') |
28 parser.add_argument('--output_nifti1_evecs_files_path', dest='output_nifti1_evecs_files_path', help='Output eigen vectors Nifti1 extra files path') | |
25 parser.add_argument('--output_nifti1_md', dest='output_nifti1_md', help='Output mean diffusivity Nifti1 dataset') | 29 parser.add_argument('--output_nifti1_md', dest='output_nifti1_md', help='Output mean diffusivity Nifti1 dataset') |
30 parser.add_argument('--output_nifti1_md_files_path', dest='output_nifti1_md_files_path', help='Output mean diffusivity Nifti1 extra files path') | |
26 parser.add_argument('--output_nifti1_rgb', dest='output_nifti1_rgb', help='Output RGB-map Nifti1 dataset') | 31 parser.add_argument('--output_nifti1_rgb', dest='output_nifti1_rgb', help='Output RGB-map Nifti1 dataset') |
32 parser.add_argument('--output_nifti1_rgb_files_path', dest='output_nifti1_rgb_files_path', help='Output RGB-map Nifti1 extra files path') | |
27 parser.add_argument('--output_png_ellipsoids', dest='output_png_ellipsoids', help='Output ellipsoids PNG dataset') | 33 parser.add_argument('--output_png_ellipsoids', dest='output_png_ellipsoids', help='Output ellipsoids PNG dataset') |
28 parser.add_argument('--output_png_odfs', dest='output_png_odfs', help='Output orientation distribution functions PNG dataset') | 34 parser.add_argument('--output_png_odfs', dest='output_png_odfs', help='Output orientation distribution functions PNG dataset') |
29 parser.add_argument('--output_png_middle_axial_slice', dest='output_png_middle_axial_slice', help='Output middle axial slice PNG dataset') | 35 parser.add_argument('--output_png_middle_axial_slice', dest='output_png_middle_axial_slice', help='Output middle axial slice PNG dataset') |
30 | 36 |
31 args = parser.parse_args() | 37 args = parser.parse_args() |
32 | 38 |
39 def move_directory_files(source_dir, destination_dir, copy=False, remove_source_dir=False): | |
40 source_directory = os.path.abspath(source_dir) | |
41 destination_directory = os.path.abspath(destination_dir) | |
42 if not os.path.isdir(destination_directory): | |
43 os.makedirs(destination_directory) | |
44 for dir_entry in os.listdir(source_directory): | |
45 source_entry = os.path.join(source_directory, dir_entry) | |
46 if copy: | |
47 shutil.copy(source_entry, destination_directory) | |
48 else: | |
49 shutil.move(source_entry, destination_directory) | |
50 if remove_source_dir: | |
51 os.rmdir(source_directory) | |
52 | |
33 # Get input data. | 53 # Get input data. |
54 # TODO: do not hard-code 'stanford_hardi' | |
55 input_dir = 'stanford_hardi' | |
56 os.mkdir(input_dir) | |
34 input_dir = args.drmi_dataset | 57 input_dir = args.drmi_dataset |
35 if input_dir == 'sherbrooke_3shell': | 58 for f in os.list_dir(args.input_extra_files_path): |
36 fetch_sherbrooke_3shell() | 59 shutil.copy(f, input_dir) |
37 img, gtab = read_sherbrooke_3shell() | 60 fetch_stanford_hardi() |
38 elif input_dir == 'stanford_hardi': | 61 img, gtab = read_stanford_hardi() |
39 fetch_stanford_hardi() | |
40 img, gtab = read_stanford_hardi() | |
41 | 62 |
42 data = img.get_data() | 63 data = img.get_data() |
43 maskdata, mask = median_otsu(data, 3, 1, True, vol_idx=range(10, 50), dilate=2) | 64 maskdata, mask = median_otsu(data, 3, 1, True, vol_idx=range(10, 50), dilate=2) |
44 | 65 |
45 axial_middle = data.shape[2] // 2 | 66 axial_middle = data.shape[2] // 2 |
56 fa = fractional_anisotropy(tenfit.evals) | 77 fa = fractional_anisotropy(tenfit.evals) |
57 fa[numpy.isnan(fa)] = 0 | 78 fa[numpy.isnan(fa)] = 0 |
58 fa_img = nibabel.Nifti1Image(fa.astype(numpy.float32), img.affine) | 79 fa_img = nibabel.Nifti1Image(fa.astype(numpy.float32), img.affine) |
59 nibabel.save(fa_img, 'output_fa.nii') | 80 nibabel.save(fa_img, 'output_fa.nii') |
60 shutil.move('output_fa.nii', args.output_nifti1_fa) | 81 shutil.move('output_fa.nii', args.output_nifti1_fa) |
82 move_directory_files(input_dir, args.output_nifti1_fa_files_path) | |
61 | 83 |
62 evecs_img = nibabel.Nifti1Image(tenfit.evecs.astype(numpy.float32), img.affine) | 84 evecs_img = nibabel.Nifti1Image(tenfit.evecs.astype(numpy.float32), img.affine) |
63 nibabel.save(evecs_img, 'output_evecs.nii') | 85 nibabel.save(evecs_img, 'output_evecs.nii') |
64 shutil.move('output_evecs.nii', args.output_nifti1_evecs) | 86 shutil.move('output_evecs.nii', args.output_nifti1_evecs) |
87 move_directory_files(input_dir, args.output_nifti1_evecs_files_path) | |
65 | 88 |
66 md1 = dti.mean_diffusivity(tenfit.evals) | 89 md1 = dti.mean_diffusivity(tenfit.evals) |
67 nibabel.save(nibabel.Nifti1Image(md1.astype(numpy.float32), img.affine), 'output_md.nii') | 90 nibabel.save(nibabel.Nifti1Image(md1.astype(numpy.float32), img.affine), 'output_md.nii') |
68 shutil.move('output_md.nii', args.output_nifti1_md) | 91 shutil.move('output_md.nii', args.output_nifti1_md) |
92 move_directory_files(input_dir, args.output_nifti1_md_files_path) | |
69 | 93 |
70 fa = numpy.clip(fa, 0, 1) | 94 fa = numpy.clip(fa, 0, 1) |
71 rgb = color_fa(fa, tenfit.evecs) | 95 rgb = color_fa(fa, tenfit.evecs) |
72 nibabel.save(nibabel.Nifti1Image(numpy.array(255 * rgb, 'uint8'), img.affine), 'output_rgb.nii') | 96 nibabel.save(nibabel.Nifti1Image(numpy.array(255 * rgb, 'uint8'), img.affine), 'output_rgb.nii') |
73 shutil.move('output_rgb.nii', args.output_nifti1_rgb) | 97 shutil.move('output_rgb.nii', args.output_nifti1_rgb) |
98 move_directory_files(input_dir, args.output_nifti1_rgb_files_path) | |
74 | 99 |
75 sphere = get_sphere('symmetric724') | 100 sphere = get_sphere('symmetric724') |
76 ren = fvtk.ren() | 101 ren = fvtk.ren() |
77 | 102 |
78 evals = tenfit.evals[13:43, 44:74, 28:29] | 103 evals = tenfit.evals[13:43, 44:74, 28:29] |