skimage.viewer provides a matplotlib-based canvas for displaying images and a Qt-based GUI-toolkit, with the goal of making it easy to create interactive image editors. You can simply use it to display an image:
from skimage import data from skimage.viewer import ImageViewer image = data.coins() viewer = ImageViewer(image) viewer.show()
Of course, you could just as easily use
imshow from matplotlib (or alternatively,
skimage.io.imshow which adds support for multiple io-plugins) to display images. The advantage of
ImageViewer is that you can easily add plugins for manipulating images. Currently, only a few plugins are implemented, but it is easy to write your own. Before going into the details, let’s see an example of how a pre-defined plugin is added to the viewer:
from skimage.viewer.plugins.lineprofile import LineProfile viewer = ImageViewer(image) viewer += LineProfile(viewer) overlay, data = viewer.show()
show() method returns a list of tuples, one for each attached plugin. Each tuple contains two elements: an overlay of the same shape as the input image, and a data field (which may be
None). A plugin class documents its return value in its
In this example, only one plugin is attached, so the list returned by
show will have length 1. We extract the single tuple and bind its
data elements to individual variables. Here,
overlay contains an image of the line drawn on the viewer, and
data contains the 1-dimensional intensity profile along that line.
At the moment, there are not many plugins pre-defined, but there is a really simple interface for creating your own plugin. First, let us create a plugin to call the total-variation denoising function,
from skimage.filters import denoise_tv_bregman from skimage.viewer.plugins.base import Plugin denoise_plugin = Plugin(image_filter=denoise_tv_bregman)
Plugin assumes the first argument given to the image filter is the image from the image viewer. In the future, this should be changed so you can pass the image to a different argument of the filter function.
To actually interact with the filter, you have to add widgets that adjust the parameters of the function. Typically, that means adding a slider widget and connecting it to the filter parameter and the minimum and maximum values of the slider:
from skimage.viewer.widgets import Slider from skimage.viewer.widgets.history import SaveButtons denoise_plugin += Slider('weight', 0.01, 0.5, update_on='release') denoise_plugin += SaveButtons()
Here, we connect a slider widget to the filter’s ‘weight’ argument. We also added some buttons for saving the image to file or to the
scikit-image image stack (see
All that’s left is to create an image viewer and add the plugin to that viewer.
viewer = ImageViewer(image) viewer += denoise_plugin denoised = viewer.show()
Here, we access only the overlay returned by the plugin, which contains the filtered image for the last used setting of
© 2011 the scikit-image team
Licensed under the BSD 3-clause License.