Files
scikit-image/skimage/viewer/plugins/overlayplugin.py
T
Tony S Yu 86b428952d ENH: Allow Plugin.add_widget to hook into Plugin attributes.
The `ptype` parameter of widget can now be set to 'plugin'. When this is the case, the plugin will set a plugin attribute whenever the widget is updated.

As an example, this commit adds a ComboBox widget which is hooked into the overlay color of the OverlayPlugin.
2012-07-22 13:24:41 -04:00

64 lines
1.8 KiB
Python

from .base import Plugin
from ..utils import ClearColormap
class OverlayPlugin(Plugin):
"""Plugin for ImageViewer that displays an overlay on top of main image.
Attributes
----------
overlay : array
Overlay displayed on top of image. This overlay defaults to a color map
with alpha values varying linearly from 0 to 1.
"""
colors = {'red': (1, 0, 0),
'yellow': (1, 1, 0),
'green': (0, 1, 0),
'cyan': (0, 1, 1)}
def __init__(self, image_viewer, **kwargs):
Plugin.__init__(self, image_viewer, **kwargs)
self._overlay_plot = None
self._overlay = None
self.cmap = None
self.color_names = self.colors.keys()
#TODO: `color` doesn't update GUI widget when set manually.
self.color = 0
@property
def overlay(self):
return self._overlay
@overlay.setter
def overlay(self, image):
self._overlay = image
ax = self.image_viewer.ax
if image is None:
ax.images.remove(self._overlay_plot)
self._overlay_plot = None
elif self._overlay_plot is None:
self._overlay_plot = ax.imshow(image, cmap=self.cmap)
else:
self._overlay_plot.set_array(image)
self.image_viewer.redraw()
def closeEvent(self, event):
self.overlay = None
super(OverlayPlugin, self).closeEvent(event)
@property
def color(self):
return self._color
@color.setter
def color(self, index):
# Update colormap whenever color is changed.
name = self.color_names[index]
self._color = name
rgb = self.colors[name]
self.cmap = ClearColormap(rgb)
if self._overlay_plot is not None:
self._overlay_plot.set_cmap(self.cmap)
self.image_viewer.redraw()