Skip to content

Commit 81d339c

Browse files
committed
Merge branch 'shuo_fixed_colors'
2 parents 6b07887 + c8ec569 commit 81d339c

File tree

5 files changed

+123
-8
lines changed

5 files changed

+123
-8
lines changed

colors_script/calc_colormap.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
5+
import os
6+
import argparse
7+
import numpy as np
8+
9+
from mindboggle.mio.colors import distinguishable_colors, label_adjacency_matrix
10+
11+
12+
if __name__ == "__main__":
13+
14+
description = ('calculate colormap for labeled image;'
15+
'calculated result is stored in output_dirname/colors.npy')
16+
parser = argparse.ArgumentParser(description=description)
17+
parser.add_argument('label_filename', help='path to the label image')
18+
parser.add_argument('output_dirname', help='path to the folder storing '
19+
'temporary files and result')
20+
parser.add_argument('-v', '--verbose', action='store_true', default=False)
21+
args = parser.parse_args()
22+
23+
if not os.path.isdir(args.output_dirname):
24+
os.makedirs(args.output_dirname)
25+
26+
matrix_filename = os.path.join(args.output_dirname, 'matrix.npy')
27+
colormap_filename = os.path.join(args.output_dirname, 'colormap.npy')
28+
labels_filename = os.path.join(args.output_dirname, 'labels.npy')
29+
colors_filename = os.path.join(args.output_dirname, 'colors.npy')
30+
31+
if args.verbose:
32+
print('finding adjacency maps...')
33+
34+
if not os.path.isfile(matrix_filename) or \
35+
not os.path.isfile(labels_filename):
36+
labels, matrix = label_adjacency_matrix(args.label_filename,
37+
out_dir=args.output_dirname)[:2]
38+
matrix = matrix.as_matrix()[:, 1:]
39+
np.save(matrix_filename, matrix)
40+
np.save(labels_filename, labels)
41+
else:
42+
labels = np.load(labels_filename)
43+
matrix = np.load(matrix_filename)
44+
45+
if args.verbose:
46+
print('finding colormap...')
47+
48+
if not os.path.isfile(colormap_filename):
49+
num_colors = len(labels)
50+
colormap = distinguishable_colors(ncolors=num_colors,
51+
plot_colormap=False,
52+
save_csv=False,
53+
out_dir=args.output_dirname)
54+
np.save(colormap_filename, colormap)
55+
else:
56+
colormap = np.load(colormap_filename)
57+
58+
if args.verbose:
59+
print('finding label colors')
60+
61+
if not os.path.isfile(colors_filename):
62+
label_colors = colors.group_colors(colormap,
63+
args.label_filename,
64+
IDs=labels,
65+
adjacency_matrix=matrix,
66+
out_dir=args.output_dirname,
67+
plot_colors=False,
68+
plot_graphs=False)
69+
np.save(colors_filename, label_colors)

colors_script/convert_to_mipav_lut.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
import numpy as np
5+
import argparse
6+
7+
def parse_inputs():
8+
des = 'convert colormap to mipav lut file.'
9+
parser = argparse.ArgumentParser(description=des)
10+
parser.add_argument('colormap_filename')
11+
parser.add_argument('ids_filename')
12+
parser.add_argument('output_filename')
13+
args = parser.parse_args()
14+
return args
15+
16+
def main(args):
17+
18+
labels = np.load(args.ids_filename)
19+
colors = np.load(args.colormap_filename) * 255
20+
21+
contents = list()
22+
contents.append('<LUT>')
23+
contents.append('256\t# Size of LUT Arrays')
24+
25+
for i in range(256):
26+
if i in labels:
27+
idx = np.where(labels == i)[0][0]
28+
c = colors[idx].tolist()
29+
else:
30+
c = [0.0, 0.0, 0.0]
31+
c_str = [str(cc) for cc in c]
32+
line = '\t'.join([str(i), '1.0', *c_str])
33+
contents.append(line)
34+
35+
with open(args.output_filename, 'w') as file:
36+
file.write('\n'.join(contents))
37+
38+
39+
if __name__ == "__main__":
40+
args = parse_inputs()
41+
main(args)

mindboggle/mio/colors.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
1010
"""
1111

12+
import os
1213

1314
def distinguishable_colors(ncolors, backgrounds=[[0,0,0],[1,1,1]],
14-
save_csv=True, plot_colormap=True, verbose=True):
15+
save_csv=True, plot_colormap=True, verbose=True,
16+
out_dir='.'):
1517
"""
1618
Create a colormap of perceptually distinguishable colors.
1719
@@ -74,6 +76,7 @@ def distinguishable_colors(ncolors, backgrounds=[[0,0,0],[1,1,1]],
7476
from colormath.color_diff import delta_e_cie2000
7577

7678
filename = "colormap_of_{0}_distinguishable_colors".format(ncolors)
79+
filename = os.path.join(out_dir, filename)
7780

7881
# ------------------------------------------------------------------------
7982
# Generate a sizable number of RGB triples. This represents our space of
@@ -158,7 +161,7 @@ def distinguishable_colors(ncolors, backgrounds=[[0,0,0],[1,1,1]],
158161
if verbose:
159162
print(rgb)
160163
plt.barh(0, 50, 1, 0, color=rgb)
161-
plt.savefig(filename + ".png")
164+
plt.savefig(filename + ".png")
162165
if verbose:
163166
print("Colormap image saved to {0}".format(filename + ".png"))
164167

@@ -176,7 +179,7 @@ def distinguishable_colors(ncolors, backgrounds=[[0,0,0],[1,1,1]],
176179

177180
def label_adjacency_matrix(label_file, ignore_values=[-1, 999], add_value=0,
178181
save_table=True, output_format='csv',
179-
verbose=True):
182+
verbose=True, out_dir='.'):
180183
"""
181184
Extract surface or volume label boundaries, find unique label pairs,
182185
and write adjacency matrix (useful for constructing a colormap).
@@ -280,6 +283,8 @@ def label_adjacency_matrix(label_file, ignore_values=[-1, 999], add_value=0,
280283
else:
281284
raise IOError("Use appropriate input file type.")
282285

286+
output_table = os.path.join(out_dir, output_table)
287+
283288
# Find unique pairs (or first two of each list):
284289
pairs = []
285290
for pair in label_pairs:
@@ -1188,4 +1193,4 @@ def viridis_colormap():
11881193
[0.983868, 0.904867, 0.136897],
11891194
[0.993248, 0.906157, 0.143936]]
11901195

1191-
return viridis
1196+
return viridis

mindboggle/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.2.0'
1+
__version__ = '1.2.2'

setup.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ def main(**extra_args):
6969
package_data={'mindboggle': [pjoin('data', '*.nii.gz'),
7070
pjoin('data', '*.txt')]},
7171
scripts=[pjoin('mindboggle', 'mindboggle'),
72-
pjoin('mindboggle', 'mindboggle123')],
72+
pjoin('mindboggle', 'mindboggle123'),
73+
pjoin('colors_script', 'calc_colormap.py'),
74+
pjoin('colors_script', 'convert_to_mipav_lut.py')],
7375
**extra_args
7476
)
7577

7678
if __name__ == "__main__":
7779
main()
7880
#main(**extra_setuptools_args)
79-
80-

0 commit comments

Comments
 (0)