Commit 2ae4385954ff8aebf1043d74030993ff3f9339c1
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 | ... | ... |