diff --git a/invesalius/data/styles.py b/invesalius/data/styles.py index 8d42f8e..7536ec4 100644 --- a/invesalius/data/styles.py +++ b/invesalius/data/styles.py @@ -683,6 +683,8 @@ class WaterShedInteractorStyle(DefaultInteractorStyle): self.AddObserver("LeftButtonReleaseEvent", self.OnBrushRelease) self.AddObserver("MouseMoveEvent", self.OnBrushMove) + Publisher.subscribe(self.expand_watershed, 'Expand watershed to 3D ' + self.orientation) + def SetUp(self): self.viewer.slice_.do_threshold_to_all_slices() mask = self.viewer.slice_.current_mask.matrix @@ -1010,6 +1012,26 @@ class WaterShedInteractorStyle(DefaultInteractorStyle): elif operation == BRUSH_ERASE: roi_m[index] = 0 + def expand_watershed(self, pubsub_evt): + markers = self.matrix + image = self.viewer.slice_.matrix + mask = self.viewer.slice_.current_mask.matrix[1:, 1:, 1:] + ww = self.viewer.slice_.window_width + wl = self.viewer.slice_.window_level + tmp_image = ndimage.morphological_gradient(get_LUT_value(image, ww, wl).astype('uint16'), 5) + print tmp_image + tmp_mask = watershed(tmp_image, markers) + + mask[:] = 0 + mask[(tmp_mask==1)] = 253 + mask[0] = 1 + mask[:, 0, :] = 1 + mask[:, :, 0] = 1 + + self.viewer._flush_buffer = True + self.viewer.slice_.discard_all_buffers() + self.viewer.OnScrollBar(update3D=False) + def do_colour_mask(imagedata): scalar_range = int(imagedata.GetScalarRange()[1]) diff --git a/invesalius/gui/task_slice.py b/invesalius/gui/task_slice.py index f2e7628..4cafaa1 100644 --- a/invesalius/gui/task_slice.py +++ b/invesalius/gui/task_slice.py @@ -228,7 +228,7 @@ class InnerFoldPanel(wx.Panel): # parent panel. Perhaps we need to insert the item into the sizer also... # Study this. fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, - (10, 220), 0,fpb.FPB_SINGLE_FOLD) + (10, 240), 0,fpb.FPB_SINGLE_FOLD) # Fold panel style style = fpb.CaptionBarStyle() @@ -707,7 +707,7 @@ class EditionTools(wx.Panel): class WatershedTool(EditionTools): def __init__(self, parent): - wx.Panel.__init__(self, parent, size=(50,240)) + wx.Panel.__init__(self, parent, size=(50,250)) default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) self.SetBackgroundColour(default_colour) @@ -770,6 +770,9 @@ class WatershedTool(EditionTools): check_box = wx.CheckBox(self, -1, _("Overwrite mask")) self.check_box = check_box + # Line 6 + self.btn_exp_watershed = wx.Button(self, -1, _('Expand watershed to 3D')) + # Add lines into main sizer sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(text1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) @@ -778,6 +781,7 @@ class WatershedTool(EditionTools): sizer.Add(gradient_thresh, 0, wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT| wx.BOTTOM, 6) sizer.Add(check_box, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) + sizer.Add(self.btn_exp_watershed, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) sizer.Fit(self) self.SetSizer(sizer) @@ -794,6 +798,7 @@ class WatershedTool(EditionTools): self.gradient_thresh) self.combo_brush_op.Bind(wx.EVT_COMBOBOX, self.OnComboBrushOp) self.check_box.Bind(wx.EVT_CHECKBOX, self.OnCheckOverwriteMask) + self.btn_exp_watershed.Bind(wx.EVT_BUTTON, self.OnExpandWatershed) def __bind_events(self): Publisher.subscribe(self.SetThresholdBounds, @@ -859,3 +864,6 @@ class WatershedTool(EditionTools): def OnCheckOverwriteMask(self, evt): value = self.check_box.GetValue() Publisher.sendMessage('Set overwrite mask', value) + + def OnExpandWatershed(self, evt): + Publisher.sendMessage('Expand watershed to 3D AXIAL') -- libgit2 0.21.2