Commit 1d51895e396a36b016d97ff828f5a3b4084fc25b

Authored by Thiago Franco de Moraes
1 parent bf272238
Exists in watershed

Watershed 3D (only markers from axial)

invesalius/data/styles.py
@@ -683,6 +683,8 @@ class WaterShedInteractorStyle(DefaultInteractorStyle): @@ -683,6 +683,8 @@ class WaterShedInteractorStyle(DefaultInteractorStyle):
683 self.AddObserver("LeftButtonReleaseEvent", self.OnBrushRelease) 683 self.AddObserver("LeftButtonReleaseEvent", self.OnBrushRelease)
684 self.AddObserver("MouseMoveEvent", self.OnBrushMove) 684 self.AddObserver("MouseMoveEvent", self.OnBrushMove)
685 685
  686 + Publisher.subscribe(self.expand_watershed, 'Expand watershed to 3D ' + self.orientation)
  687 +
686 def SetUp(self): 688 def SetUp(self):
687 self.viewer.slice_.do_threshold_to_all_slices() 689 self.viewer.slice_.do_threshold_to_all_slices()
688 mask = self.viewer.slice_.current_mask.matrix 690 mask = self.viewer.slice_.current_mask.matrix
@@ -1010,6 +1012,26 @@ class WaterShedInteractorStyle(DefaultInteractorStyle): @@ -1010,6 +1012,26 @@ class WaterShedInteractorStyle(DefaultInteractorStyle):
1010 elif operation == BRUSH_ERASE: 1012 elif operation == BRUSH_ERASE:
1011 roi_m[index] = 0 1013 roi_m[index] = 0
1012 1014
  1015 + def expand_watershed(self, pubsub_evt):
  1016 + markers = self.matrix
  1017 + image = self.viewer.slice_.matrix
  1018 + mask = self.viewer.slice_.current_mask.matrix[1:, 1:, 1:]
  1019 + ww = self.viewer.slice_.window_width
  1020 + wl = self.viewer.slice_.window_level
  1021 + tmp_image = ndimage.morphological_gradient(get_LUT_value(image, ww, wl).astype('uint16'), 5)
  1022 + print tmp_image
  1023 + tmp_mask = watershed(tmp_image, markers)
  1024 +
  1025 + mask[:] = 0
  1026 + mask[(tmp_mask==1)] = 253
  1027 + mask[0] = 1
  1028 + mask[:, 0, :] = 1
  1029 + mask[:, :, 0] = 1
  1030 +
  1031 + self.viewer._flush_buffer = True
  1032 + self.viewer.slice_.discard_all_buffers()
  1033 + self.viewer.OnScrollBar(update3D=False)
  1034 +
1013 1035
1014 def do_colour_mask(imagedata): 1036 def do_colour_mask(imagedata):
1015 scalar_range = int(imagedata.GetScalarRange()[1]) 1037 scalar_range = int(imagedata.GetScalarRange()[1])
invesalius/gui/task_slice.py
@@ -228,7 +228,7 @@ class InnerFoldPanel(wx.Panel): @@ -228,7 +228,7 @@ class InnerFoldPanel(wx.Panel):
228 # parent panel. Perhaps we need to insert the item into the sizer also... 228 # parent panel. Perhaps we need to insert the item into the sizer also...
229 # Study this. 229 # Study this.
230 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, 230 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
231 - (10, 220), 0,fpb.FPB_SINGLE_FOLD) 231 + (10, 240), 0,fpb.FPB_SINGLE_FOLD)
232 232
233 # Fold panel style 233 # Fold panel style
234 style = fpb.CaptionBarStyle() 234 style = fpb.CaptionBarStyle()
@@ -707,7 +707,7 @@ class EditionTools(wx.Panel): @@ -707,7 +707,7 @@ class EditionTools(wx.Panel):
707 707
708 class WatershedTool(EditionTools): 708 class WatershedTool(EditionTools):
709 def __init__(self, parent): 709 def __init__(self, parent):
710 - wx.Panel.__init__(self, parent, size=(50,240)) 710 + wx.Panel.__init__(self, parent, size=(50,250))
711 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) 711 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
712 self.SetBackgroundColour(default_colour) 712 self.SetBackgroundColour(default_colour)
713 713
@@ -770,6 +770,9 @@ class WatershedTool(EditionTools): @@ -770,6 +770,9 @@ class WatershedTool(EditionTools):
770 check_box = wx.CheckBox(self, -1, _("Overwrite mask")) 770 check_box = wx.CheckBox(self, -1, _("Overwrite mask"))
771 self.check_box = check_box 771 self.check_box = check_box
772 772
  773 + # Line 6
  774 + self.btn_exp_watershed = wx.Button(self, -1, _('Expand watershed to 3D'))
  775 +
773 # Add lines into main sizer 776 # Add lines into main sizer
774 sizer = wx.BoxSizer(wx.VERTICAL) 777 sizer = wx.BoxSizer(wx.VERTICAL)
775 sizer.Add(text1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) 778 sizer.Add(text1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)
@@ -778,6 +781,7 @@ class WatershedTool(EditionTools): @@ -778,6 +781,7 @@ class WatershedTool(EditionTools):
778 sizer.Add(gradient_thresh, 0, wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT| 781 sizer.Add(gradient_thresh, 0, wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT|
779 wx.BOTTOM, 6) 782 wx.BOTTOM, 6)
780 sizer.Add(check_box, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) 783 sizer.Add(check_box, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)
  784 + sizer.Add(self.btn_exp_watershed, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)
781 sizer.Fit(self) 785 sizer.Fit(self)
782 786
783 self.SetSizer(sizer) 787 self.SetSizer(sizer)
@@ -794,6 +798,7 @@ class WatershedTool(EditionTools): @@ -794,6 +798,7 @@ class WatershedTool(EditionTools):
794 self.gradient_thresh) 798 self.gradient_thresh)
795 self.combo_brush_op.Bind(wx.EVT_COMBOBOX, self.OnComboBrushOp) 799 self.combo_brush_op.Bind(wx.EVT_COMBOBOX, self.OnComboBrushOp)
796 self.check_box.Bind(wx.EVT_CHECKBOX, self.OnCheckOverwriteMask) 800 self.check_box.Bind(wx.EVT_CHECKBOX, self.OnCheckOverwriteMask)
  801 + self.btn_exp_watershed.Bind(wx.EVT_BUTTON, self.OnExpandWatershed)
797 802
798 def __bind_events(self): 803 def __bind_events(self):
799 Publisher.subscribe(self.SetThresholdBounds, 804 Publisher.subscribe(self.SetThresholdBounds,
@@ -859,3 +864,6 @@ class WatershedTool(EditionTools): @@ -859,3 +864,6 @@ class WatershedTool(EditionTools):
859 def OnCheckOverwriteMask(self, evt): 864 def OnCheckOverwriteMask(self, evt):
860 value = self.check_box.GetValue() 865 value = self.check_box.GetValue()
861 Publisher.sendMessage('Set overwrite mask', value) 866 Publisher.sendMessage('Set overwrite mask', value)
  867 +
  868 + def OnExpandWatershed(self, evt):
  869 + Publisher.sendMessage('Expand watershed to 3D AXIAL')