FreeSurfer当前只支持Linux系统和Mac OS。我所使用的系统是Ubuntu 16 .0.4,FreeSurfer的安装耗时较小,但是在处理时耗时较长,可能需要数个小时,甚至一天,这个取决于机器性能,但是和GPU好像没太大关系。下面先给出总的安装步骤,然后单独给出详细的安装步骤。
首先给出几个我参考的文章:
其中第2个参考文章还安装了FSL,我现在也不是很清楚这个FSL是什么,据我的安装和使用结果来看,没必要单独安装,FreeSurfer里应该集成了FSL。(2020.09.15更新,在文章的第四部分增加了FSL的安装和使用说明)
一、FreeSurfer总安装步骤
1 | wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.1.0/freesurfer-linux-centos6_x86_64-7.1.0.tar.gz #下载安装包 |
二、FreeSurfer安装分步介绍
1. 下载FreeSurfer压缩包
首先到官网下载相应的安装包,下载界面如下图所示,看好是下载Linux下的还是MacOS下的,虽然Linux下的安装包写的是CentOS,但是也支持Ubuntu。在红色框上面右击选择“复制下载连接”,然后在Linux系统下选择相应的路径,使用命令wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.1.0/freesurfer-linux-centos6_x86_64-7.1.0.tar.gz
下载安装包。
2. 安装
虽然说是安装,其实只需要解压就可以了,使用命令tar -zxv -f freesurfer-linux-centos6_x86_64-7.1.0.tar.gz
进行解压缩,如果你下载和我不是同一个版本,需要把压缩文件的文件名改一下,下同。解压后会在当前目录下生成一个名为freesurfer
的文件夹。
3. 注册
前往官方注册网站进行注册,过段时间后会收到一封电子邮件,附件中有名为license.txt
的文件,下载下来,放到freesurfer
文件夹下面。注册页面如下图所示。
4. 改变freesurfer文件夹权限
使用命令sudo chmod -R 777 ./freesurfer
更改文件夹权限,文件夹路径可能需要根据自己的做相应的调整。
5. 添加环境变量
使用vi ~/.bashrc
命令打开环境变量文件,在~/.bashrc
文件中添加以下两行:
1 | export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer |
并使用source ~/.bashrc
命令使改变后的环境变量立即生效。然后会显示下图所示的信息。
6. 安装tcsh
使用sudo apt-get install tcsh
命令安装tcsh,tcsh类似与bash,不安装的话,运行的时候会报错。
7. 测试
在命令行中输入recon-al --help
命令,如果显示帮助信息则说明安装成功,如果提示命令不存在或者只显示了路径信息则说明安装有问题,前者可以通过重新安装解决,后者应该是安装的第6步有问题。
三、FreeSurfer的使用
这里主要是使用FreeSurfer来对脑部图像做头骨的去除。参考的文章是最开始提到的第四篇。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
需要格外注意的是,每次进入终端使用FreeSurfer的时候需要输入命令:
1 | export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer |
否则不能正常使用。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
以下是使用FreeSurfer批量对图像进行去除头骨和仿射对齐等操作。其中path/a/b/c
变量的值需要根据实际情况来改变。代码的第19行,如果图像文件的格式名不同,需要保留的字符串长度也不同,只需要文件名(不包括扩展名)即可。
cmd
变量对应的命令中,a/b/c
是环境变量配置命令,recon-all
是颅骨去除的命令,mri_convert
是进行格式转换,从mgz转到nii.gz,只是为了方便查看,mri_convert --apply_transform
是进行仿射对齐操作。
1 | import os |
为了更直观的看清楚cmd
对应的指令,下面列出了当图像文件为1127.img
时,cmd
对应的内容,为了方便查看我加入了换行。
1 | export FREESURFER_HOME=/home/syzhou/zuzhiang/freesurfer; |
假设图像文件名为1127.img
,则会在path对应的目录下生成一个以图像文件名命名的文件夹,里面保存处理的结果。下图就是g6.img
对应的输出文件夹,里面的结构如下图所示,我们想要得到图片位于mri
文件夹下。
mri
文件夹下的文件如下图所示,其中brainmask.nii.gz
是去除头骨后的图像,brainmask_affine.nii.gz
是去除头骨且仿射对齐后的图像。
以下两图是处理前后的结果。
但是可以发现上述做法有两个问题,一是无法同时对图像及其对应的label进行仿射对齐,二是在去除脑壳后图像移动过了,这对后续的操作会造成障碍。这两个问题的解决请见第四、五部分。
四、FSL的安装和使用
之所以要用到FSL是因为在对图像进行仿射对齐时,无法同时对图像对应的标签进行相同的仿射对齐操作,而FSL是可以的。FSL的安装和使用同样是在Ubuntu系统下进行的。
1. FSL的安装
1 | # 下载FSL安装包,这里下载的是压缩版 |
2. FSL的使用
据说FSL有界面,但是我这边的服务器使用显示器不方便,所以是用命令行进行的。这里我只使用到了FSL的仿射对齐功能以及将已有的仿射矩阵作用在其他图像上的功能,所以只对这两个命令进行介绍。
Interpolation :Tri-Linear; Nearest Neighbour
线性配准两幅图像:
1 | flirt -in m_img.nii.gz -ref f_img.nii.gz -out m2f_img.nii.gz -omat m2f.mat -dof 12 |
其作用是将输入图像按照dof参数指定的方式对齐到参考图像,并保存为out参数指定的图像以及omat参数指定的变换。
其中-in
后面是输入图像的名称;-ref
后面是参考图像的名称;-out
后面是输出图像的名称;-omat
后面是变换矩阵的名称,.mat
的后缀不是强制的,也可以是别的;-dof
是Degrees of Freedom的缩写,即自由度,对于3D到3D的配准来说,12为仿射变换,9为传统变换,7为全局重缩放变换,6为刚体变换,对于2D到2D的配准来说,只有3表示刚体变化这一种。
将保存的变换(transformation)作用在另一张图像:
1 | flirt -in m_label.nii.gz -ref f_img.nii.gz -out m2f_label.nii.gz -init m2f.mat -applyxfm -interp nearestneighbour |
其中-init
参数是已经保存的变换;-applyxfm
表示将已经保存的变换作用在新图像上;-interp nearestneighbour
表示使用最近邻插值,最近邻插值可以让label的类别和原来的保持一致,默认是线性插值。
五、FreeSurfer+FSL
(2020.09.23更新)
这一部分我想将FreeSurfer的头骨去除和FSL的仿射对齐结合起来,实现既去除头骨又对图像和label进行仿射对齐,但是上面提到了在用recon-all
命令进行颅骨去除的时候图像会产生移动。所以换了一个命令,使用mri_watershed
命令,这个命令比recon-all
命令速度更快。
1 | import os |
- 本文作者: 俎志昂
- 本文链接: zuzhiang.cn/2020/07/24/freesurfer/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!