Image Viewer
图像查看器
快速开始
skimage.viewer
提供了一个基于matplotlib的显示工具,和一个基于Qt的GUI工具包。您可以简单地使用它来显示图像:
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.我们提取单个元组并将其overlay
和data
元素绑定到单个变量。在这里,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
假定对图像给出滤波器的第一个参数是从所述图像浏览器的图像。将来,这应该被改变,所以你可以将图像传递给过滤器函数的另一个参数。
要实际与过滤器进行交互,您必须添加调整功能参数的小部件。通常,这意味着添加滑块小部件并将其连接到过滤器参数以及滑块的最小值和最大值:
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.push
和skimage.io.pop
)。
剩下的就是创建一个图像查看器并将该插件添加到该查看器。
viewer = ImageViewer(image)
viewer += denoise_plugin
denoised = viewer.show()[0][0]
在这里,我们只访问由插件返回的叠加层,其中包含上次使用设置的过滤图像weight
。