annotate dmri.py @ 33:b4c65a54aa7d draft

Uploaded
author greg
date Thu, 30 Nov 2017 09:53:30 -0500
parents 221c1fe8be2c
children 013144510199
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
1 #!/usr/bin/env python
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
2 import argparse
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
3 import os
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
4 import shutil
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
5
14
2b914b6a0c83 Uploaded
greg
parents: 12
diff changeset
6 from dipy.core.gradients import gradient_table
32
221c1fe8be2c Uploaded
greg
parents: 30
diff changeset
7 from dipy.data import fetch_sherbrooke_3shell, fetch_stanford_hardi, read_stanford_labels
14
2b914b6a0c83 Uploaded
greg
parents: 12
diff changeset
8 from dipy.io import read_bvals_bvecs
11
173c5c07b2f9 Uploaded
greg
parents: 10
diff changeset
9 from matplotlib import pyplot
0
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
10
26
65a365c8ca55 Uploaded
greg
parents: 24
diff changeset
11 import nibabel
65a365c8ca55 Uploaded
greg
parents: 24
diff changeset
12
0
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
13 parser = argparse.ArgumentParser()
21
53671fcb9507 Uploaded
greg
parents: 19
diff changeset
14 parser.add_argument('--drmi_dataset', dest='drmi_dataset', help='Input dataset')
30
6c1fd6d2c07e Uploaded
greg
parents: 28
diff changeset
15 parser.add_argument('--drmi_dataset_type', dest='drmi_dataset_type', help='Input dataset type')
18
f15d37b5efea Uploaded
greg
parents: 15
diff changeset
16 parser.add_argument('--output_nifti1', dest='output_nifti1', help='Output Nifti1 dataset')
28
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
17 parser.add_argument('--output_nifti1_extra_files', dest='output_nifti1_extra_files', help='Output Nifti1 extra files')
14
2b914b6a0c83 Uploaded
greg
parents: 12
diff changeset
18 parser.add_argument('--output_png', dest='output_png', help='Output dataset')
0
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
19
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
20 args = parser.parse_args()
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
21
28
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
22 def move_directory_files(source_dir, destination_dir, copy=False, remove_source_dir=False):
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
23 source_directory = os.path.abspath(source_dir)
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
24 destination_directory = os.path.abspath(destination_dir)
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
25 if not os.path.isdir(destination_directory):
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
26 os.makedirs(destination_directory)
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
27 for dir_entry in os.listdir(source_directory):
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
28 source_entry = os.path.join(source_directory, dir_entry)
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
29 if copy:
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
30 shutil.copy(source_entry, destination_directory)
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
31 else:
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
32 shutil.move(source_entry, destination_directory)
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
33 if remove_source_dir:
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
34 os.rmdir(source_directory)
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
35
9
cf847e9f1a3a Uploaded
greg
parents: 8
diff changeset
36 # Get input data.
21
53671fcb9507 Uploaded
greg
parents: 19
diff changeset
37 input_dir = args.drmi_dataset
30
6c1fd6d2c07e Uploaded
greg
parents: 28
diff changeset
38 #if input_dir == 'stanford_hardi':
6c1fd6d2c07e Uploaded
greg
parents: 28
diff changeset
39 if args.drmi_dataset_type == "dataset":
28
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
40 fetch_stanford_hardi()
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
41 fdwi = os.path.join(input_dir, 'HARDI150.nii.gz')
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
42 fbval = os.path.join(input_dir, 'HARDI150.bval')
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
43 fbvec = os.path.join(input_dir, 'HARDI150.bvec')
30
6c1fd6d2c07e Uploaded
greg
parents: 28
diff changeset
44 img = nibabel.load(fdwi)
6c1fd6d2c07e Uploaded
greg
parents: 28
diff changeset
45 else:
6c1fd6d2c07e Uploaded
greg
parents: 28
diff changeset
46 img, gtab, labels = read_stanford_labels()
33
b4c65a54aa7d Uploaded
greg
parents: 32
diff changeset
47 fdwi = os.path.join(input_dir, 'HARDI150.nii.gz')
b4c65a54aa7d Uploaded
greg
parents: 32
diff changeset
48 fbval = os.path.join(input_dir, 'HARDI150.bval')
b4c65a54aa7d Uploaded
greg
parents: 32
diff changeset
49 fbvec = os.path.join(input_dir, 'HARDI150.bvec')
b4c65a54aa7d Uploaded
greg
parents: 32
diff changeset
50
0
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
51 data = img.get_data()
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
52 # data is a 4D array where the first 3 dimensions are the i, j,
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
53 # k voxel coordinates and the last dimension is the number of
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
54 # non-weighted (S0s) and diffusion-weighted volumes.
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
55 # Visualize the results using matplotlib.
94f6b3e28c36 Uploaded
greg
parents:
diff changeset
56 axial_middle = data.shape[2] // 2
11
173c5c07b2f9 Uploaded
greg
parents: 10
diff changeset
57 pyplot.subplot(1, 2, 1).set_axis_off()
173c5c07b2f9 Uploaded
greg
parents: 10
diff changeset
58 pyplot.imshow(data[:, :, axial_middle, 0].T, cmap='gray', origin='lower')
173c5c07b2f9 Uploaded
greg
parents: 10
diff changeset
59 pyplot.subplot(1, 2, 2).set_axis_off()
173c5c07b2f9 Uploaded
greg
parents: 10
diff changeset
60 pyplot.imshow(data[:, :, axial_middle, 10].T, cmap='gray', origin='lower')
12
1467f96db74a Uploaded
greg
parents: 11
diff changeset
61 pyplot.savefig('data.png', bbox_inches='tight')
14
2b914b6a0c83 Uploaded
greg
parents: 12
diff changeset
62 shutil.move('data.png', args.output_png)
2b914b6a0c83 Uploaded
greg
parents: 12
diff changeset
63 # Load the b-values and b-vectors.
2b914b6a0c83 Uploaded
greg
parents: 12
diff changeset
64 bvals, bvecs = read_bvals_bvecs(fbval, fbvec)
2b914b6a0c83 Uploaded
greg
parents: 12
diff changeset
65 gtab = gradient_table(bvals, bvecs)
18
f15d37b5efea Uploaded
greg
parents: 15
diff changeset
66 # gtab can be used to tell what part of the data is the S0
f15d37b5efea Uploaded
greg
parents: 15
diff changeset
67 # volumes (volumes which correspond to b-values of 0).
f15d37b5efea Uploaded
greg
parents: 15
diff changeset
68 S0s = data[:, :, :, gtab.b0s_mask]
f15d37b5efea Uploaded
greg
parents: 15
diff changeset
69 # Save this in a new Nifti file.
19
3938c3299e7b Uploaded
greg
parents: 18
diff changeset
70 nibabel.save(nibabel.Nifti1Image(S0s, img.affine), 'output.nii')
3938c3299e7b Uploaded
greg
parents: 18
diff changeset
71 shutil.move('output.nii', args.output_nifti1)
28
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
72 # Move the entire contents of input_dir to output_nifti1_extra_files.
6e7ed2b633dc Uploaded
greg
parents: 26
diff changeset
73 move_directory_files(input_dir, args.output_nifti1_extra_files)