Commit 1d51895e396a36b016d97ff828f5a3b4084fc25b
1 parent
bf272238
Exists in
watershed
Watershed 3D (only markers from axial)
Showing
2 changed files
with
32 additions
and
2 deletions
Show diff stats
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') |