1

numpy を使用してボリュームからスライスを抽出しようとしています。ボリュームは 512x512x132 で、スライス番号は 66 が必要です。各ボクセルは符号なしの 16 ビット整数です。

私のコードは次のとおりです。

import numpy

original = numpy.fromfile(filepath, dtype=numpy.uint16)
original = numpy.reshape(original, (512,512,132))

slice = original[:,:,66]

f = open('test.rawl', 'w')
slice.tofile(f)
f.close()

コードはきれいに完成していますが、スライスを外部プログラムで開くと、スライス データではなくゴミです。

私が間違っていることは何ですか?

ありがとう

4

1 に答える 1

1

最初の問題は、軸が間違っていることです。使用したい 512x512 画像の 132 レイヤーがあると仮定します。

original = numpy.fromfile(filepath, dtype=numpy.uint16).reshape((132, 512, 512))

次に、スライスのために次のようにします。

slc = original[66]

また、Numpy 配列などのバイナリ データは以下を使用します。

f = open('test.raw', 'wb')

モードの「b」はバイナリ用です。そうしないと、Python はユーザーがテキストを書き込もうとしていると見なし、改行をシステムに適した形式に変換するなどの処理を行います。

ちなみに、このndarray.tofile()メソッドはファイル名も受け取るので、特別な理由がない限り、最初にファイル ハンドルを作成する必要はありません。あなたはただ使うことができます

arr.tofile('test.raw')

最後の注意:slice変数として使用しないようにしてください。これは Python の組み込みの名前であり、他の名前でシャドウイングすると問題が発生する可能性があります。

于 2012-11-09T15:45:04.587 に答える