当前位置: 首页 > 工具软件 > SPM > 使用案例 >

SPM中文教程

白迪
2023-12-01

一、SPM的安装与启动
先安装matlab,然后将SPM复制到matlab下的一个文件夹(SPM2需要matlab6.0或以上版本)。启动matlab,首先set path,然后在matlab命令窗口中输入SPM即可启动,然后选择fMRI,也可以直接输入SPM fMRI

二、SPM数据处理概要
先将所得数据进行空间预处理(对齐,平滑,标准化等),然后进行模型估计(将刺激的时间、间隔与血流动力函数进行卷积,所得结果与全脑象素信号进行相关分析),最后察看结果。

三、SPM8数据处理的一般步骤
为方便后续的数据处理,如果数据分散处理后整合,建议所有处理数据路径保持一致,要统一路径。处理前首先要采用数据转换软件将dicom数据转换成SPM解析格式,然后进行数据预处理,预处理结束后到matlab安装目录中备份spm*.ps文件,其中包含了空间校正和标准化的信息,然后进行建模分析。
运行命令:spm fmri,打开spm8的操作界面

我们称左上侧的窗口为按钮窗口(button window),左下侧的窗口为输入窗口(input window),右侧大窗口为树形结构窗口或图形窗口(Tree Building Window or the graphics window)。
在spm8和spm5中,每一步处理都采用了直观的“树形结构”的面板,如果一个分支项左面有“+”号,你可以双击显示子分支项, 如果一个分支项右面有“<-X”号,你必须为之指定选项(否则不能运行该tree),分支项的选项在其右侧面板指定,而帮助信息则在下面的面板中显示。如果我们处理数据没有特殊需求,我们只关心带有“<-X”项目并完成输入即可,其余均可采用默认设置。另外注意在Tree Building Window的顶部菜单,新增了一个菜单项“TASKS”,在使用批处理分析时非常重要。
以下内容,还可以参考E:\《汇总》中“静息态fMRI的数据预处理流程”这部分的讲述。

1、转换数据
dicom格式转换为img文件,将以层为单位的数据转换成以全脑为单位的数据。转换时格式请选择NIfTI,可用SPM输入面板中的DiCOM Import模块转换,也可以采用专门的转换软件,如MRIcovert。

2、Slice timing
校正1个volume中层与层之间获取(采集)时间的差异,即纠正slice(下译为扫描层)之间采集时间的差异。这对事件相关设计的实验尤为重要,使一个TR中的各层获得时间一致(如都在一个TR的开始),相当于AFNI中tshift所做的工作。校正后的新文件名为:a+原文件名。
原理概述:Sliceorder(扫描层序数)用于指明扫描层被采集时的顺序,其总数为n,n即一个volume(volume为一个TR时间内的扫描量)里面所包含的扫描层的总数。每个Sliceorder(扫描层系数)同时指明了每个扫描层在图像文件中的存储位置。因此扫描层系数表明了扫描层被采集时的时间顺序。我们可以用SPM的Display功能来查看这个顺序。移动鼠标的十字准线到 Z 坐标为1的位置时,我们看到的就是一个volume里面第一个slice(扫描层)上的象元(voxel)。核磁仪采集数据的时间精度为一个TR,因此我们通常默认一个TR内采集到的数据(一个volume)采自完全相同的时间。但事实并非如此,一个TR内我们需要采集很多扫描层(例如20层)的数据以覆盖较大的脑区(通常是全脑)。这些扫描层是一个接一个按照上面所说的sliceorder(扫描层序数)的顺序来采集的,因此各个扫描层之间的采集时间是有差异的。Slice timing这一步所要做的就是通过一定的算法纠正这一时间差异。常规的纠正方法是在保持整段采集信号不变的条件下推前或者推后采集的起始时间。这可以通过简单的移动采集信号的正弦相位来做到。一种常用的数学转换方法:傅立叶转换可以把任何复杂信号转换为由不同频率和相位的简单正弦曲线的线性组合。这样,只要通过加入一个常数到每个频率的相位中,就可以达到移动数据起始和结束时间的目的。
我们在按钮窗口中的预处理面板中点击“Slice Timimg”,将出现如下对话框:

对上图右侧选项我们做如下设置————
Data,预备数个被试或者session的数据。以下所述参数设置将被应用到所有所选数据。点击data并在下面的面板中点击“new session”,这样在data下会出现“session”的分支项,选中该项并点击面板下方的“select files”,然后用spm文件选择器选择你要处理的数据,最后点击“Done”。选择数据时可以把静息态、数值任务和物理大小任务分为三个session来选(data——new session——session),也可以作为一个session来选,结果是一样的。
Number of Slices,我们输入每祯图像的层数,如“32”,即扫描层总数。
TR,我们输入重复时间,一般为2秒,我们输入“2”
TA,是每祯图像获取第一层开始到获取最后一层图像的时间间隔,单位为秒。一般可以用以下公式计算:TA=TR-(TR/扫描层数)。这里可以不必计算出结果,直接写上带入了数字的公式就可以了。比如,TR为3秒,扫描了20层,则可以直接写为:3-(3/20)。我们的数据则输入“2-2/32”
Slice order,输入扫描顺序。如前述此顺序可通过SPM的Display功能查看。我们输入“1:2:31, 2:2:32”。指定层获取顺序的层次序参数是一个含N个数的向量,这里N是每个volume所含的层数。每一个数表示该层在图像(volume)中的位置。向量内的数字排列顺序是这些层的获取时间顺序。如行向量 1 3 5 7 9 11 13 15 17 19 21 23 25 2 4 6 8 10 12 14 16 18 20 22 24 各种扫描类型和输入的层顺序如下: ascending 升序扫描(first slice=bottom,扫描序数从底部到顶部排列,即从1顺序递增到n): [1:1:nslices]; descending 降序扫描(first slice=top,扫描序数从顶部到底部排列,即从n顺序递减到1): [nslices?1]; interleaved 间隔扫描(扫描序数间隔递增或递减,一般顺序为2,4,6,8,10…1,3,5,7,9…n)(middle-top):for k = 1:nslices,round((nslices-k)/2 + (rem((nslices-k),2) * (nslices - 1)/2)) + 1,end; interleaved (bottom -> up): [1:2:nslices 2:2:nslices],如[1:2:25,2:2,25]; interleaved (top -> down): [nslices:-2:1, nslices-1:-2:1]
Reference Slice,我们输入“31”。选择参考扫描层(一般可使用默认值),其它扫描层的起始时间都将以此层的起始时间为标准来移动进行校正。通常选择n slice/2,如25层时选择13层作为参考层。
Filename Prefix,是指新生成的图像前加何标记,一般采用默认设置。
最后点击面板上方的向右的绿色三角即开始运行。运行完后将会生成一系列a*.img文件,这就是时间校准后的数据。
注意很多研究者容易将时间校准和空间校准顺序颠倒,一般的观点是如果图像获取是隔层(interleaved)进行的,如1、3、5、7、9、2、4、6、8、10,则要先进行slice timing 再进行realign,如果图像各层是连续(sequential)获取的,如1、2、3、4、5、6、7、8、9、10,则要先进行realign再做slice timing。(为什么?)

3、Realign(相当于AFNI中的registration)
分两步:
1)coregister,将每个session的第一个scan与第一个session的第一个scan进行比较,然后将每个session中的其他scan与本session中的第一个scan进行比较,得到每个filename.img文件的转换参数,生成filename.mat文件,同时为每个session生成一个对齐参数(realignment parameters),文件名为realignment_params_.txt
2)reslice,用filename.mat文件对filename.img重新切片,生成rfilename.img文件。并可依选择生成一个平均象,名为meanfilename.img。
以上两步具体解释如下——即使我们对被试的头部做了很好的固定,在实验过程中,被试也会不由自主的有一些轻微的头动,这在fMRI实验中尤为明显。这一步就是把一个实验序列中的每一帧图像都和这个序列的第一桢图像按照一定的算法做对齐,以矫正头动。做完这一步,能给出该序列中被试的头动情况,以作为是否放弃该数据的依据,如果头动超过1个voxel(功能图像扫描矩阵一般是64
64,则体素的大小为(FOV/64)(FOV/64)(层厚+层间距)),则要考虑放弃该时间点数据。该程序利用最小二乘法(least squares approach)原理和含6个参数(刚体模型)的空间变换,对从一个被试获取的时间序列进行校正。用户可指定某个volume作为随后volumes的参考。可以是第1个volume,也可选择比较有代表性的volume(更明智的选择),例如选择磁场相对稳定的第4个volume。校正信息(头动信息)将在结果窗口(Graphics Window)显示。每个Session的校正信息将存储为rp*.txt,其中*为Session数据集名称。另外,头动校正信息将以plot 图形显示。如下图:Translation表示被试头部在X,Y,Z三个方向的平移,分别用蓝,绿,红三种颜色表示。Rotation表示被试头部在实验过程当中绕X(L-R),Y(A-P),Z(S-I)三条轴的转动角度。横坐标代表这个序列所采集的所有图像,纵坐标表示的是偏移量和偏转角度,分别以毫米和度为单位。采用SPM8,头动信息和空间标准化的图形文件将以spm_“data”.ps的形式保存于matlab的工作目录下,如我们是2009年4月30日处理的数据,则将以spm_2009Apr30.ps文件存于matlab的work目录下。

我们在预处理面板校准选项中选择“Realign (Est & Res)”,出现如下对话框,我们按下面设置进行:

选中“data”, 选择“New Session”, 然后选中data下出现的 “Session”选项。点击“Specify Files”,用spm文件选择器选择刚做完时间校准的图像(a*.img)。其余选项采用默认设置,点击上方绿色的三角开始运行。

Realign这一步也有分开进行的,具体描述如下——
3.1 Realign: Estimate(重排参数的估计)
此步骤采用最小方差原理和六参数刚体空间变换来重排从同一个被试上采集到的图像数据。使用者所选取的第一幅图像文件将被作为其它图像重排的参考标准。也就是说,你想要用哪一幅图像作为参考标准,就先选哪一幅图像的文件。参考图像文件不一定非用采集到的第一幅图像,使用最有“代表性”的一幅图像也许更好。本步骤的目的主要是去除fMRI和PET数据中的运动伪影。图像数据的头文件会被改写以反映数据相对空间位置的变化。此过程的具体参数会在结果窗口中以平移(translation)和旋转(rotation)曲线图显示。每个session的重排参数会被存储到名为 rp*.txt 的文件中。这些参数可以在最后的一般线性模型统计估计中作为混淆因素考虑进去。
3.1.1Data 选择一个被试需要进行此步骤处理的所有sessions。注:在 coregistration 这一步,首先是对所有的session进行重排,其具体做法是把所选每个session的第一个scan与所选第一个session的第一个scan对齐。然后再把每个session里的其它scan与该session的第一个scan进行对齐。使用此方式进行重排是因为各个session的数据之间可能会有较大差异。 Session选择session里所有的scan。
3.1.2 Estimation Options 这里包括各种注册参数选择项,若对某一个选项不确定,使用软件默认值即可。 Quality质量与速度的权衡。选择高质量以最慢的速度给出最精确的结果,低质量以较快的速度给出较不精确的结果。此参数的设定实际影响到的是参与参数估计的象元(voxel)的数目。其依据是有些象元(voxel)其实对重排参数的估计贡献不大,可以舍弃。 Separation 此参数以毫米为单位,表示对参考图像文件进行重采样时采样点之间的间隔。采样点之间间隔越小,结果越精确,运算速度越慢。 Smoothing (FWHM)高斯平滑的半高宽值。在估计重排参数之前一般先进行高斯平滑。PET数据一般使用7mm。MRI数据一般使用5mm。 Num Passes Register to first: 所有图像文件对齐注册到第一幅图像。 Register to mean: 使用two-pass处理将所有图像文件对齐注册到所有图像文件的平均图像。PET 数据一般注册到平均图像。因为PET数据相比fMRI数据噪音更大,文件更少,所以时间的影响更小。MRI数据一般注册到第一幅图像。虽然使用two-pass处理可能更精确,但是其对效果的提高与其所损失的运行时间相比得不偿失。 Interpolation在估计最佳变换时对数据进行重采样的方法。高的degree提供更好的结果,但是也更慢,因为会采样更多的相邻象元(voxel)[52, 53, 54]。 Wrapping此参数指示一个volume中数据wrap around in的方向(此处具体理解有待大家补充)。No wrapping:适用于PET数据或者已进行过空间变换的数据。同时当你不确定自己数据类型时,推荐使用此选项。Wrap in Y:适用于没有重排(resilce)过的在Y方向上进行相位编码的MRI数据。 Weighting提供一个加权图像,在估计重排参数时对参考图像的每一个象元进行加权。加权系数与标准差成反比。例如当有大量额外的头动(如说话或者特定区域内的严重伪影)时。(此处具体理解有待大家补充)。

3.2 Realign: Reslice(据已估计出的参数重排)
此功能重排以上步骤中已进行参数估计和注册的图像文件,使之与参考图像文件达到象元级的匹配精确。重排后的数据被命名为:r+原文件名。
3.2.1 Images选择要重排的数据文件
3.2.2 Reslice Options 各种重排参数设定,若对某一个选项不确定,使用软件默认值即可。Resliced images All Images (1…n) : 重排所有数据,包括标准参考图像(重排后还是保持原位置不变)。Images 2…n :重排除了标准参考图像之外的所有数据。此选项用于当你以MRI结构像为标准重排PET图像数据,而又不想在结果中再生成一个等同的MRI标准结构像时。All Images + Mean Image : 重排图像文件之外,另生成一个重排后的平均图像文件。Mean Image Only : 只生成重排后的平均图像文件。 Interpolation图像文件重采样和重写入的方式。Nearest Neighbour :最快,但不推荐使用。Bilinear Interpolation:可用于PET数据,但不是太适用于fMRI数据。Fourier Interpolation:此选项仅适用于纯刚体变换,也就是说象元大小必须是相同,并且等方性(正方体)的[17, 14]。 Wrapping 此参数指示一个volume中数据wrap around in的方向(此处具体理解有待大家补充)。No wrapping:适用于PET数据或者已进行过空间变换的数据。同时当你不确定自己数据类型时,推荐使用此选项。Wrap in Y:适用于没有重排(resilce)过的在Y方向上进行相位编码的MRI数据。 Masking因为扫描过程中被试总会或多或少有头动,造成同一个时间系列数据里所采集到的图像的边界不会完全重合。在有些图像还有数据的地方(信号值大于0),其它一些图像已经超出了图像边界(信号值为0)了。在这些信号为0的区域是无法采样数据的,因此SPM只要检测到某一幅图像在某个区域已经超出了边界(即信号为0),就会将其它所有图像的此区域信号值均设为0。此做法相当于取了时间系列数据中所有图像的交集。

3.3 Realign: Estimate & Reslice
将上述参数估计与数据重排合到一起做。全部选项与参数原理均与3.1和3.2中对应项相同。

4、Normailze
选用realign步骤中得到的平均象与模板进行比较,获得进行标准化的参数,参数文件命名为filename_sn3d.mat,然后依据此参数文件对每个img文件进行标准化,生成文件nfilename.img。具体操作如下:在预处理面板标准化选项中选择“Normalise: Estimate & Write”,出现如下对话框:

我们做如下设置:选中“data”——“new sbject”,在data下新出现的 “subject” 选项中作如下设置, “source image”选择空间校准步骤中生成的mean文件, “image to write”选择所有刚进行完校准的文件“ra*.img”,“template image”我们选择“EPI.nii”,其余采用默认设置,点绿三角运行。

5、Smooth
FWHM推荐为象素大小的两至三倍。在预处理面板标准化选项中选择“smooth”,出现如下对话框:

我们在“image to smooth”选项中选择所有刚进行完标准化的文件“wra*.img”,然后点绿三角运行即可。这里FWHM我们采用默认设置“8 8 8”。

6、fMRI models
依据提示填入刺激出现的间隔与时间,并选择实验涉及类型,然后进行估计。估计结果生成spm.mat等文件,保留在当前工作目录。即以前版本的“fMRI model”,spm5和spm8的分析选项有所变化,使用Specify 1st level做单个被试(single subject)分析;使用 Specify 2nd level 做组分析(group analysis)。比如我们选择“Specify 1st level”,出现如下对话框(见下一页):
我们选择Directory指定一个文件夹存放结果数据,其余做如下设置:
“Units for design”选择“Scans”,“Interscan interval”输入“2”,选择“Data and Design”后选择“New Subject/Session”,再选择新出现的“Subject/Session”,选择“Scans”并用文件选择器选择相应任务的所有平滑后的功能图像(swra*.img)然后点击“down”,选择“Condition”后选择“New condition”,然后选中新出现的“Condition”,“name”选项输入任务条件的名称,“onset”输入任务条件的启动向量,代表任务刺激启动的扫描数,选中“Durations”输入任务组块的持续时长,如是事件相关设计请输入“0”。如还有其他任务,要再次选中“Condition”——“New condition”——“Condition”定义其他任务条件。设置完毕后点击绿三角运行。这样将会在开始选择的目录中生成文件spm.mat。
下面要估计我们刚建立的模型,在模型设置面板中点击“estimate”,将打开如下对话框:

很简单,我们只须选择刚生成的“spm.mat”文件点击“down”然后点击绿三角运行即可。
估计完成后,我们选择“results”,将打开如下对话框:

上图设计矩阵表明一个扫描序列中我们有三个任务条件,均为事件相关设计,选中“t-contrasts”,点击“define new contrast”, 第一个任务“contrast”定义为“1”, 第二个任务定义为“0 1”,第三个任务nn定义为“0 0 1”,第一个任务减第三个任务定义为“1 0 -1”,第二个任务减第三个任务定义为“0 1 -1”,第二个任务减第一个任务定义为“-1 1”,其余操作以及激活图显示和以前版本都是一致的。
值得我们注意的是,我们指定或输入一系列的参数来进行每一步的处理,完成后我们可以通过Save按钮将每一步存为一个*.mat文件。以后我们可以通过Load按钮重新加载并使用这些*.mat文件,我们适当修改后(例如改变所运行的数据集)再选择Run按钮运行。
另外我们可以使用TASKS菜单项指定一系列的操作(预处理和/或分析),在 TASKS->Batch菜单项下,你可以在一个大文件中指定数据处理所有步骤。批处理交互界面非常灵巧。它知道根据指定的步骤将产生什么文件。例如,在Tasks->Batch菜单项下,选择New “Spatial”。在你的SPM任务树(Jobs tree)中选择(highlight) -Spatial ,并从选项面板中选择 New “Realign” 选项指定我们前述的realignment的详细步骤。现在,当我们向任务树中添加标准化步骤时,我们将看见为标准化操作选择r文件的选项,尽管事实上,我们还没有真的生成r文件。所以,批处理非常智能,可以预测我们的需要。如果我们已经生成了几个批处理任务文件,我们可以使用TASKS->Util->Execute Batch Jobs选项来运行它们。该工具允许我们选择一系列的mat文件(不一定是batch jobs文件)来运行。如果你怀念旧版本SPM操作界面,在TASKS菜单下,选择Sequential,这样就不会出现树(tree),选项将会出现在SPM输入窗口。

7、Result
选中刚才生成的spm.mat文件,定义constrast,看结果。在上面的“fMRI models”部分有讲述。

四、SPM的多种数据转换方法
使用SPM进行数据处理前,必须先将其它档案格式转换成SPM可以读取的Analyze档案格式,包含.img档和.hdr标头档,相关的转档软件有XMedCon和MRIcro。
1.利用AFNI数据转换
首先使用AFNI的三维数据重建: to3d -time:tz 177 20 2s altplus * 生成+orig文件,然后: 3dAFNItoAnalyze -4D -orient LPI epi+orig,将生成.hdr与*.img文件. (*代表你所用的任意文件名),然后打开MRIcro软件:选择要转换的hdr,img文件, processing, ok.择面板上部 File --Save as 4d to 3d — Save as intel —Save (这里有点忘了:)) (这一段我压根没有看懂……)

2.直接用MRIcro转换:(此部分转自核医学论坛)
注: SPM的dicom import是可以导入dicom文件,但导入的这些图像还是2D的,不是3D的,不能用于fMRI分析。要先把2D的slice重建成3D的volume,就可以用于fMRI分析了。MRIcro可以干这活:先把3次BOLD的文件分别移动到三个不同的文件夹里,然后用MRIcro依次导入转换每个目录的slice dicom file成一个ANALYZE文件(4D的),再另存为多个img,hdr文件(4D-%26gt;3D),个数就是volume数,也就是目录下文件数除以层数。(这是针对从GE Signa 1.5T 上刻录的光盘上的dicom格式数据来讲的,其它机器的数据存放方式可能有所不同,请相应具体分析)。MRIcro的Import Convert中的volume可以理解为完整头部像数目。在从GE Signa 1.5T 中获得的fMRI Dicom数据中,是1个slice存成一个dicom image文件,因此volume数(也就是整个dicom image目录所包含的完整头部扫描图像数目)应该等于整个dicom image目录下所有单个slice dicom image文件除以实验时设置的slices数。简单地说,一个fMRI实验,层数为16,获得512个slice dicom image文件,则其volumes=512/16=32。
1)点Import/convert foreign to analyze,在出现的对话框中,number of files为你数据的总文件数,slice increment=1,volume increment=0,volumes为你的实验的volume数。填好后,先点design,后点select,然后选中你的数据的第一个文件(我试验了一下,选中后报错,无法继续)。然后保存。
2)点file/open,打开刚才保存的img文件。
3)点"file/sae as …[rotate/clip/format/4D->3D]",然后点击“save intel”。 这样保存后的文件就是analyze格式的了。

 类似资料: