Commit f70373d89ff988945a02efbe1faf100de01522e0
1 parent
00523047
Exists in
ffill_segmentation
Split 2D and 3D segmentation
Showing
1 changed file
with
21 additions
and
22 deletions
Show diff stats
invesalius/data/styles.py
... | ... | @@ -1917,13 +1917,13 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle): |
1917 | 1917 | viewer = self.viewer |
1918 | 1918 | iren = viewer.interactor |
1919 | 1919 | mouse_x, mouse_y = iren.GetEventPosition() |
1920 | - x, y, z = self.viewer.get_voxel_coord_by_screen_pos(mouse_x, mouse_y, self.picker) | |
1920 | + x, y = self.viewer.get_slice_pixel_coord_by_screen_pos(mouse_x, mouse_y, self.picker) | |
1921 | 1921 | |
1922 | - mask = self.viewer.slice_.current_mask.matrix[1:, 1:, 1:] | |
1923 | - image = self.viewer.slice_.matrix | |
1922 | + mask = self.viewer.slice_.buffer_slices[self.orientation].mask.copy() | |
1923 | + image = self.viewer.slice_.buffer_slices[self.orientation].image | |
1924 | 1924 | |
1925 | 1925 | if self.config.method == 'threshold': |
1926 | - v = image[z, y, x] | |
1926 | + v = image[y, x] | |
1927 | 1927 | t0 = self.config.t0 |
1928 | 1928 | t1 = self.config.t1 |
1929 | 1929 | |
... | ... | @@ -1934,37 +1934,36 @@ class FloodFillSegmentInteractorStyle(DefaultInteractorStyle): |
1934 | 1934 | wl = self.viewer.slice_.window_level |
1935 | 1935 | image = get_LUT_value(image, ww, wl) |
1936 | 1936 | |
1937 | - v = image[z, y, x] | |
1937 | + v = image[y, x] | |
1938 | 1938 | |
1939 | 1939 | t0 = v - self.config.dev_min |
1940 | 1940 | t1 = v + self.config.dev_max |
1941 | 1941 | |
1942 | - if image[z, y, x] < t0 or image[z, y, x] > t1: | |
1942 | + print v, x, y | |
1943 | + if image[y, x] < t0 or image[y, x] > t1: | |
1943 | 1944 | return |
1944 | 1945 | |
1945 | - _bstruct = generate_binary_structure(2, CON2D[self.config.con_2d]) | |
1946 | - if self.orientation == 'AXIAL': | |
1947 | - bstruct = np.zeros((1, 3, 3), dtype='uint8') | |
1948 | - bstruct[0] = _bstruct | |
1949 | - elif self.orientation == 'CORONAL': | |
1950 | - bstruct = np.zeros((3, 1, 3), dtype='uint8') | |
1951 | - bstruct[:, 0, :] = _bstruct | |
1952 | - elif self.orientation == 'SAGITAL': | |
1953 | - bstruct = np.zeros((3, 3, 1), dtype='uint8') | |
1954 | - bstruct[:, :, 0] = _bstruct | |
1946 | + dy, dx = image.shape | |
1947 | + image = image.reshape((1, dy, dx)) | |
1948 | + mask = mask.reshape((1, dy, dx)) | |
1949 | + | |
1950 | + bstruct = np.array(generate_binary_structure(2, CON2D[self.config.con_2d]), dtype='uint8') | |
1951 | + bstruct = bstruct.reshape((1, 3, 3)) | |
1952 | + | |
1953 | + floodfill.floodfill_threshold(image, [[x, y, 0]], t0, t1, self.config.fill_value, bstruct, mask) | |
1955 | 1954 | |
1956 | - floodfill.floodfill_threshold(image, [[x, y, z]], t0, t1, self.config.fill_value, bstruct, mask) | |
1957 | - b_mask = self.viewer.slice_.buffer_slices[self.orientation].mask | |
1958 | 1955 | index = self.viewer.slice_.buffer_slices[self.orientation].index |
1956 | + b_mask = self.viewer.slice_.buffer_slices[self.orientation].mask | |
1957 | + vol_mask = self.viewer.slice_.current_mask.matrix[1:, 1:, 1:] | |
1959 | 1958 | |
1960 | 1959 | if self.orientation == 'AXIAL': |
1961 | - p_mask = mask[index,:,:].copy() | |
1960 | + vol_mask[index, :, :] = mask | |
1962 | 1961 | elif self.orientation == 'CORONAL': |
1963 | - p_mask = mask[:, index, :].copy() | |
1962 | + vol_mask[:, index, :] = mask | |
1964 | 1963 | elif self.orientation == 'SAGITAL': |
1965 | - p_mask = mask[:, :, index].copy() | |
1964 | + vol_mask[:, :, index] = mask | |
1966 | 1965 | |
1967 | - self.viewer.slice_.current_mask.save_history(index, self.orientation, p_mask, b_mask) | |
1966 | + self.viewer.slice_.current_mask.save_history(index, self.orientation, mask, b_mask) | |
1968 | 1967 | |
1969 | 1968 | def do_3d_seg(self): |
1970 | 1969 | viewer = self.viewer | ... | ... |