跳转到主要内容

Dash的体积切片器

项目描述

CI

dash_slicer

Dash的体积切片器

在给定维度上创建切片视图,并允许将这些视图链接起来,以帮助导航。支持各向异性数据、蒙版叠加等。

状态

此作品标记为alpha - 一些基本功能仍在开发中,API的一些部分可能在未来的版本中更改。

安装

$ pip install dash-slicer

Dash-slicer依赖于Python 3.6+以及一些依赖项

使用示例

import dash
from dash import html
from dash_slicer import VolumeSlicer
import imageio

app = dash.Dash(__name__, update_title=None)

vol = imageio.volread("imageio:stent.npz")
slicer = VolumeSlicer(app, vol)

app.layout = html.Div([slicer.graph, slicer.slider, *slicer.stores])

if __name__ == "__main__":
    app.run_server(debug=True, dev_tools_props_check=False)

请参阅指南获取更多示例和说明。一个使用dash-slicer的完整应用程序是dash-vocid-xray (源代码)。

许可

此代码以MIT许可发布。

开发者

  • 请确保您已安装具有适当依赖项的Python,例如通过venv

  • 运行pip install -e .以安装该软件包。

  • 使用例如python examples/all_features.py运行示例。

  • 使用black .自动格式化。

  • 使用flake8 .进行代码检查。

  • 使用pytest .运行测试。

  • 需要时使用python update_docs_in_readme.py更新readme。

每次提交PR时,一个与您分支同名的应用程序都会部署到Dash playground实例中,以便您可以更改是否您的更改破坏了包。

发布流程

  • __init__.py中增加版本(并提交此更改)。
  • 运行git tag v?.? && git push origin v?.?
  • 在GH上,将该标签转换为发布版本并编写发布说明。
  • 清除dist目录。
  • 运行python setup.py sdist bdist_wheel
  • 运行twine upload dist/*
  • 在dash-docs中增加dash-slicer的版本。

参考

VolumeSlicer类

class VolumeSlicer(app, volume, *, spacing=None, origin=None, axis=0, reverse_y=True, clim=None, scene_id=None, color=None, thumbnail=True)

一个用于在Dash中显示3D图像数据的slicer对象。实例化时可以提供以下参数

  • app (dash.Dash):Dash应用程序实例。
  • volume (ndarray):要切片的3D numpy数组。假定维度顺序为zyx。如果情况不是这样,您可以使用np.swapaxes来使其如此。
  • spacingfloat元组):每个维度(zyx)中体素的距离。
  • originfloat元组):每个维度(zyx)的偏移量。
  • axisint):要切片的维度。默认为0。
  • reverse_ybool):是否反转y轴,使得切片的原点在右上角而不是左下角。默认为True。注意:将此设置为False会影响性能,请参阅#12。这已被修复,但修复尚未与Dash一起发布。
  • climfloat元组):(初始)对比度限制。默认为体积的最小值和最大值。
  • scene_idstr):此slicer所属的场景。具有相同scene-id的slicer使用线条指示器显示彼此的位置。默认情况下,此值来自id(volume)
  • colorstr):此slicer的颜色。默认颜色取决于轴的蓝色、橙色或绿色阴影。将空字符串设置为防止绘制此slicer的指示器。
  • thumbnailintbool):上传到客户端的低分辨率数据的首选大小。如果为False,则客户端上传全分辨率数据。如果为True(默认),则使用默认值32。

请注意,这不是一个Dash组件。组成slicer的组件(并且必须在布局中存在)是:slicer.graphslicer.sliderslicer.stores

方法VolumeSlicer.create_overlay_data(mask, color=None)

给定一个3D掩码数组,创建一个可以用于slicer.overlay_data输出的对象。将掩码设置为None以清除掩码。颜色可以是十六进制颜色或rgb/rgba元组。或者,颜色可以是此类颜色的列表,定义颜色图。

属性VolumeSlicer.axisint):要切片的轴。

属性VolumeSlicer.clim:一个dcc.Store,用作Output,表示对比度限制为2个元素的元组。此值可能不太经常更改(例如,在滑块拖动时),因为每次更改都会重新创建缩略图数据。

属性VolumeSlicer.extra_traces:一个dcc.Store,用作Output,以定义在此slicer中显示的附加跟踪。数据必须是一个字典列表,其中每个字典表示一个原始跟踪对象。

属性VolumeSlicer.graph:此slicer的dcc.Graph。使用graph.figure来访问Plotly图对象。

属性VolumeSlicer.nslicesint):此slicer的切片数量。

属性 VolumeSlicer.overlay_data:用于叠加数据的输出 dcc.Store。此数据的形式被视为实现细节;用户应使用 create_overlay_data 来创建它。

属性 VolumeSlicer.scene_id (str):此切片器的“虚拟场景”id。具有相同 scene_id 的切片器会显示彼此的位置。

属性 VolumeSlicer.slider:用于更改此切片器索引的 dcc.Slider。如果您不想使用滑块,请将其包裹在一个样式为 display: none 的 div 中。

属性 VolumeSlicer.state:表示切片器当前状态的 dcc.Store(存在于 slicer.stores 中)。此存储库旨在用作状态或输入。其数据是一个具有以下字段的字典

  • "index":整数切片索引。
  • "index_changed":一个布尔值,指示索引是否自上次更改。
  • "xrange":x 维度(2D)的视图范围(2 个浮点数)。
  • "yrange":y 维度(2D)的视图范围(2 个浮点数)。
  • "zpos":沿轴的浮点位置,以场景坐标表示。
  • "axis":此切片器的轴(整数)。
  • "color":此切片器的颜色(字符串)。

存储库的 id 是一个字典,因此它可以用于模式匹配输入。其字段是:context、scene、name。其中 scene 是 scene_id,name 是 "state"。

属性 VolumeSlicer.stores:切片器需要工作的 dcc.Store 对象列表。这些必须添加到应用程序布局中。请注意,像 stateextra_traces 这样的公共存储库也存在于此列表中。

对切片器状态做出反应

可以接收切片器位置和视图范围更新的通知。要为此特定 scene_id 的所有切片器获取此功能,请创建一个如下的 模式匹配输入

Input({"scene": scene_id, "context": ALL, "name": "state"})

有关详细信息,请参阅 state 属性。

设置切片器位置

要程序化设置切片器的位置,创建一个具有以下字段的 dcc.Store

  • 'context':此存储库的唯一名称。
  • 'scene':要设置位置的切片器对象的 scene_id。
  • 'name':'setpos'

存储库中的值必须是一个具有 3 个元素的元组(x,y,z),在场景坐标中表示。要仅应用一个维度的位置,例如使用 (None, None, x)

性能提示

在包含切片器对象的应用程序中,通常会有很多交互。为了实现平滑的用户体验,性能至关重要。以下是一些有助于此的建议

  • 最重要的是,在以调试模式运行服务器时,请考虑设置 dev_tools_props_check=False
  • 还请考虑使用 update_title=None 创建 Dash 应用程序。
  • reverse_y 设置为 False 会负面地影响性能。这将在 Plotly/Dash 的未来版本中得到修复。
  • 为了获得平滑的体验,请避免触发不必要的图形更新。
  • 当添加使用切片器位置的回调时,请使用(速率限制的)state 存储而不是滑块值。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分布

dash-slicer-0.3.1.tar.gz (20.0 kB 查看哈希值)

上传于 源代码

构建分发

dash_slicer-0.3.1-py3-none-any.whl (19.8 kB 查看哈希值)

上传于 Python 3