gpt4 book ai didi

python - 如何使用 NiBabel 编写彩色 3D NIfTI?

转载 作者:行者123 更新时间:2023-11-28 16:20:34 24 4
gpt4 key购买 nike

我用 nibabel 写出 3D 灰度 .nii 文件并在 NIfTI 查看器(Mango、MCIcron)中打开它们没有问题。但是我无法写出 3D 颜色,因为每个 RGB 平面都被解释为不同的体积。例如。这个的输出:

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 的一个好处是它如何根据提供给它的 numpy 数组自动设置 header 。然而,这是一个模棱两可的情况,如果我打印标题信息,我可以看到它将数据类型设置为 2 (uint8),这大概就是为什么观众将其解释为单独的卷,而不是 RGB24。我在 API 中没有看到任何官方支持用于设置数据类型,但是 the documentation确实提到那些有“巨大勇气”的人可以进入原始领域。这样做,即

hdr = ni_img.header
raw = hdr.structarr
raw['datatype'] = 128

用于更改 header 值

print(hdr)

给出“数据类型: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,则会引发异常,因此大概是我对原始 header 的黑客攻击导致了一些不一致。

那么,有没有合适的方法来做到这一点?

最佳答案

感谢 Neuroimaging 分析邮件列表上的 matthew.brett,我能够像这样写出 3-d 彩色 NIfTI:

# ras_pos is a 4-d numpy array, with the last dim holding RGB
shape_3d = ras_pos.shape[0:3]
rgb_dtype = np.dtype([('R', 'u1'), ('G', 'u1'), ('B', 'u1')])
ras_pos = ras_pos.copy().view(dtype=rgb_dtype).reshape(shape_3d) # copy used to force fresh internal structure
ni_img = nib.Nifti1Image(ras_pos, np.eye(4))
nib.save(ni_img, output_path)

关于python - 如何使用 NiBabel 编写彩色 3D NIfTI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40534333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com