Commit 5a215327706c56ede518ec503311243a7bded8e2
1 parent
f6fab930
Exists in
region_growing_confidence
Starting 3d confidence
Showing
1 changed file
with
33 additions
and
28 deletions
Show diff stats
invesalius/data/styles.py
| ... | ... | @@ -2056,7 +2056,11 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle): |
| 2056 | 2056 | dy, dx = image.shape |
| 2057 | 2057 | image = image.reshape((1, dy, dx)) |
| 2058 | 2058 | mask = mask.reshape((1, dy, dx)) |
| 2059 | - out_mask = self.do_rg_confidence((x, y, 0), image, mask) | |
| 2059 | + | |
| 2060 | + bstruct = np.array(generate_binary_structure(2, CON2D[self.config.con_2d]), dtype='uint8') | |
| 2061 | + bstruct = bstruct.reshape((1, 3, 3)) | |
| 2062 | + | |
| 2063 | + out_mask = self.do_rg_confidence(image, mask, (x, y, 0), bstruct) | |
| 2060 | 2064 | else: |
| 2061 | 2065 | if self.config.method == 'threshold': |
| 2062 | 2066 | v = image[y, x] |
| ... | ... | @@ -2114,47 +2118,51 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle): |
| 2114 | 2118 | mask = self.viewer.slice_.current_mask.matrix[1:, 1:, 1:] |
| 2115 | 2119 | image = self.viewer.slice_.matrix |
| 2116 | 2120 | |
| 2117 | - if self.config.method == 'threshold': | |
| 2118 | - v = image[z, y, x] | |
| 2119 | - t0 = self.config.t0 | |
| 2120 | - t1 = self.config.t1 | |
| 2121 | + if self.config.method != 'confidence': | |
| 2122 | + if self.config.method == 'threshold': | |
| 2123 | + v = image[z, y, x] | |
| 2124 | + t0 = self.config.t0 | |
| 2125 | + t1 = self.config.t1 | |
| 2121 | 2126 | |
| 2122 | - elif self.config.method == 'dynamic': | |
| 2123 | - if self.config.use_ww_wl: | |
| 2124 | - print "Using WW&WL" | |
| 2125 | - ww = self.viewer.slice_.window_width | |
| 2126 | - wl = self.viewer.slice_.window_level | |
| 2127 | - image = get_LUT_value_255(image, ww, wl) | |
| 2127 | + elif self.config.method == 'dynamic': | |
| 2128 | + if self.config.use_ww_wl: | |
| 2129 | + print "Using WW&WL" | |
| 2130 | + ww = self.viewer.slice_.window_width | |
| 2131 | + wl = self.viewer.slice_.window_level | |
| 2132 | + image = get_LUT_value_255(image, ww, wl) | |
| 2128 | 2133 | |
| 2129 | - v = image[z, y, x] | |
| 2134 | + v = image[z, y, x] | |
| 2130 | 2135 | |
| 2131 | - t0 = v - self.config.dev_min | |
| 2132 | - t1 = v + self.config.dev_max | |
| 2136 | + t0 = v - self.config.dev_min | |
| 2137 | + t1 = v + self.config.dev_max | |
| 2133 | 2138 | |
| 2134 | - if image[z, y, x] < t0 or image[z, y, x] > t1: | |
| 2135 | - return | |
| 2139 | + if image[z, y, x] < t0 or image[z, y, x] > t1: | |
| 2140 | + return | |
| 2136 | 2141 | |
| 2137 | - out_mask = np.zeros_like(mask) | |
| 2138 | 2142 | |
| 2139 | 2143 | bstruct = np.array(generate_binary_structure(3, CON3D[self.config.con_3d]), dtype='uint8') |
| 2140 | 2144 | self.viewer.slice_.do_threshold_to_all_slices() |
| 2141 | 2145 | cp_mask = self.viewer.slice_.current_mask.matrix.copy() |
| 2142 | 2146 | |
| 2143 | - with futures.ThreadPoolExecutor(max_workers=1) as executor: | |
| 2144 | - future = executor.submit(floodfill.floodfill_threshold, image, [[x, y, z]], t0, t1, 1, bstruct, out_mask) | |
| 2147 | + if self.config.method == 'confidence': | |
| 2148 | + out_mask = self.do_rg_confidence(image, mask, (x, y, z), bstruct) | |
| 2149 | + else: | |
| 2150 | + out_mask = np.zeros_like(mask) | |
| 2151 | + with futures.ThreadPoolExecutor(max_workers=1) as executor: | |
| 2152 | + future = executor.submit(floodfill.floodfill_threshold, image, [[x, y, z]], t0, t1, 1, bstruct, out_mask) | |
| 2145 | 2153 | |
| 2146 | - dlg = wx.ProgressDialog(self._progr_title, self._progr_msg, parent=None, style=wx.PD_APP_MODAL) | |
| 2147 | - while not future.done(): | |
| 2148 | - dlg.Pulse() | |
| 2149 | - time.sleep(0.1) | |
| 2154 | + dlg = wx.ProgressDialog(self._progr_title, self._progr_msg, parent=None, style=wx.PD_APP_MODAL) | |
| 2155 | + while not future.done(): | |
| 2156 | + dlg.Pulse() | |
| 2157 | + time.sleep(0.1) | |
| 2150 | 2158 | |
| 2151 | - dlg.Destroy() | |
| 2159 | + dlg.Destroy() | |
| 2152 | 2160 | |
| 2153 | 2161 | mask[out_mask.astype('bool')] = self.config.fill_value |
| 2154 | 2162 | |
| 2155 | 2163 | self.viewer.slice_.current_mask.save_history(0, 'VOLUME', self.viewer.slice_.current_mask.matrix.copy(), cp_mask) |
| 2156 | 2164 | |
| 2157 | - def do_rg_confidence(self, p, image, mask): | |
| 2165 | + def do_rg_confidence(self, image, mask, p, bstruct): | |
| 2158 | 2166 | x, y, z = p |
| 2159 | 2167 | if self.config.use_ww_wl: |
| 2160 | 2168 | print "Using WW&WL" |
| ... | ... | @@ -2172,9 +2180,6 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle): |
| 2172 | 2180 | bool_mask[0, j, i] = True |
| 2173 | 2181 | |
| 2174 | 2182 | |
| 2175 | - bstruct = np.array(generate_binary_structure(2, CON2D[self.config.con_2d]), dtype='uint8') | |
| 2176 | - bstruct = bstruct.reshape((1, 3, 3)) | |
| 2177 | - | |
| 2178 | 2183 | for i in xrange(3): |
| 2179 | 2184 | var = np.std(image[bool_mask]) |
| 2180 | 2185 | mean = np.mean(image[bool_mask]) | ... | ... |