如何在没有图像偏移的情况下在 pydicom 中读取然后写入多帧 DICOM 文件?
How do I read and then write a multi-frame DICOM file in pydicom without an image offset?
我用pydicom读了一个多帧DICOM文件,然后我把它写入一个新文件。但是,当我打开 DICOM 文件时,图像有一个 offset/shift.
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)
代码有什么问题?如果我写一个简单的图像(不是多帧)它就可以工作,问题在于封装。
原文:
之后:
Encapsulation of Pixel Data(单帧和多帧)仅在压缩传输语法中需要,例如 JPEG 或 RLE Lossless。如果您有未压缩的语法,例如 Explicit 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)
我用pydicom读了一个多帧DICOM文件,然后我把它写入一个新文件。但是,当我打开 DICOM 文件时,图像有一个 offset/shift.
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)
代码有什么问题?如果我写一个简单的图像(不是多帧)它就可以工作,问题在于封装。
原文:
之后:
Encapsulation of Pixel Data(单帧和多帧)仅在压缩传输语法中需要,例如 JPEG 或 RLE Lossless。如果您有未压缩的语法,例如 Explicit 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)