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') |