跳转到主要内容

在jupyter笔记本中交互式查看图像堆栈

项目描述

stackview 🧊👀

PyPI Anaconda-Server Badge Contributors PyPI - Downloads GitHub stars GitHub forks License

基于 ipycanvasipywidgets 的 jupyter笔记本中交互式图像堆栈查看。TL;DR

stackview.curtain(image, labels, continuous_update=True)

安装

stackview 可以使用 conda 或 pip 安装。

conda install -c conda-forge stackview

或者

pip install stackview

如果您在笔记本中运行安装,您需要在使用 stackview 之前重新启动 Jupyter(而不仅仅是内核)。

使用

您可以在 jupyter 笔记本中使用 stackview,如下所示。还可以查看 Binder 中的演示。

有关如何使用 stackview 在 Google Colab 中的演示,请参阅 此处

更多示例笔记本可以在 此文件夹 中找到。

起点是提供的 3D 图像数据集,作为 numpy 数组。

from skimage.io import imread
image = imread('data/Haase_MRT_tfl3d1.tif', plugin='tifffile')

切片视图

然后您可以逐个切片查看它

import stackview
stackview.slice(image, continuous_update=True)

拾取强度

要读取鼠标移动处的像素强度,请使用拾取器。

stackview.picker(image)

显示范围

要调整显示图像时显示的最小和最大强度,请使用 display_range 函数。

stackview.display_range(image)

img.png

静态洞察视图

insight 函数将 numpy-array 转换为与 numpy 兼容的数组,该数组在 jupyter 笔记本中具有图像显示。

stackview.insight(image[60])

img.png

32 位和 64 位类型整数的图像显示为标签。

blobs = imread('data/blobs.tif')
labels = label(blobs > 120)

stackview.insight(labels)

img.png

类似于 matplotlib 的 imshow

为了更灵活地可视化图像,有imshow,它的工作方式与matplotlib的imshow类似,但增加了更多灵活性,例如在颜色图方面。它支持在microfilm中引入的pure...颜色图。

stackview.imshow(image, axes=True, colorbar=True, colormap='pure_magenta')

img.png

...或者绘制标签图像。

import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 3, figsize=(15,15))

stackview.imshow(image, plot=axs[0], title='image', axes=True)
stackview.imshow(labels, plot=axs[1], title='labels')

stackview.imshow(image, plot=axs[2], continue_drawing=True)
stackview.imshow(labels, plot=axs[2], alpha=0.4, title='image + labels')

img.png

静态动画

可以使用animateanimate_curtain函数将图像堆栈/图像混合动画存储为gif到磁盘。

stackview.animate(blobs_images, frame_delay_ms=50)

stackview.animate_curtain(blobs, blobs > 128)

标注区域

要交互式地创建标签图像,例如用于机器学习训练,stackview.annotate函数提供了基本的标签绘图工具。点击并拖动进行绘制。按住ALT键进行擦除。标注将绘制到您在绘制之前需要创建的labels图像中。

import numpy as np
labels = np.zeros(image.shape).astype(np.uint32)

stackview.annotate(image, labels)

img.png

注意:如果界面响应慢,请考虑使用较小的图像,例如通过裁剪或重采样。

正交视图

正交视图也是可用的

stackview.orthogonal(image)

幕布

此外,为了同时可视化原始图像和经过处理的版本,幕布视图可能很有用

stackview.curtain(image, modified_image * 65537)

幕布也可以与2D数据一起使用。顺便说一下,为了正确可视化两个图像,您需要自己调整它们的灰度值范围。例如,将二值图像乘以255,以便在8位范围内与原始图像很好地并排显示

binary = (slice_image > threshold_otsu(slice_image)) * 255
stackview.curtain(slice_image, binary)

这同样适用于标签图像

from skimage.measure import label
labels = label(binary)
stackview.curtain(slice_image, labels)

并排视图

还提供了用于共定位可视化的并排视图。如果您处理的是时间推移数据,您还可以使用此视图来可视化时间点之间的差异

stackview.side_by_side(image_stack[1:], image_stack[:-1])

切换

switch函数允许在图像列表或字典之间切换。

stackview.switch([
    slice_image,
    binary,
    labels
])

切换可切换

您还可以使用switchtoggleable参数同时查看多个通道和不同的颜色图。建议还传递一个颜色图列表。颜色图名称可以来自Matplotlib,stackview旨在与microfilm兼容。

hela_cells = imread("data/hela-cells.tif")

stackview.switch(
    {"lysosomes":   hela_cells[:,:,0],
     "mitochondria":hela_cells[:,:,1],
     "nuclei":      hela_cells[:,:,2]
    },
    colormap=["pure_magenta", "pure_green", "pure_blue"],
    toggleable=True
)

nD-Viewer

您还可以使用上述所有功能与n维数据(自stackview 0.10.0以来)一起使用。您将看到多个滑块来导航空间和时间等维度。如果您处理多个通道,建议使用带有toggleable=Truestackview.switch()更多信息)。

裁剪

您可以交互式地裁剪图像

crop_widget = stackview.crop(image_stack)
crop_widget

...并检索裁剪范围为slice对象的元组

r = crop_widget.range
r

输出

(slice(0, 40, 1), slice(40, 80, 1), slice(80, 120, 1))

...或者您可以直接裁剪图像

cropped_image = crop_widget.crop()
cropped_image.shape

输出

(40, 40, 40)

散点图和聚类图

使用stackview.scatterplot,您可以创建用于pandas DataFrames的交互式绘图(完整示例)。

stackview.scatterplot(df, 'area', 'feret_diameter_max', "selection", figsize=(5,4))

如果您想将此类DataFrame与它所属的标签图像的测量值并排显示,则可以使用clusterplot

stackview.clusterplot(image=image,
                     labels=labeled_image,
                     df=df,
                     column_x="area",
                     column_y="aspect_ratio", 
                     zoom_factor=1.6,
                     alpha=0.7)

此功能灵感来源于napari-clusters-plotter

clusterplot.gif

交互

可以使用interact探索图像处理函数的参数空间。

from skimage.filters.rank import maximum
stackview.interact(maximum, slice_image)

这对于实现图像处理工作流程的自定义函数可能很有用。

from skimage.filters import gaussian, threshold_otsu, sobel
def my_custom_code(image, sigma:float = 1, show_labels: bool = True):
    sigma = abs(sigma)
    blurred_image = gaussian(image, sigma=sigma)
    binary_image = blurred_image > threshold_otsu(blurred_image)
    edge_image = sobel(binary_image)
    
    if show_labels:
        return label(binary_image)
    else:
        return edge_image * 255 + image 

stackview.interact(my_custom_code, slice_image)

如果您想使用下拉菜单选择输入图像,则需要传递一个(name, image)对的字典作为context,例如context=globals()

image1 = imread("data/Haase_MRT_tfl3d1.tif")
image2 = image1[:,:,::-1]

stackview.interact(gaussian, context=globals())

要自动将insight-视图添加到函数的结果中,可以添加此功能。

@jupyter_displayable_output
def my_gaussian(image, sigma):
    return gaussian(image, sigma)

my_gaussian(image[60], 2)

img.png

哇哦

如果您将stackview与voila结合使用,您可以构建功能强大、交互式、基于浏览器的图像处理应用程序和演示者。只需在Jupyter笔记本中构建图形用户界面,然后使用以下命令启动它

img.png

贡献

欢迎贡献、错误报告和进一步开发的想法。

许可

在BSD-3许可证的条款下分发,“stackview”是免费且开源的软件。

问题

如果您遇到任何问题,请在image.sc上创建一个帖子,并附带详细描述和标签@haesleinhuepf

另请参阅

还有其他库正在做类似的事情

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

stackview-0.11.0.tar.gz (35.6 kB 查看哈希值)

上传时间

构建分发

stackview-0.11.0-py3-none-any.whl (43.1 kB 查看哈希值)

上传时间 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面