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

Exchanging the pixel_array for a DICOM RT Dose file - values change - 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,交换后pixel_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 文件,其中分配的位 = 32,存储的位 = 32,高位 = 31。此文件中的 pixel_array 交换工作正常。

想通了。由于位数为 16,因此最大值为 65536,其中 65813 覆盖此值 277,因此从 0 开始。