Dash的体积切片器
项目描述
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
来使其如此。spacing
(float
元组):每个维度(zyx)中体素的距离。origin
(float
元组):每个维度(zyx)的偏移量。axis
(int
):要切片的维度。默认为0。reverse_y
(bool
):是否反转y轴,使得切片的原点在右上角而不是左下角。默认为True。注意:将此设置为False会影响性能,请参阅#12。这已被修复,但修复尚未与Dash一起发布。clim
(float
元组):(初始)对比度限制。默认为体积的最小值和最大值。scene_id
(str
):此slicer所属的场景。具有相同scene-id的slicer使用线条指示器显示彼此的位置。默认情况下,此值来自id(volume)
。color
(str
):此slicer的颜色。默认颜色取决于轴的蓝色、橙色或绿色阴影。将空字符串设置为防止绘制此slicer的指示器。thumbnail
(int
或bool
):上传到客户端的低分辨率数据的首选大小。如果为False
,则客户端上传全分辨率数据。如果为True
(默认),则使用默认值32。
请注意,这不是一个Dash组件。组成slicer的组件(并且必须在布局中存在)是:slicer.graph
、slicer.slider
和slicer.stores
。
方法VolumeSlicer.create_overlay_data(mask, color=None)
给定一个3D掩码数组,创建一个可以用于slicer.overlay_data
输出的对象。将掩码设置为None
以清除掩码。颜色可以是十六进制颜色或rgb/rgba元组。或者,颜色可以是此类颜色的列表,定义颜色图。
属性VolumeSlicer.axis
(int
):要切片的轴。
属性VolumeSlicer.clim
:一个dcc.Store
,用作Output,表示对比度限制为2个元素的元组。此值可能不太经常更改(例如,在滑块拖动时),因为每次更改都会重新创建缩略图数据。
属性VolumeSlicer.extra_traces
:一个dcc.Store
,用作Output,以定义在此slicer中显示的附加跟踪。数据必须是一个字典列表,其中每个字典表示一个原始跟踪对象。
属性VolumeSlicer.graph
:此slicer的dcc.Graph
。使用graph.figure
来访问Plotly图对象。
属性VolumeSlicer.nslices
(int
):此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
对象列表。这些必须添加到应用程序布局中。请注意,像 state
和 extra_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
存储而不是滑块值。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。