You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly Volume可视化CT肺部时内部切片被隐藏的问题排查

问题:3D CT数组可视化仅显示首尾切片

我尝试使用以下代码对尺寸为(119,116,116)的3D CT数组(参数value)进行可视化,目标是呈现肺部CT切片:

import numpy as np
import plotly.graph_objects as go

z, y, x = [np.arange(stop=i,step=1) for i in im.shape]
X,Y,Z = np.mgrid[0:im.shape[1], 0:im.shape[2],0:im.shape[0]]

fig = go.Figure(data=go.Volume(
    x=X.flatten(),
    y=Y.flatten(),
    z=Z.flatten(),
    value=np.transpose(im,(1,2,0)).flatten(),
    opacity=0.3,
    ))
fig.write_html("test.html")

实际可视化结果仅显示首尾切片,内部切片被隐藏,请问哪里操作有误?

问题根源与修正方案

你的代码存在两个核心问题:

  1. 坐标维度映射错误
    CT数组im的形状是(z, y, x)(119个切片,每个切片116×116像素),但mgrid生成的X,Y,Z维度顺序和value的转置逻辑不匹配,导致内部切片坐标重叠或未正确映射,最终只有首尾切片被渲染。
  2. Volume组件参数缺失
    Plotly的go.Volume默认不会主动显示内部切片,仅靠opacity无法让中间切片正常展示,需要明确配置slices参数控制切片可见性。

修正后的代码

import numpy as np
import plotly.graph_objects as go

# 假设im是你的(119,116,116)的CT数组
z_dim, y_dim, x_dim = im.shape

# 生成匹配的三维坐标:X对应x轴,Y对应y轴,Z对应z轴
X, Y, Z = np.mgrid[0:x_dim, 0:y_dim, 0:z_dim]

fig = go.Figure(data=go.Volume(
    x=X.flatten(),
    y=Y.flatten(),
    z=Z.flatten(),
    value=im.flatten(),  # 无需转置,直接使用原数组维度顺序
    opacity=0.3,
    # 开启各轴内部切片显示,可自定义显示间隔
    slices=dict(
        x=dict(show=True, locations=np.arange(0, x_dim, 10)),
        y=dict(show=True, locations=np.arange(0, y_dim, 10)),
        z=dict(show=True, locations=np.arange(0, z_dim, 5))
    ),
    # 适配肺部CT的颜色与数值范围
    colorscale='gray',
    isomin=-1000,  # CT空气值下限
    isomax=200     # CT软组织值上限
))

fig.write_html("test.html")

关键细节说明

  • 坐标匹配:确保X,Y,Z的维度和im的x,y,z一一对应,不需要额外转置value,直接展平原数组即可避免维度混乱。
  • 切片控制:slices参数的show=True会强制显示各轴指定位置的切片,locations可根据需求调整显示间隔,避免内部切片被遮挡。
  • CT值优化:设置isomin和isomax能过滤掉无关CT值,让肺部区域的可视化更清晰。

内容的提问来源于stack exchange,提问作者THEODOROPOULOS DIMITRIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:01:01