| 图源
Nifti(Neuroimaging Informatics Technology Initiative,神经影像信息学技术倡议)文件格式,是目前各大神经影像分析工具普遍兼容的体素水平的数据格式,也是在进行神经影像研究中最常见的一种数据格式。简单点看它,它就是一个三维数组(sMRI)或者四维数组(fMRI、dMRI),再套上一个头部数据。数组里包含的就是图像体素值数据本身,头部数据里包含空间和体素信息,具体的文件结构不必理会,只要能用工具解析它即可。Matlab从2017b后就引入了专门的Nifti文件的解析函数1,SPM12(Statistical Parametric Mapping,统计参数映射),dpabi等工具包也提供了Nifti文件的解析接口,NIfTI_20140122是专门的Nifti文件的解析处理工具包,现在好像没有更新了,不过也比较好用。python上面的nibabel可以解析Nifti等脑影像文件,nilearn更是一个集解析,处理,与分析于一体的工具。以下就针对这些工具,简要探讨他们对Nifti文件的解析,以及简单处理。
copyright©意疏:https://blog.csdn.net/sinat_35907936/article/details/118862614
SPM12读取Nifti文件——查看轴状面、冠状面与矢状面切片
SPM12提供spm_vol(N)来获取Nii文件的头部信息,返回一个带有图像信息的结构体。N可以是单个Nii文件的路径,也可以是包含多个Nii文件路径的数组。
V = spm_vol('brain.nii');
返回的结构体包含一个完整的Nifti-1的对象,和被SPM12简化了的Nifti-1属性,如图1所示,因为T1是三维影像,所以返回的1X1的结构体,如果是fMRI则会返回nX1的结构体。属性中比较重要的是,路径属性fname
和维度属性dim
。
SPM12用spm_read_vols()来解析头部信息结构体,并返回一个三维或者四维数组Y,就是图像数据体素值本身,另外还有一个3xn的数组是每个体素的坐标。
[Y,XYZmm] = spm_read_vols(V);
size(Y);
轴状位、冠状位与矢状位是医学上人体的三个方位。左右为冠(X),前后为矢(Y),上下为轴(Z)。沿矢状位,切分左右的面为矢状面(sagital,固定X);沿冠状位,切分前后的面为冠状面(coronal,固定Y);切分上下的为轴状面(横断面,axial,固定Z),如图2所示,图源。
有了上面的分析,我们只需要在三维数据中,固定对应的轴,就可以取出对应的二维切面来。代码如下,其间为了最终显示还涉及如维度压缩squeeze
,维度交换permute
,尺度变换mapminmax
等操作。
代码:
nifti_file = spm_vol('MNI152_T1_1mm.nii');
data = spm_read_vols(nifti_file);
% 水平面
Z_66 = squeeze(data(:,:,66));
Z_66 = permute(Z_66,[2,1,3]);
figure(1);
imagesc(mapminmax(Z_66, 0, 255));
set(gca, 'YDir', 'normal');
colormap(gray);
axis off;
% 冠状面
Y_111 = squeeze(data(:,111,:));
Y_111 = permute(Y_111,[2,1]);
figure(2);
imagesc(mapminmax(Y_111, 0, 255));
set(gca, 'YDir', 'normal');
colormap(gray);
axis off;
% 矢状面
X_99 = squeeze(data(99,:,:));
X_99 = permute