FSL学习过程
下载及安装
FSL只能在Linux下运行,这里选择在WSL(windows的Linux子系统)中配置FSL。
-
下载:从官网FSL - FslWiki (ox.ac.uk)下载安装FSL的python文件“fslinstaller.py”。
-
安装:在WSL中输入
python3 fslinstaller.py
,然后输入yes,等待脚本自动下载安装,完成后结果如下图。
使用
FSL除了使用bash命令和可视化UI进行使用以外,也可以用Python和R语言进行调用。这里记录Python调用的方法,用到的库为fslpy,由于网上基本没有这个库的教程,这里就安装官方文档的内容进行记录,可能会有些地方有理解错误。
fslpy的安装
参考链接 ——> { PyPI:fslpy · PyPI GitHub:GitHub - pauldmccarthy/fslpy: This is a mirror. }**
1. 库的安装: 通过pip安装,pip install fslpy
;或是conda,conda install -c conda-forge fslpy
2. 依赖库的安装: wxPython;indexed_gzip;trimesh;Pillow (直接用conda或者pip就行)
3. API文档: https://open.win.ox.ac.uk/pages/fsl/fslpy/
配准到MNI152模板
1. 按照官方文档的建议,首先应该先把图像的方向和模板进行统一,使用fslreorient2std
进行处理。
结果参考如下:
Python代码,直接在对应目录下打开powershell然后运行wsl,切换conda环境就可以运行Python脚本:
import os
from tqdm import tqdm
from fsl.wrappers import misc
path = 'OUT_SEG' #文件路径
savePath = 'OUT_SEG_FR' #保存路径
files = os.listdir(path)
bars = tqdm(files) #进度条
for stop, file in enumerate(bars):
filePath = os.path.join(path, file)
fileSavePath = os.path.join(savePath, file)
misc.fslreorient2std(filePath, fileSavePath) #函数调用
# if stop==10: #调试用的停止标志
# break
- 线性变化进行影像配准,类似的方式,调用的是
fsl.wrappers.flirt.flirt
方法。
- src:输入图像
- ref:参考图像
- out:输出图像
(还有一些其他的参数,例如空间变化方式,代价函数,插值方法可以参考命令行版本的参数设置)
参考结果:
同样的给出Python代码:
import os
from tqdm import tqdm
from fsl.wrappers.flirt import flirt
inputPath = 'OUT_SEG' #文件路径
refPath = 'ref/MNI152_T1_1mm_brain.nii.gz' #参考文件路径
savePath = 'OUT_SEG_FR' #保存路径
files = os.listdir(inputPath)
bars = tqdm(files) #进度条
for stop, file in enumerate(bars):
filePath = os.path.join(inputPath, file)
fileSavePath = os.path.join(savePath, file)
flirt(src=filePath,
ref=refPath,
out=fileSavePath,
cost='corratio',
dof=12,
interp='trilinear') #函数调用
if stop == 10: #调试用的停止标志
break
补充
1. 空间变换
当我们进行配准时,必须要选择配准的空间变换方式,不同的方式,对大脑的形状和大小改变不一样。常用的有:
- 刚体变换(Rigid-Body Transformations): 6个自由度(3转动,3平动)
- 仿射变换(Affine Transformations): 12个自由度(3转动,3平动,3缩放, 3偏斜/剪切)
- 非线性变换(Non-Linear Transformations):多于12个自由度
这里的3是指有3个方向(x, y, z)
2.cost functions
cost functions,即代价函数用于评判配准的好坏。
- correlation ratio(相关比):默认,常用于MRI模态之间
- mutual information(互信息):常用于不同影像模态之间,如CT和MRI
- least squares(最小二乘法):用于相同模态
- normalized correlation(标准化相关):用于相同模态,改变亮度,对比度
- normalized mutual information(标准化互信息):用于不同模态插值
3.fsl flirt 中的插值方法
-
trilinear(三线性插值):默认,快速
-
nearest neighbour(最近邻插值):用于离散化标签影像
-
spline(样条法):较慢,会产生范围外的值
-
sinc函数法
4.配准模板
fsl安装目录下,默认在/usr/local/fsl/data/standard
文件夹中,常用的MNI152的有这些(0.5mm,1mm,2mm代表精度,带有brain的是去脑壳的。):
5.有关FSL的其他参考资料
- fslpy · PyPI -
- Search · fslpy · GitHub
- MRI多序列,多中心数据集预处理–使用FSL-Flirt 配准数据_Tina姐的博客-CSDN博客_mri数据集
- 【核磁共振影像数据处理】fsl线性配准界面操作or代码处理?我都要_哔哩哔哩_bilibili
- Fsl学习过程(一)_czDemo的博客-CSDN博客_fsl使用教程
- MRI脑影像分析从哲学到技术再到点点点_意疏的博客-CSDN博客
6.有关分割脑壳的说明
在这里所用到的影像已经是去了脑壳的,用的是一个深度学习模型HD-BET,相较于CAT12或是FSL,效果都要更加精确一些。框架是pytorch,调试起来也并不复杂,如果是tensorflow的可以使用另一个模型deepbrain,链接都放在下面了。
HD-BET链接:GitHub - MIC-DKFZ/HD-BET: MRI brain extraction tool
deepbrain链接:GitHub - iitzco/deepbrain: Deep Learning tools for brain medical images