我有一个NumPy数组,想将其转换为NIfTI文件。通过文档,似乎PyNIfTI曾经可以使用以下方式实现:
image=NiftiImage(Array)
然而,PyNIfTI已不再得到支持。NiBabel是PyNIfTI的继任者,但似乎不支持此函数。我可能遗漏了什么。有人知道如何解决吗?
我有一个NumPy数组,想将其转换为NIfTI文件。通过文档,似乎PyNIfTI曾经可以使用以下方式实现:
image=NiftiImage(Array)
然而,PyNIfTI已不再得到支持。NiBabel是PyNIfTI的继任者,但似乎不支持此函数。我可能遗漏了什么。有人知道如何解决吗?
新版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文件格式,这也需要仿射变换。
接受的答案已经足够了。我在此补充一些详细的解释。
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)
即可。
同样适用于Nifti1Image
和Nifti2Image
。
np.eye(4)
对吧?即使有文档,我还是感到困惑 :( - Losses Don