0

元の 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 交換は一見問題なく動作します。

4

1 に答える 1

1

理解した。ビットが 16 であるため、最大値は 65536 で、65813 はこの値を 277 で上書きするため、0 から始まります。

于 2016-05-13T10:32:39.113 に答える