3Dグレイスケールの.niiファイルをnibabelで書き出し、NIfTIビューア(Mango、MCIcron)で開くのに問題はありませんでした。しかし、私は各RGBプレーンが異なるボリュームとして解釈されているので、3Dカラーを書き出すことはできませんでした。例えば。これからの出力:NiBabelで3D NIfTIを作成するには?
import nibabel as nib
import numpy as np
nifti_path = "/my/local/path"
test_stack = (255.0 * np.random.rand(20, 201, 202, 3)).astype(np.uint8)
ni_img = nib.Nifti1Image(test_stack, np.eye(4))
nib.save(ni_img, nifti_path)
は、3つの別々の20x201x202ボリュームと見なされます。私はまた、最初の軸(つまり、np.random.rand(3,20,201,202))にカラープレーンを配置しようとしましたが、同じ問題が発生します。ちょっと見てみると、24ビットRGB平面画像の場合、128に設定する必要のある「データセット」フィールドがあるようです。 nibabelの素晴らしい点の1つは、numpy配列に基づいてヘッダーを自動的に設定する方法です。しかし、これはあいまいなケースです。ヘッダー情報を印刷すると、データ型を2(uint8)に設定することができます。これは、視聴者がRGB24ではなく別のボリュームとして解釈しているためです。 the documentationには、「勇気のある人」の生のフィールドへのアクセスが記載されていますが、APIには公式のサポートはありません。ヘッダー値
print(hdr)
を変更するには、この、すなわち
hdr = ni_img.header
raw = hdr.structarr
raw['datatype'] = 128
作品を行うと、 "データ型:RGB" を与えるが、
nib.save(ni_img, nifti_path)
を書くとき、私はエラーを取得する:
File "<python path>\lib\site-packages\nibabel\arraywriters.py", line 126, in scaling_needed
raise WriterError('Cannot cast to or from non-numeric types')
nibabel.arraywriters.WriterError: Cannot cast to or from non-numeric types
例外が発生した場合いくつかのarr_dtype!= out_dtype、おそらく私の生のヘッダーのハッキングは、いくつかの不一致を引き起こしています。
これを行う適切な方法はありますか?