Commit 09915b7f1fe2b89823044c02c32911165671163d

Authored by Thiago Franco de Moraes
1 parent a8e514b4
Exists in vtk6

Watershed using vtk6

invesalius/data/styles.py
@@ -59,10 +59,14 @@ WATERSHED_OPERATIONS = {_("Erase"): BRUSH_ERASE, @@ -59,10 +59,14 @@ WATERSHED_OPERATIONS = {_("Erase"): BRUSH_ERASE,
59 _("Background"): BRUSH_BACKGROUND,} 59 _("Background"): BRUSH_BACKGROUND,}
60 60
61 def get_LUT_value(data, window, level): 61 def get_LUT_value(data, window, level):
62 - return np.piecewise(data,  
63 - [data <= (level - 0.5 - (window-1)/2),  
64 - data > (level - 0.5 + (window-1)/2)],  
65 - [0, window, lambda data: ((data - (level - 0.5))/(window-1) + 0.5)*(window)]) 62 + shape = data.shape
  63 + data_ = data.ravel()
  64 + data = np.piecewise(data_,
  65 + [data_ <= (level - 0.5 - (window-1)/2),
  66 + data_ > (level - 0.5 + (window-1)/2)],
  67 + [0, window, lambda data_: ((data_ - (level - 0.5))/(window-1) + 0.5)*(window)])
  68 + data.shape = shape
  69 + return data
66 70
67 class BaseImageInteractorStyle(vtk.vtkInteractorStyleImage): 71 class BaseImageInteractorStyle(vtk.vtkInteractorStyleImage):
68 def __init__(self, viewer): 72 def __init__(self, viewer):
invesalius/data/watershed_process.py
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) 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 + shape = data.shape
  10 + data_ = data.ravel()
  11 + data = np.piecewise(data_,
  12 + [data_ <= (level - 0.5 - (window-1)/2),
  13 + data_ > (level - 0.5 + (window-1)/2)],
  14 + [0, window, lambda data_: ((data_ - (level - 0.5))/(window-1) + 0.5)*(window)])
  15 + data.shape = shape
  16 + return data
  17 +
  18 +
  19 +def do_watershed(image, markers, tfile, shape, bstruct, algorithm, mg_size, use_ww_wl, wl, ww, q):
  20 + mask = np.memmap(tfile, shape=shape, dtype='uint8', mode='r+')
  21 +
  22 + if use_ww_wl:
  23 + if algorithm == 'Watershed':
  24 + tmp_image = ndimage.morphological_gradient(
  25 + get_LUT_value(image, ww, wl).astype('uint16'),
  26 + mg_size)
  27 + tmp_mask = watershed(tmp_image, markers.astype('int16'), bstruct)
  28 + else:
  29 + tmp_image = get_LUT_value(image, ww, wl).astype('uint16')
  30 + #tmp_image = ndimage.gaussian_filter(tmp_image, self.config.mg_size)
  31 + #tmp_image = ndimage.morphological_gradient(
  32 + #get_LUT_value(image, ww, wl).astype('uint16'),
  33 + #self.config.mg_size)
  34 + tmp_mask = watershed_ift(tmp_image, markers.astype('int16'), bstruct)
  35 + else:
  36 + if algorithm == 'Watershed':
  37 + tmp_image = ndimage.morphological_gradient((image - image.min()).astype('uint16'), mg_size)
  38 + tmp_mask = watershed(tmp_image, markers.astype('int16'), bstruct)
  39 + else:
  40 + tmp_image = (image - image.min()).astype('uint16')
  41 + #tmp_image = ndimage.gaussian_filter(tmp_image, self.config.mg_size)
  42 + #tmp_image = ndimage.morphological_gradient((image - image.min()).astype('uint16'), self.config.mg_size)
  43 + tmp_mask = watershed_ift(tmp_image, markers.astype('int8'), bstruct)
  44 + mask[:] = tmp_mask
  45 + mask.flush()
  46 + q.put(1)