将pixel_array替换为DICOM RT Dose文件 - 值更改 - pydicom

时间:2016-05-13 09:58:42

标签: python dicom pydicom

我有一个DICOM RT Dose文件,我想用新的更改原始pixel_array。问题在于,当我给某个像素一个新的值时,它在过程中的某个地方随机变化。下面给出了交换代码块。我一次只交换一个像素来检查问题所在,所以我知道它可以更快地完成:

print pixel_arrayFLK[86][85][78]
print dosem.pixel_array[86][85][78]
for a in range(zBinsTPS):
    for b in range(yBinsTPS):
        for c in range(xBinsTPS):
            dosem.pixel_array[a][b][c] = pixel_arrayFLK[a][b][c]
            if a == 86 and b == 85 and c == 78:
                print dosem.pixel_array[a][b][c]
                print pixel_arrayFLK[a][b][c]     

原始pixel_array是dosem.pixel_array,新的是pixel_arrayFLK。作为发生的事情的一个例子:

pixel_arrayFLK [86] [85] [78]的值为65813.原始dosem.pixel_array [86] [85] [78]的值为62947.交换后像素_arrayFLK [86] [85] [78]仍然有值65813而dosem.pixel_array [86] [85] [78]现在突然有277的值。

打印功能产量:

65813
62947
277
65813

但是,如果我将pixel_arrayFLK的所有值除以2,则交换正常。我真的不明白发生了什么。它可能与DICOM文件中的数据类型有关吗? DICOM中包含的更多信息:

(0028, 0002) Samples per Pixel                   US: 1
(0028, 0004) Photometric Interpretation          CS: 'MONOCHROME2'
(0028, 0100) Bits Allocated                      US: 16
(0028, 0101) Bits Stored                         US: 16
(0028, 0102) High Bit                            US: 15
(0028, 0103) Pixel Representation                US: 0
(7fe0, 0010) Pixel Data                          OW or OB: Array of 6750000 bytes

我有另一个DICOM文件,其中Bits Allocated = 32,Bits Stored = 32和High Bit = 31.此文件中的pixel_array交换看起来很好。

1 个答案:

答案 0 :(得分:1)

想出来。由于位为16,最大值为65536,其中65813将该值覆盖277,因此从0开始。