如何在没有图像偏移的情况下在pydicom中读取和写入多帧DICOM文件?

2024-05-12 03:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我用pydicom读取一个多帧DICOM文件,然后将其写入一个新文件。但是,当我打开DICOM文件时,图像有偏移/移位

ds = pydicom.dcmread('./Multiframe/0020.dcm')
arr  = ds.pixel_array
ds.PixelData = encapsulate([arr[0].tobytes(),
                            arr[1].tobytes(),                 
                            arr[2].tobytes(),
                            arr[3].tobytes(),
                            arr[4].tobytes(),
                            arr[5].tobytes(),
                            arr[6].tobytes(),
                            arr[7].tobytes(),
                            arr[8].tobytes(),
                            arr[9].tobytes(),
                            arr[10].tobytes()])

ds.save_as('new.dcm', write_like_original=False)

代码有什么问题?如果我写一个简单的图像(不是多帧图像),它就可以工作,问题在于封装

原件:the original image, an RGB ultrasound scan, presented on a viewer

之后:the program's output, with a slight offset, presented by the same viewer


Tags: 文件图像encapsulatedsarraydicomarrpixel
1条回答
网友
1楼 · 发布于 2024-05-12 03:29:54

Encapsulation像素数据(单帧和多帧)仅用于压缩传输语法,如JPEG或RLE无损。如果有未压缩的语法,如显式VR Little Endian,则无需封装:

ds = pydicom.dcmread('./Multiframe/0020.dcm')
arr  = ds.pixel_array
if ds.file_meta.TransferSyntaxUID.is_compressed:
    raise AttributeError("Encapsulation required for compressed transfer syntaxes")

ds.PixelData = arr.tobytes()
ds.save_as('new.dcm', write_like_original=False)

相关问题 更多 >