计算全脑的灰质、白质和脑脊液的体积

[转自52brain]

原文 Good ref

在做VBM分析的时候,经常会把全脑体积(total brain volume=灰质+白质)或是颅内体积(total intracranial volume=灰质+白质+脑脊液)作为无关变量放在第二层的GLM中。 因此计算灰质白质脑脊液的体积就成了一个有用的步骤。 我参照John Ashburner在SPM的mailing list中做的一小段程序,稍作修改(几乎没改)放在此处供大家参考。至于在SPM中如何做VBM,大家可以参考此教程:

如果你用VBM8这一工具包的话,里面会同时生成一个文本文档,里面就有被试的这三种组织的体积。但VBM8估算出的体积和Ashburner的代码估计出的有一些出入,具体可能是计算方法的不同。

clear;
cd('D:\VBM\Dartel\results')  %数据所在之处
subj=[];
for sub=1:20  %多少个被试
tis=[];
for tissue=1:3,    %三种组织,灰质,白质,脑脊液
        V=spm_vol(sprintf('c%dsubject%02d_T1.nii',tissue,sub))  %可以是nii格式,也可以是img格式
        Vols=zeros(numel(V),1);
        for j=1:numel(V),
        tot=0;
        for i=1:V(1).dim(3),
            img=spm_slice_vol(V(1),spm_matrix([0 0 i]),V(1).dim(1:2),0);
            img=img(isfinite(img)); %exclude non-finite values
            tot=tot+sum(img(:));
        end;
        voxvol=abs(det(V(1).mat))/100^3 %一个voxel的体积,以升为单位,必须加上这一句
        tot=tot %integral of voxel intensities
        Vols(j)=tot*voxvol
        end
        tis=[tis,Vols]
end
subj=[subj;tis]
end

在这里我说一下上面程序的思路。你会发现有脑组织的体素的intensity是1或者接近1.如下图就是第一百层的轴状位的大脑(右侧),虽然它是个图,但本质上是个矩阵(左侧)。你会看到很多地方是0,那是非脑区的地方,也有很多地方是接近1的。矩阵里面向左凹进去那一块其实就是大脑额叶前面凹进去的那部分。

你用这一句也能看到第一百层的矩阵 img=spm_slice_vol(V(1),spm_matrix([0 0 100]),V(1).dim(1:2),0);

Ashburner可能假设如果一个体素是1,那么脑组织就占这个体素的百分之百,如果这个体素的intensity是0.5,那么脑组织就占百分之五十。所以把所有的体素加起来就是大脑中的以体素为单位的体积。但体素的大小在每个研究中可能都是不太一样的。尤其是使用c1开头的刚分割完的比较原始的图像时,比如我这个图就是体素大小0.479×0.479×1。所以还要再通过体素的大小换算成具体的毫升或是升等单位。 而这一句voxvol=abs(det(V(1).mat))/100^3就是做这个事的。V(1)是我们载入的图像本身,在这里是个结构体,而V(1).mat是一个仿射转换矩阵(affine transformation matrix),里面记录了体素的大小的信息。det函数做的就是将体素的体积信息提取出来。abs就是看绝对值的,因为det提取出的值可能是负的。

有的同学会问“我是用标准化之前的图像还是标准化之后的图像来计算这个体积?”或者“我是用mudulation之前的还是之后的?”或者“我是用smooth之前的还是之后的”。我用自己的数据算了一下,其实我感觉是这样的。 用smwc1开头的文件(经过了标准化,modulation和smooth)和用c1开头的文件(刚分割完的原始空间的灰质)来计算的话,灰质的绝对体积值是不一样的。但是被试之间的相对体积是非常接近的,四舍五入到小数点后三位数是一样的(由于smooth肯定影响了具体的数值,smooth之前应该更加接近)。

用c1开头的文件算出来的数值依次是

0.6083
0.8447
0.6546
0.7670
0.8260

用smwc1开头的文件算出来的数值依次是

0.6053
0.8408
0.6515
0.7621
0.8217

可以看出来还是很接近的。 另外对于同样的5名被试,我还看了VBM8处理后生成的txt文件里面的灰质体积,虽然感觉有点差别,但体积还是基本一致的, 594.832 823.331 633.403 746.745 754.158

我还没有尝试标准化modulation但未smooth的情况。所以我想标准化和modulation并没有保存其绝对体积值,而是保留了相对体积值。

如果你要把体积作为无关变量放在GLM模型中的话用标准化和调制之后的是没有问题的,但要计算绝对体积的话,那个c1开头的图像,就是那个在原始空间的刚刚分割完的图像算出来的体积是最靠谱的。

Last updated