元の pixel_array を新しいものに変更したい DICOM RT Dose ファイルがあります。問題は、特定のピクセルに新しい値を与えると、プロセスのどこかでランダムに変化することです。交換用のコード ブロックを以下に示します。問題がどこにあるかを確認するためだけに、一度に 1 ピクセルずつ交換を行うので、はるかに高速に実行できることがわかります。
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
Bits Allocated = 32、Bits Stored = 32、および High Bit = 31 の別の DICOM ファイルがあります。このファイルの pixel_array 交換は一見問題なく動作します。