首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Image Viewer

快速开始

skimage.viewer提供了一个基于matplotlib的显示工具,和一个基于Qt的GUI工具包。您可以简单地使用它来显示图像:

代码语言:javascript
复制
from skimage import data
from skimage.viewer import ImageViewer

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

当然,你可以很容易地使用imshowmatplotlib(或者,skimage.io.imshow这增加了对多个IO-插件的支持)来显示图像。其优点ImageViewer是可以轻松添加插件来操作图像。目前,只有少数插件可以实现,但编写自己的插件很容易。在深入细节之前,我们来看一个如何将预定义插件添加到查看器的示例:

代码语言:javascript
复制
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

代码语言:javascript
复制
from skimage.filters import denoise_tv_bregman
from skimage.viewer.plugins.base import Plugin

denoise_plugin = Plugin(image_filter=denoise_tv_bregman)

注意

Plugin假定对图像给出滤波器的第一个参数是从所述图像浏览器的图像。将来,这应该被改变,所以你可以将图像传递给过滤器函数的另一个参数。

要实际与过滤器进行交互,您必须添加调整功能参数的小部件。通常,这意味着添加滑块小部件并将其连接到过滤器参数以及滑块的最小值和最大值:

代码语言:javascript
复制
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)。

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

代码语言:javascript
复制
viewer = ImageViewer(image)
viewer += denoise_plugin
denoised = viewer.show()[0][0]

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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com