如何使用pydicom替换同一dicom文件中的像素数据,以便使用任何dicom查看器再次读取它?

时间:2018-02-19 06:51:56

标签: python dicom pydicom

我想处理一些DICOM文件,因此我正在测试pydicom我的工作,我认为这非常有用。

现在我想加载现有的DICOM文件,用另一个像素阵列替换像素数据阵列(例如预处理或字面上的另一个DICOM像素阵列),最重要的是,我想用任何DICOM查看器应用程序再次处理它。 / p>

对于此测试,我使用了以下教程代码。此代码加载测试数据文件。图像大小为64 * 64。下面的代码从原始数据中进行二次采样。之后,图像的大小为8 * 8,结果保存到" after.dcm"。

但是当我使用DICOM查看器应用程序(我使用' Dicompass')读取文件时,dicom图像的大小仍为64 * 64。我错过了什么?

我提到pydicom文档(http://pydicom.readthedocs.io/en/stable/getting_started.htmlhttps://pydicom.github.io/pydicom/stable/index.html)来解决我的问题。

# authors : Guillaume Lemaitre <g.lemaitre58@gmail.com>
# license : MIT

import pydicom
from pydicom.data import get_testdata_files

print(__doc__)

# FIXME: add a full-sized MR image in the testing data
filename = get_testdata_files('MR_small.dcm')[0]
ds = pydicom.dcmread(filename)

# get the pixel information into a numpy array
data = ds.pixel_array
print(data)

print('The image has {} x {} voxels'.format(data.shape[0],
                                        data.shape[1]))
data_downsampling = data[::8, ::8]
print('The downsampled image has {} x {} voxels'.format(
    data_downsampling.shape[0], data_downsampling.shape[1]))

# copy the data back to the original data set
ds.PixelData = data_downsampling.tostring()
# update the information regarding the shape of the data array
ds.Rows, ds.Columns = data_downsampling.shape

# print the image information given in the dataset
print('The information of the data set after downsampling: \n')
print(ds)
print(ds.pixel_array)
print(len(ds.PixelData))
ds.save_as("after.dcm")

1 个答案:

答案 0 :(得分:2)

代码看起来不错。但是,您没有覆盖原始文件。

使用以下命令加载文件:

<input type="text" value="hello" />
<input id="txtReset" type="text" value="world" />

其中原始文件名为“MR_small.dcm”。

然后使用以下命令保存文件:

filename = get_testdata_files('MR_small.dcm')[0]
ds = pydicom.dcmread(filename)

目标文件名不同。这意味着,原始文件仍然没有改变。

您应该在DICOM查看器中加载“after.dcm”以进行测试

OR

您应该在保存文件时覆盖该文件(ds.save_as("after.dcm") )。

不是问题的一部分,但如果您要创建像素数据更改的原始图像副本,建议您还修改数据集中的实例特定信息,如InstanceNumber(0020,0013),SOPInstanceUID(0008,0018) )等等。