You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用Python的PyDicom无法打开特殊DICOM文件:读取标签正常但图像数据报错

Troubleshooting Missing Pixel Array in Proprietary DICOM with Attached JPEG

Hey, I’ve dealt with this exact scenario before when working with proprietary DICOM exports that bundle JPEGs—let’s walk through the most likely fixes for your issue:

1. Check if the Standard PixelData Tag Exists

Proprietary imaging vendors often store image data in private tags instead of the standard (0x7FE0, 0x0010) PixelData tag. First, confirm if the standard tag is present:

# Check for standard PixelData tag
print("Standard PixelData present:", (0x7FE0, 0x0010) in myfile)

# List all tags to spot private image-related tags
for elem in myfile.elements():
    print(f"{elem.tag}: {elem.name}")

If PixelData is missing, look for private tags labeled something like "Vendor Image Data" or with a vendor-specific tag number. Once found, you can extract the raw bytes and decode them directly as JPEG:

# Replace with the private tag you found
jpeg_bytes = myfile[(0xXXXX, 0xYYYY)].value

from PIL import Image
import io
img = Image.open(io.BytesIO(jpeg_bytes))
img.show()

2. Install JPEG Decoding Dependencies

Even if PixelData exists, PyDicom requires additional libraries to decode JPEG-based transfer syntaxes. Install the full set of required packages:

pip install pydicom[pillow, pylibjpeg, pylibjpeg-libjpeg]

After installation, try accessing pixel_array again—this should resolve decoding errors for most standard JPEG transfer syntaxes.

3. Validate and Fix Transfer Syntax

Proprietary formats sometimes use non-standard transfer syntax UIDs. Check what your file is using:

print("Transfer Syntax UID:", myfile.file_meta.TransferSyntaxUID)

If it’s a non-standard UID, try forcing a compatible JPEG transfer syntax to see if PyDicom can decode it:

from pydicom.uid import JPEGBaseline

myfile.file_meta.TransferSyntaxUID = JPEGBaseline
try:
    pixel_data = myfile.pixel_array
    print(f"Success! Pixel array shape: {pixel_data.shape}")
except Exception as e:
    print(f"Error after setting transfer syntax: {str(e)}")

4. Extract the Attached JPEG Directly

Since you mentioned an attached .jpeg file, the DICOM might be using the EncapsulatedDocument tag to embed the image. Check for this tag and extract the file:

# Check for embedded document tag
if (0x42, 0x01) in myfile:
    embedded_data = myfile[(0x42, 0x01)].value
    mime_type = myfile.get((0x42, 0x02), "image/jpeg").value
    
    if mime_type == "image/jpeg":
        with open("extracted_image.jpeg", "wb") as f:
            f.write(embedded_data)
        
        # Open the extracted image
        from PIL import Image
        Image.open("extracted_image.jpeg").show()

If none of these steps work, check the imaging vendor’s documentation—they often publish details on their proprietary DICOM extensions or required decoding steps.

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

火山引擎 最新活动