严老师,请教关于mask的使用和预处理中的数值提取问题

严老师:
关于mask的使用和预处理中的数值提取有以下问题想向您请教,请您指点,谢谢:

1. 使用激活图来做mask,但是发现此时的mask原料是前面生成的ALFF、fALFF、ReHo、zFC的值经过统计之后,生成的激活图,根据这些激活图,再使用一些运算,如((i1>0)+(i2>0))>0等类似的方法生成所需ROI的mask。那现在这些mask是做什么用的呢?在视频一中提到,计算ReHo、ALFF、FC时可以使用自己定义的mask,但是那时mask还没有啊。这样一来,不就相当于一个死循环了。难道只能使用default mask计算ReHo等值后,通过统计得到mask用于下一批数据?

2. 如果我想在数据预处理之后,如Normalized之后将各体素的BOLD激活值提取出来,用于MATLAB计算,应该如何提取呢?应该使用什么命令语句,或者程序呢?

3. 经过spm_read_vols命令提取了图像中的体素值和对应的三维坐标值,如体素值为61×73×61的三维矩阵,若要将其降到两维,用于在二维表上可以显示各数值,应该按照什么维度优先的顺序降维,使之与其原来对应的三维坐标(3×N的矩阵)顺序一致?如X、Y、Z三个坐标,是先变X,再变Y,最后变Z;还是先变Z,再变Y,最后变X呢?

4. 在功能连接中生成与各体素相关系数的时间序列,所用的原始数据是不是当前时间点的BOLD信号值?如果是,应该在哪里可以获得呢?

振享先回一下以上问题? @振享

1. 我们一般不称ALFF等值为激活图,所谓激活图一般是指传统的任务状态下的GLM模型所得到的统计结果图。mask可以理解成一个与数据维度一样的“相框”,这些相框可能是指的特定脑区,比如,我只关心运动区的活动,我就可以用一个运动区的mask,这样,其他的脑区可以忽略。

2. 你是不是指的提取经过预处理后的BOLD值?如果是,可以用rest_sliceviewer,也可以用rest_to4d,rest_readfile等函数。rest_to4d是将一个人的所有时间点数据放进一个4D的矩阵,而rest_readfile是看指定时间点的函数,结果是一个3D的脑。

3. 是不是指3D脑将维?如果是,可以沿任意轴一层一层将脑子“切开”看,即slice;如果我理解不对,还请你描述详细点。

4. 功能连接的方法实际上就是计算两个时间序列的相似性,所用的数据当然就是每个voxel的信号,如果你想提取个别voxel信号,可以用rest——utilities里有一个extract time course的功能。

有什么不清楚的还请其他专家补充
臧振享

谢谢振享老师的解答,有些问题可能是我没有描述清楚,还请老师给予指点:

1. ALFF等值是计算出来的图像指标,而这些指标值经过统计之后生成的图不是激活图,那么标准叫法应该是什么呢?

2. 刚开始拿到数据时没有Mask,此时只能使用Default Mask。在视频讲解中,按顺序是利用经ALFF等值统计之后存活下来的体素/体素团块,制作成一个Mask,此时统计等过程都已经做好,还需要制作这个Mask吗?如果制作出来,又能用在哪里呢?由于前面讲解计算ReHo、ALFF等值时,可以使用自己的Mask(越小越好),此时是不是需要返回到计算这些值前的状态,使用这个Mask重做ReHo等值?

3. 在做完Normalize之后,是否可以直接进行统计检验?为什么我在运行单样本T检验的是否出现了如下错误:
??? Error using ==> power
Out of memory. Type HELP MEMORY for your options.

Error in ==> var at 90
y = sum(abs(x).^2, dim) ./ denom; % abs guarantees a real result

Error in ==> std at 32
y = sqrt(var(varargin{:}));

Error in ==> rest_ttest1_Image at 45
StdVariable=std(DependentVolume,0,4);

Error in ==> rest_ttest1_gui>btnCompute_Callback at 130
rest_ttest1_Image(DependentDirs,OutputName,MaskFile,Base);

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> rest_ttest1_gui at 27
gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback

4. 针对一个.img文件,我使用v=spm_vol('06880_1T.img');和[Data,XYZt]=spm_read_vols(v);两条语句之后,可以在Data(61×73×61double)中获得图像中体素的数据值,而在XYZt(3×271633double)中保存了Data数据对应的坐标点。我现在想通过降维的方法,将Data三维矩阵变为一个一维矩阵以便直观地查看每个值,我应该先从那个维度开始降,可以保证降成一维矩阵后,每个值还可以跟XYZt矩阵中的坐标一一对应?

5. 我用的是REST 1.7版本,在rest——utilities里没有看到extract time course按钮,但是有一个Extract ROI Signals的功能,不知道两者功能是否一致?功能连接使用n个voxel的话,应该是n*timepoints的矩阵吧,这个矩阵的数值应该在哪里可以获取呢?

上述问题中,也许是我有些理解还不到位,出现混淆,还能老师见谅,给予耐心解答,再次致谢!

1. Alff生成的图没有特定名称,叫ALFF结果大家就能理解。

2. MASK不一定是你自己定义的,也可以是从以往研究中(或者其他人做的mask)得到的。用自己的mask之前一定要明确目的,如果目的不明确,还是用default mask为好。另,你说的mask越小越好是指哪方面?是不是指在做多重比较校正的时候条件不会那么苛刻?

3. 做统计一定是要针对某个算法的结果,比如对ALFF结果进行t检验,来判断到底哪些脑区的ALFF值显著高于(或者低于)全脑的平均水平。一般没有对BOLD值做统计的情况,所以我目前不清楚这么做的意义。

4. 用reshape函数即可,可以变成一维的。如果想变回去,reshape成3维的,坐标是不变的。

5. 是extract roi signals,我记错了,不好意思。voxel-wise的功能连接是计算2个时间序列,ROI-wise的功能连接根据ROI选取的多少来计算,如果是3个ROI,那么结果是个3*3的对称矩阵,对角线数值为1. REST在计算功能连接时会输出一个timecourse的文本文件存在你指定的文件夹,数据是以16位有效数字保存的。

叫我振享吧,我的岁数可能比你小