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

\[转自52brain]

[原文](http://52brain.com/forum.php?mod=viewthread\&tid=25893\&extra=) [Good ref](https://github.com/zh1peng/structure-mri-notes/tree/bc782ce53e43a77c37189839ae610958a89d90a4/www.fil.ion.ucl.ac.uk/~john/misc/VBMclass10.pdf)

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

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

```
clear;
cd('Ｄ:\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开头的图像，就是那个在原始空间的刚刚分割完的图像算出来的体积是最靠谱的。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://zh-1-peng.gitbook.io/structure-mri-notes/ji-suan-quan-nao-de-hui-zhi-3001-bai-zhi-he-nao-ji-ye-de-ti-ji.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
