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

Pydicom赋值PixelData后读取pixel_array报(3fff,3fff)标签错误求助

DICOM图像修改PixelData后读取pixel_array报错的解决方法

问题描述

按照Pydicom官方的图像降采样示例处理DICOM文件后,访问ds.pixel_array时触发错误:"Unexpected tag '(3fff, 3fff)' when parsing the Basic Table Offset item"。即使直接将原始ds.pixel_array转成字节赋值给ds.PixelData(代码如下),同样会触发该错误。用户怀疑原始DICOM文件存在损坏,但不清楚需要修改哪些标签才能正常读取。

复现代码

import pydicom

ds = pydicom.dcmread(f)
data = ds.pixel_array 
print(data.shape)
ds.PixelData = data.tobytes()
print(ds.pixel_array.shape)

解决方案

该错误源于VOI LUT(值查找表)相关元数据冲突或原始文件标签损坏,需要同步修改以下关键DICOM标签:

  • 清理VOI LUT相关异常标签
    错误中提到的(3fff, 3fff)是私有VOI LUT偏移表标签,原始文件的VOI LUT结构存在问题。重新赋值PixelData后,旧的VOI LUT元数据会导致解析冲突,需删除相关标签:

    # 删除冲突的VOI LUT标签
    target_tags = ['VOILUTSequence', 'VOILUTDescriptor', '(3fff,3fff)']
    for tag in target_tags:
        if tag in ds:
            del ds[tag]
    
  • 同步图像维度元数据
    如果执行了降采样操作,必须同步更新Rows和Columns标签,确保与新像素数据的维度一致:

    # 假设降采样后的数据为downsampled_data
    ds.Rows = downsampled_data.shape[0]
    ds.Columns = downsampled_data.shape[1]
    
  • 重置传输语法为未压缩格式
    若原始DICOM采用压缩传输语法(如JPEG),直接写入原始字节会导致解析错误,需强制设置为未压缩格式:

    from pydicom.uid import ImplicitVRLittleEndian
    ds.file_meta.TransferSyntaxUID = ImplicitVRLittleEndian
    
  • 保证像素数据格式匹配
    赋值PixelData时,要确保数据的 dtype 与DICOM的PixelRepresentation(0为无符号,1为有符号)、BitsAllocated、BitsStored标签一致:

    # 保持数据类型与原始像素数据一致
    ds.PixelData = data.astype(ds.pixel_array.dtype).tobytes()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:31:13