使用 nibabel 以 "SPM" 风格保存 nifti
Using nibabel to save nifti in "SPM" style
我已经使用 python 分析了一些 fMRI 数据,现在想将我的结果保存为 niftis,然后我可以将其用于 SPM 分析。
我的数据分数是一个形状为 (97, 115, 97) 的 float64 数组。我使用以下代码保存它:
import nibabel as nib
import nilearn
scores_image = nib.Nifti1Image(scores,affine = np.eye(4))
nib.save(scores_image,"scores.nii")
但是,当我将数据加载到 SPM 中时,我注意到原点和比例都与 SPM 期望的不同:
Comparison of my scores.nii (upper image) and a standard SPM nifti
有谁知道哪个代码会自动保存我的分数变量,其来源和大小与 SPM 期望的相同?
更新: 这是一张 SPM 图像的 header,它与我自己的图像不同之处在于:
comp_img = nib.load('spmT_0014.nii')
print(comp_img.header)
<class 'nibabel.nifti1.Nifti1Header'> object, endian='<'
sizeof_hdr : 348
data_type : b''
db_name : b''
extents : 0
session_error : 0
regular : b'r' ## ---> b''
dim_info : 0
dim : [ 3 97 115 97 1 1 1 1]
intent_p1 : 0.0
intent_p2 : 0.0
intent_p3 : 0.0
intent_code : none
datatype : float32
bitpix : 32
slice_start : 0
pixdim : [1. 2. 2. 2. 0. 0. 0. 0.] ## ---> [1. 1. 1. 1. 1. 1. 1. 1.]
vox_offset : 0.0
scl_slope : nan
scl_inter : nan
slice_end : 0
slice_code : unknown
xyzt_units : 10 ## ---> 0
cal_max : 0.0
cal_min : 0.0
slice_duration : 0.0
toffset : 0.0
glmax : 0
glmin : 0
descrip : b''
aux_file : b''
qform_code : aligned ## ---> unknown
sform_code : aligned
quatern_b : 0.0
quatern_c : 0.0
quatern_d : 0.0
qoffset_x : -96.5 ## ---> 0
qoffset_y : -132.5 ## ---> 0
qoffset_z : -78.5 ## ---> 0
srow_x : [ 2. 0. 0. -96.5] ## ---> [1. 0. 0. 0.]
srow_y : [ 0. 2. 0. -132.5] ## ---> [0. 1. 0. 0.]
srow_z : [ 0. 0. 2. -78.5] ## ---> [0. 0. 1. 0.]
intent_name : b''
magic : b'n+1'
好的,以防其他人在某个时候尝试这样做,我已经找到了一种使用以下代码来做到这一点的方法:
from nilearn import image
import nibabel as nib
comp_img = nib.load('spmT_0014.nii')
scores_img = image.new_img_like(comp_img, scores, copy_header=False)
这给了我以下信息(上图是 SPM,下图是我创建的):Comparison in SPM
我已经使用 python 分析了一些 fMRI 数据,现在想将我的结果保存为 niftis,然后我可以将其用于 SPM 分析。
我的数据分数是一个形状为 (97, 115, 97) 的 float64 数组。我使用以下代码保存它:
import nibabel as nib
import nilearn
scores_image = nib.Nifti1Image(scores,affine = np.eye(4))
nib.save(scores_image,"scores.nii")
但是,当我将数据加载到 SPM 中时,我注意到原点和比例都与 SPM 期望的不同: Comparison of my scores.nii (upper image) and a standard SPM nifti
有谁知道哪个代码会自动保存我的分数变量,其来源和大小与 SPM 期望的相同?
更新: 这是一张 SPM 图像的 header,它与我自己的图像不同之处在于:
comp_img = nib.load('spmT_0014.nii')
print(comp_img.header)
<class 'nibabel.nifti1.Nifti1Header'> object, endian='<'
sizeof_hdr : 348
data_type : b''
db_name : b''
extents : 0
session_error : 0
regular : b'r' ## ---> b''
dim_info : 0
dim : [ 3 97 115 97 1 1 1 1]
intent_p1 : 0.0
intent_p2 : 0.0
intent_p3 : 0.0
intent_code : none
datatype : float32
bitpix : 32
slice_start : 0
pixdim : [1. 2. 2. 2. 0. 0. 0. 0.] ## ---> [1. 1. 1. 1. 1. 1. 1. 1.]
vox_offset : 0.0
scl_slope : nan
scl_inter : nan
slice_end : 0
slice_code : unknown
xyzt_units : 10 ## ---> 0
cal_max : 0.0
cal_min : 0.0
slice_duration : 0.0
toffset : 0.0
glmax : 0
glmin : 0
descrip : b''
aux_file : b''
qform_code : aligned ## ---> unknown
sform_code : aligned
quatern_b : 0.0
quatern_c : 0.0
quatern_d : 0.0
qoffset_x : -96.5 ## ---> 0
qoffset_y : -132.5 ## ---> 0
qoffset_z : -78.5 ## ---> 0
srow_x : [ 2. 0. 0. -96.5] ## ---> [1. 0. 0. 0.]
srow_y : [ 0. 2. 0. -132.5] ## ---> [0. 1. 0. 0.]
srow_z : [ 0. 0. 2. -78.5] ## ---> [0. 0. 1. 0.]
intent_name : b''
magic : b'n+1'
好的,以防其他人在某个时候尝试这样做,我已经找到了一种使用以下代码来做到这一点的方法:
from nilearn import image
import nibabel as nib
comp_img = nib.load('spmT_0014.nii')
scores_img = image.new_img_like(comp_img, scores, copy_header=False)
这给了我以下信息(上图是 SPM,下图是我创建的):Comparison in SPM