如何使用pydicom替换DICOM图像中的像素数据?

3

我正在尝试替换给定示例图像中的像素数据。我的代码:

import matplotlib.pyplot as plt
from pydicom import dcmread
from pydicom.data import get_testdata_file

fpath = get_testdata_file('CT_small.dcm')
ds = dcmread(fpath)

# replacing rows and columens with new values 
ds.Rows = 200 
ds.Columns = 200 
# replacing pixel data with new image (type: numpy.ndarray)
ds.pixel_array = data[layer].tobytes()
...

我收到以下错误信息:
AttributeError: can't set attribute

更新

好的,如果我使用

ds.PixelData = data[layer].tobytes()

取代
ds.pixel_array = data[layer].tobytes()

我得到了一张图片,但它看起来与原始图片(data[layer])完全不同。我错过了什么?


错误出现在哪一行? - Tehnorobot
抱歉,在第10行:ds.pixel_array = data[layer].tobytes()。 - Sebastian
很可能数据不符合预期格式。如果您使用CT数据,则期望数据为单色,每像素2个字节。您可能需要相应地转换或重塑您的numpy数组。由于我们没有关于您尝试设置的数据的信息,因此这只是一个猜测。 - MrBean Bremen
是的,我认为你可能是对的。新数据是200x200的float32类型。我已经调整了行和列。添加.astype(np.float16)就完成了任务。非常感谢! - Sebastian
1个回答

1
这解决了我的问题:

ds.PixelData = data[layer].astype(np.float16).tobytes()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接