从NumPy数组创建Nifti文件

14

我有一个NumPy数组,想将其转换为NIfTI文件。通过文档,似乎PyNIfTI曾经可以使用以下方式实现:

image=NiftiImage(Array)               

然而,PyNIfTI已不再得到支持。NiBabel是PyNIfTI的继任者,但似乎不支持此函数。我可能遗漏了什么。有人知道如何解决吗?

2个回答

25

新版NiBabel包中的替换函数被称为Nifti1Image。但是,您需要传递仿射变换来定义该图像相对于某个参考框架的位置。

最简单的形式如下:

import nibabel as nib
import numpy as np

data = np.arange(4*4*3).reshape(4,4,3)

new_image = nib.Nifti1Image(data, affine=np.eye(4))

你也可以使用Nifti2Image将数据写入NIfTI-2文件格式,这也需要仿射变换。


非常感谢!我在文档中完全忽略了这一点。这对我帮助很大!(由于这是我第一次使用 Stack Overflow,所以我无法投票支持。) - Michelle
@Michelle,很高兴能帮助你并欢迎来到StackOverflow。不用担心不能点赞,获取声望需要一些时间。你可以接受答案,这也会给你一些声望。同时,它也会向更大的社区表明你已经找到了一个可行的答案。 - Oliver W.
再次感谢 :-) 但是我该如何将我的向量数据((i,j,k)/体素),即(0.23, 0.48, 0.84)对应到数组位置[1,1,1]的类型中呢? - Michelle
那就是它了!再次感谢您的时间 :D - Michelle
1
@Michelle 嗯,我应该一直使用 np.eye(4) 对吧?即使有文档,我还是感到困惑 :( - Losses Don
显示剩余4条评论

5

接受的答案已经足够了。我在此补充一些详细的解释。

import nibabel as nib
import numpy as np

data = np.arange(4*4*3).reshape(4,4,3)

new_image = nib.Nifti1Image(data, affine=np.eye(4))

该函数 np.eye(n) 返回一个n乘n的单位矩阵。
在这里,np.eye(4) 用于生成4乘4的矩阵,因为Nifti处理4乘4文件格式。所以,将3乘3矩阵通过与4乘4单位矩阵相乘转换为4乘4矩阵。

因此,始终使用affine = np.eye(4)即可。

同样适用于Nifti1ImageNifti2Image


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接