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

将DICOM文件转为numpy数组后.shape仅返回(171,)的问题咨询

DICOM文件读取与图像显示问题解答

为什么numpy数组shape仅返回(171,)

你当前代码里display.append(medical_image)添加的是pydicom读取后的Dataset对象(包含DICOM元数据、像素数据等完整文件信息),并非图像的像素数组。将这些Dataset对象转为numpy数组时,数组的每个元素都是独立的文件实例,因此整体维度只有文件数量这一个维度,即(171,)。

你的想法是正确的——获取图像维度才能用Matplotlib显示

Matplotlib显示图像需要的是二维/三维像素数组,而非DICOM的文件对象。你需要修改代码,将提取出的像素数组存入列表,再转成numpy数组,这样就能得到包含图像尺寸的多维数组。

修正后的代码示例

import glob
import pydicom
import numpy as np
import matplotlib.pyplot as plt

# 用于存储图像像素数组的列表
image_arrays = []
path = "./path/*.dcm"

for f in glob.iglob(path):
    medical_image = pydicom.dcmread(f)
    # 提取像素数组并转为float类型
    image = medical_image.pixel_array.astype(float)
    # 存储像素数组而非DICOM文件对象
    image_arrays.append(image)

# 转换为numpy数组
image_arrays = np.array(image_arrays)
# 打印数组形状,单帧DICOM会返回(171, 图像高度, 图像宽度)
print(image_arrays.shape)

# 用Matplotlib显示第一张图像(DICOM常用灰度色图)
plt.imshow(image_arrays[0], cmap="gray")
plt.axis('off')
plt.show()

补充说明

  • 如果你的DICOM是多帧动态序列,像素数组会是三维结构,转成numpy数组后形状会是(171, 帧数, 图像高度, 图像宽度),显示时需要指定具体帧数(如image_arrays[0][5]表示第一个文件的第6帧)。
  • 部分DICOM图像需要调整窗宽窗位才能清晰显示,基础显示可先用灰度色图,后续可根据需求添加窗宽窗位处理逻辑。

内容的提问来源于stack exchange,提问作者Guilherme de Lima Schwaikartt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:41:01