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

绘制DICOM图像时遇TypeError:图像数据形状(154,600,800)无效

解决TypeError: Invalid shape (154, 600, 800) for image data问题

这个错误的核心原因是:你读取的DICOM文件不是单张2D图像,而是包含154个切片的3D体积数据,它的像素数组形状为(切片数量, 图像高度, 图像宽度),而plt.imshow()只能直接处理2D(单张灰度图)或3D(RGB/A彩色图)格式的图像数据,直接传入3D体积数组自然会报错。

下面给出两种可行的解决方式:

方式一:显示单个切片

如果只需要查看某一张切片,直接给像素数组指定切片索引即可,比如显示第0个切片或者中间位置的切片:

修改后的代码片段:

# 提取像素数据并显示单个切片
pixel_array = ds.pixel_array
# 显示第0个切片(也可以换成77,对应中间位置的切片)
plt.imshow(pixel_array[0], cmap='gray')
plt.title(f"Slice 0 of {file}")
plt.show()

方式二:遍历显示所有切片

如果需要查看全部154个切片,可以在现有循环里再加一层遍历切片的循环:

修改后的完整代码:

import os
import pydicom
import matplotlib.pyplot as plt

os.chdir('/content/drive/MyDrive/Data')
dicom_files = [f for f in os.listdir() if f.endswith('.dcm')]

for file in dicom_files:
    ds = pydicom.dcmread(file)
    print(f"Patient Name: {ds.PatientName}")
    print(f"Patient ID: {ds.PatientID}")
    print(f"Study Date: {ds.StudyDate}")
    print(f"Study Description: {ds.StudyDescription}")
    
    pixel_array = ds.pixel_array
    # 遍历所有切片
    for slice_idx in range(pixel_array.shape[0]):
        plt.imshow(pixel_array[slice_idx], cmap='gray')
        plt.title(f"File: {file} | Slice {slice_idx+1}/{pixel_array.shape[0]}")
        plt.show()

额外提示:少数3D DICOM数据会把维度顺序存为(高度, 宽度, 切片数),如果上面的索引方式显示图像异常,可以检查pixel_array.shape的输出,调整索引顺序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:15:10