Commit 02265d5231b405117cbe04080582c1dad60026c4
1 parent
358c45fb
Exists in
master
and in
40 other branches
ENH: Fixed problems in the Windows version (watershed).
Showing
1 changed file
with
43 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,43 @@ |
1 | +import numpy as np | |
2 | +from scipy import ndimage | |
3 | +from scipy.ndimage import watershed_ift, generate_binary_structure | |
4 | +from skimage.morphology import watershed | |
5 | +from skimage import filter | |
6 | + | |
7 | + | |
8 | +def get_LUT_value(data, window, level): | |
9 | + return np.piecewise(data, | |
10 | + [data <= (level - 0.5 - (window-1)/2), | |
11 | + data > (level - 0.5 + (window-1)/2)], | |
12 | + [0, 255, lambda data: ((data - (level - 0.5))/(window-1) + 0.5)*(255-0)]) | |
13 | + | |
14 | + | |
15 | + | |
16 | +def do_watershed(image, markers, tfile, shape, bstruct, algorithm, mg_size, use_ww_wl, wl, ww, q): | |
17 | + mask = np.memmap(tfile, shape=shape, dtype='uint8', mode='r+') | |
18 | + | |
19 | + if use_ww_wl: | |
20 | + if algorithm == 'Watershed': | |
21 | + tmp_image = ndimage.morphological_gradient( | |
22 | + get_LUT_value(image, ww, wl).astype('uint16'), | |
23 | + mg_size) | |
24 | + tmp_mask = watershed(tmp_image, markers.astype('int16'), bstruct) | |
25 | + else: | |
26 | + tmp_image = get_LUT_value(image, ww, wl).astype('uint16') | |
27 | + #tmp_image = ndimage.gaussian_filter(tmp_image, self.config.mg_size) | |
28 | + #tmp_image = ndimage.morphological_gradient( | |
29 | + #get_LUT_value(image, ww, wl).astype('uint16'), | |
30 | + #self.config.mg_size) | |
31 | + tmp_mask = watershed_ift(tmp_image, markers.astype('int16'), bstruct) | |
32 | + else: | |
33 | + if algorithm == 'Watershed': | |
34 | + tmp_image = ndimage.morphological_gradient((image - image.min()).astype('uint16'), mg_size) | |
35 | + tmp_mask = watershed(tmp_image, markers.astype('int16'), bstruct) | |
36 | + else: | |
37 | + tmp_image = (image - image.min()).astype('uint16') | |
38 | + #tmp_image = ndimage.gaussian_filter(tmp_image, self.config.mg_size) | |
39 | + #tmp_image = ndimage.morphological_gradient((image - image.min()).astype('uint16'), self.config.mg_size) | |
40 | + tmp_mask = watershed_ift(tmp_image, markers.astype('int8'), bstruct) | |
41 | + mask[:] = tmp_mask | |
42 | + mask.flush() | |
43 | + q.put(1) | ... | ... |