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) | ... | ... |