图像查看器

警告

SCRICKIT-IMAGE查看器从0.18开始就不再推荐使用,并将在0.20中删除。请参阅 visualization 替代方案的软件页面。

快速启动

skimage.viewer 提供了用于显示图像的基于matplotlib的画布和基于Qt的图形用户界面工具包,其目标是使创建交互式图像编辑器变得容易。您可以简单地使用它来显示图像:

from skimage import data
from skimage.viewer import ImageViewer

image = data.coins()
viewer = ImageViewer(image)
viewer.show()

当然,您也可以很容易地使用 imshow 从… matplotlib (或者可替换地, skimage.io.imshow 这增加了对多个IO插件的支持)以显示图像。的优势 ImageViewer 是您可以轻松地添加用于操作图像的插件。目前,只实现了几个插件,但很容易编写自己的插件。在进入细节之前,我们先来看一个如何将预定义插件添加到查看器中的示例:

from skimage.viewer.plugins.lineprofile import LineProfile

viewer = ImageViewer(image)
viewer += LineProfile(viewer)
overlay, data = viewer.show()[0]

观众的 show() 方法返回一个元组列表,每个附加插件对应一个元组。每个元组包含两个元素:与输入图像形状相同的叠加层和数据字段(可能是 None )。插件类将其返回值记录在其 output 方法。

在本例中,只附加了一个插件,因此 show 将具有长度1。我们提取单个元组并绑定其 overlaydata 元素添加到各个变量。这里, overlay 包含在查看器上绘制的线条的图像,并且 data 包含沿该线的一维强度轮廓。

目前,预定义的插件并不多,但有一个非常简单的界面来创建您自己的插件。首先,让我们创建一个插件来调用全变差去噪函数, denoise_tv_bregman

from skimage.filters import denoise_tv_bregman
from skimage.viewer.plugins.base import Plugin

denoise_plugin = Plugin(image_filter=denoise_tv_bregman)

备注

这个 Plugin 假定提供给图像筛选器的第一个参数是来自图像查看器的图像。将来,应该对此进行更改,以便可以将图像传递给Filter函数的不同参数。

要真正与过滤器交互,您必须添加调整函数参数的小部件。通常,这意味着添加一个滑块小工具并将其连接到Filter参数以及滑块的最小值和最大值:

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

在这里,我们将一个滑块小部件连接到筛选器的“weight”参数。我们还添加了一些按钮,用于将图像保存到文件或 scikit-image 图像堆栈(请参见 skimage.io.pushskimage.io.pop )。

剩下的就是创建一个图像查看器并将插件添加到该查看器中。

viewer = ImageViewer(image)
viewer += denoise_plugin
denoised = viewer.show()[0][0]

在这里,我们只访问插件返回的覆盖图,其中包含上次使用的设置的过滤图像 weight

../_images/denoise_viewer_window.png ../_images/denoise_plugin_window.png