Commit 2ae4385954ff8aebf1043d74030993ff3f9339c1

Authored by Thiago Franco de Moraes
1 parent f70373d8
Exists in ffill_segmentation

Floodfill in clean mask then add it to current mask

Showing 1 changed file with 19 additions and 12 deletions   Show diff stats
invesalius/data/styles.py
... ... @@ -1898,7 +1898,16 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle):
1898 1898 return
1899 1899  
1900 1900 if self.config.target == "3D":
1901   - self.do_3d_seg()
  1901 + with futures.ThreadPoolExecutor(max_workers=1) as executor:
  1902 + future = executor.submit(self.do_3d_seg)
  1903 +
  1904 + dlg = wx.ProgressDialog(self._progr_title, self._progr_msg, parent=None, style=wx.PD_APP_MODAL)
  1905 + while not future.done():
  1906 + dlg.Pulse()
  1907 + time.sleep(0.1)
  1908 +
  1909 + dlg.Destroy()
  1910 +
1902 1911 else:
1903 1912 self.do_2d_seg()
1904 1913  
... ... @@ -1939,7 +1948,6 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle):
1939 1948 t0 = v - self.config.dev_min
1940 1949 t1 = v + self.config.dev_max
1941 1950  
1942   - print v, x, y
1943 1951 if image[y, x] < t0 or image[y, x] > t1:
1944 1952 return
1945 1953  
... ... @@ -1947,10 +1955,14 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle):
1947 1955 image = image.reshape((1, dy, dx))
1948 1956 mask = mask.reshape((1, dy, dx))
1949 1957  
  1958 + out_mask = np.zeros_like(mask)
  1959 +
1950 1960 bstruct = np.array(generate_binary_structure(2, CON2D[self.config.con_2d]), dtype='uint8')
1951 1961 bstruct = bstruct.reshape((1, 3, 3))
1952 1962  
1953   - floodfill.floodfill_threshold(image, [[x, y, 0]], t0, t1, self.config.fill_value, bstruct, mask)
  1963 + floodfill.floodfill_threshold(image, [[x, y, 0]], t0, t1, 1, bstruct, out_mask)
  1964 +
  1965 + mask[out_mask.astype('bool')] = self.config.fill_value
1954 1966  
1955 1967 index = self.viewer.slice_.buffer_slices[self.orientation].index
1956 1968 b_mask = self.viewer.slice_.buffer_slices[self.orientation].mask
... ... @@ -1994,19 +2006,14 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle):
1994 2006 if image[z, y, x] < t0 or image[z, y, x] > t1:
1995 2007 return
1996 2008  
  2009 + out_mask = np.zeros_like(mask)
  2010 +
1997 2011 bstruct = np.array(generate_binary_structure(3, CON3D[self.config.con_3d]), dtype='uint8')
1998 2012 self.viewer.slice_.do_threshold_to_all_slices()
1999 2013 cp_mask = self.viewer.slice_.current_mask.matrix.copy()
2000 2014  
2001   - with futures.ThreadPoolExecutor(max_workers=1) as executor:
2002   - future = executor.submit(floodfill.floodfill_threshold, image, [[x, y, z]], t0, t1, self.config.fill_value, bstruct, mask)
2003   -
2004   - dlg = wx.ProgressDialog(self._progr_title, self._progr_msg, parent=None, style=wx.PD_APP_MODAL)
2005   - while not future.done():
2006   - dlg.Pulse()
2007   - time.sleep(0.1)
2008   -
2009   - dlg.Destroy()
  2015 + floodfill.floodfill_threshold(image, [[x, y, z]], t0, t1, 1, bstruct, out_mask)
  2016 + mask[out_mask.astype('bool')] = self.config.fill_value
2010 2017  
2011 2018 self.viewer.slice_.current_mask.save_history(0, 'VOLUME', self.viewer.slice_.current_mask.matrix.copy(), cp_mask)
2012 2019  
... ...