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")
实际可视化结果仅显示首尾切片,内部切片被隐藏,请问哪里操作有误?
问题根源与修正方案
你的代码存在两个核心问题:
- 坐标维度映射错误
CT数组im的形状是(z, y, x)(119个切片,每个切片116×116像素),但mgrid生成的X,Y,Z维度顺序和value的转置逻辑不匹配,导致内部切片坐标重叠或未正确映射,最终只有首尾切片被渲染。 - 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
相关产品推荐
相关产品推荐

