From 230fefa748db13af928e5cf699899efd797d6349 Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Thu, 24 Jan 2013 21:47:42 -0600 Subject: [PATCH] ENH: Improve usability of watershed_demo. * Replace 0 label with 'Erase' * Use OK button instead of enter key to calculate watershed. --- skimage/viewer/plugins/labelplugin.py | 1 + viewer_examples/plugins/watershed_demo.py | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/skimage/viewer/plugins/labelplugin.py b/skimage/viewer/plugins/labelplugin.py index d224811c..b3c289f1 100644 --- a/skimage/viewer/plugins/labelplugin.py +++ b/skimage/viewer/plugins/labelplugin.py @@ -21,6 +21,7 @@ class LabelPainter(Plugin): self._radius_widget = Slider('radius', low=1, high=max_radius, value=5, value_type='int', ptype='plugin') labels = [str(i) for i in range(6)] + labels[0] = 'Erase' self._label_widget = ComboBox('label', labels, ptype='plugin') self.add_widget(self._radius_widget) self.add_widget(self._label_widget) diff --git a/viewer_examples/plugins/watershed_demo.py b/viewer_examples/plugins/watershed_demo.py index 7119b7f2..683e8a30 100644 --- a/viewer_examples/plugins/watershed_demo.py +++ b/viewer_examples/plugins/watershed_demo.py @@ -4,8 +4,17 @@ from skimage import data from skimage import filter from skimage import morphology from skimage.viewer import ImageViewer +from skimage.viewer.widgets import history from skimage.viewer.plugins.labelplugin import LabelPainter +class OKCancelButtons(history.OKCancelButtons): + + def update_original_image(self): + # OKCancelButtons updates the original image with the filtered image + # by default. Override this method to update the overlay. + self.plugin._show_watershed() + self.plugin.close() + class WatershedPlugin(LabelPainter): @@ -13,19 +22,21 @@ class WatershedPlugin(LabelPainter): helpstr = ("Watershed plugin", "----------------", "Use mouse to paint each region with a different label.", - "Press enter to display segmented image.") + "Press OK to display segmented image.") return '\n'.join(helpstr) - def on_enter(self, overlay): + def _show_watershed(self): viewer = self.image_viewer edge_image = filter.sobel(viewer.image) - labels = morphology.watershed(edge_image, overlay) + labels = morphology.watershed(edge_image, self.paint_tool.overlay) viewer.ax.imshow(labels, cmap=plt.cm.jet, alpha=0.5) viewer.redraw() - self.close() image = data.coins() +plugin = WatershedPlugin() +plugin += OKCancelButtons() + viewer = ImageViewer(image) -viewer += WatershedPlugin() +viewer += plugin viewer.show()