SIM(Structural Imaging Methods)分析
- 使用Freesurfer软件对所有单例执行recon-all命令
cd 你存放数据的目录 recon-all -s *.nii.gz -all -qcacherecon-all命令为单线程,可以使用parallel软件并行化处理
ls *.nii.gz | parallel --jobs 16 recon-all -s {.} -i {} -all -qcache其中16为笔者处理器的最大线程数,应当按照你处理器支持的线程数替换
- 使用shell脚本处理sample/stats下的脑区划分统计数据文件,得到目标脑区的皮质体积,厚度等指标

这是一例recon-all处理好的样本,皮层厚度,体积之类的统计数据存放于stats文件夹内
其中一部分数据,我们要统计多个样本数据的话,需要对数据做提取处理#! /bin/bash count=0 sum_L=0.000 sum_R=0.000 avg=0.000 cd 你所有样本的上级目录 for zone in temporalpole transversetemporal do count=0 sum_L=0.000 sum_R=0.000 avg=0.000 for case in `ls` do sum_L=$(echo "$(cat ${case}/stats/lh.aparc.stats | grep -E ${zone} | gawk '{print$4}')+${sum_L}"|bc) sum_R=$(echo "$(cat ${case}/stats/rh.aparc.stats | grep -E ${zone} | gawk '{print$4}')+${sum_R}"|bc) count=$((${count}+1)) done avg=$(echo "(${sum_L}+${sum_R})/${count}"|bc) # echo "total value $(echo ${sum_L}+${sum_R}|bc)" echo "${zone} average value $(echo ${avg}|bc)" done以这里的shell脚本为例,它遍历样本通过grep匹配数据所在位置,计算得到了所有样本颞极和横向颞叶的平均灰质体积
DTI分析
- 写在最前,Mrtrix3提供了简易的批处理工具,即函数for_each,具体用法为
for_each 此处正则匹配你要批处理的文件或目录 : 此处输入命令并用IN替换其中的文件名或目录这么说可能有点抽象,但相信你结合下面的图片与之后步骤的代码就明白了

图片内容仅作展示,请参考具体操作步骤 使用mrconvert将nii格式的dwi图像与bvec,bvals数据合并为mif格式的dwi文件
for_each * : mrconvert -fslgrad IN/DTI/dwi.bvec IN/DTI/dwi.bval IN/DTI/dwi.nii.gz IN/DTI/dwi.mif -force这里bval与bvec文件的后缀名没有影响,因为都是纯文本
- 执行dwidenoise降噪
for_each * : dwidenoise IN/DTI/dwi.mif IN/DTI/dwi_denoised.mif -force - 执行mrdegibbs去除吉布斯伪影
for_each * : mrdegibbs IN/DTI/dwi_denoised.mif IN/DTI/dwi_denoised_unringed.mif -axes 0,1 -force - 执行dwifslpreproc矫正运动失真
for_each * : dwifslpreproc IN/DTI/dwi_denoised_unringed.mif IN/DTI/dwi_denoised_unringed_preproc.mif -rpe_none -pe_dir AP -force - 执行dwi2mask生成大脑mask
for_each * : dwi2mask IN/DTI/dwi_denoised_unringed_preproc.mif IN/DTI/dwi_mask.mif - 执行dwibiascorrect偏置场矫正
for_each * : dwibiascorrect fsl IN/DTI/dwi_denoised_unringed_preproc.mif IN/DTI/dwi_denoised_unringed_preproc_unbiased.mif -force - 执行dwi2tensor生成dt_all的全体tensor文件
for_each * : dwi2tensor IN/DTI/dwi_denoised_unringed_preproc_unbiased.mif IN/DTI/dt_all.nii -fslgrad IN/DTI/dwi.bvec IN/DTI/dwi.bval -mask IN/DTI/dwi_temp_mask.mif -force - 执行tensor2metric,用-fa,-vector等参数生成FA,vector等数据
for_each * : tensor2metric IN/DTI/dt_all.nii -fa IN/DTI/dt_fa.nii.gz -force for_each * : tensor2metric IN/DTI/dt_all.nii -vector IN/DTI/dt_ev.nii.gz -force for_each * : tensor2metric IN/DTI/dt_all.nii -adc IN/DTI/dt_adc.nii.gz -force for_each * : tensor2metric IN/DTI/dt_all.nii -ad IN/DTI/dt_ad.nii.gz -force for_each * : tensor2metric IN/DTI/dt_all.nii -rd IN/DTI/dt_rd.nii.gz -force - 将所有FA文件按样本名称编号,分组放入文件夹
这里仅供参考,主要是为了展示for_each重新命名文件上的便捷用法,实际上需要根据你的分组修改名称以及存放的位置
for_each * : cp IN/DTI/dt_fa.nii.gz 你的目录/FA_patient/IN.nii.gz - 在存放FA文件的文件夹内执行tbss_1_preproc
cd 你存放FA文件的目录 tbss_1_preproc *.nii.gz
执行完第一步后,你所有的原文件都会被放入origdata - 用上一步中,origdata文件夹内的FA文件替换掉FA文件夹中的FA文件,因为tbss_1_preproc的腐蚀处理可能会导致mri图像内部出现空洞,影响暂时未知,欢迎各位大佬指正,不胜感激
cp 在这里用origdata的FA文件替换掉FA文件夹中的FA文件 - 执行tbss_2_reg配准所有图像,这里无所谓用哪种参数,因为最后需要重新配准
tbss_2_reg -T - 执行tbss_3_postreg生成存放在stats文件夹内的统计文件,这里无所谓用哪种参数,因为最后需要重新配准
tbss_3_postreg -S - 执行tbss_4_prestats生成白质骨架(可选),为执行基于骨架的白质统计做准备
tbss_4_prestats 0.2 - 使用fsleyes获取纤维束的ROI和脑模板

标准模板可以在fsl目录下找到,也可以用fsleyes界面里的add from standard添加到overlay list后保存
从settings调出atlases面板,然后再atlas search里将ROI添加到左侧的overlay list里,点击overlay list列表左侧的软盘按钮就可以保存单独的ROI图像了
- 执行fnirt非线性配准将13步中生成的mean_FA文件配准到脑模板

fnirt --ref=JHUtemplate.nii.gz --in=mean_FA.nii.gz --cout=mean_FA_reg_nonlinear iout=mean_FA_reg_nonlinear.nii.gz - 执行fslmaths,用ROI做mask从mean_FA中得到对应区域的FA图像
fslmaths mean_FA_reg_nonlinear.nii.gz -mas 你的ROI图像 FA_roi.nii.gz - 执行fslstats统计17中得到的FA ROI体素值
fslstats FA_roi.nii.gz -M
FBA分析
- 直接从上文DTI处理的第7步开始做起,开始全局强度归一化
这一步用符号链接处理文件,节省空间mkdir -p ../dwinormalise/dwi_input mkdir -p ../dwinormalise/mask_input for_each * : ln -sr IN/dwi_denoised_unringed_preproc_unbiased.mif ../dwinormalise/dwi_input/IN.mif -force for_each * : ln -sr IN/dwi_temp_mask.mif ../dwinormalise/mask_input/IN.mif -force dwinormalise group ../dwinormalise/dwi_input/ ../dwinormalise/mask_input/ ../dwinormalise/dwi_output/ ../dwinormalise/fa_template.mif ../dwinormalise/fa_template_wm_mask.mif -force for_each ../dwinormalise/dwi_output/* : ln -sr IN PRE/dwi_denoised_unringed_preproc_unbiased_normalised.mif - 计算响应函数
for_each * : dwi2response tournier IN/dwi_denoised_unringed_preproc_unbiased_normalised.mif IN/response_normalised.txt -force responsemean */response_normalised.txt ../group_average_response.txt -force - 对图像上采样
# for_each * : mrgrid IN/dwi_denoised_unringed_preproc_unbiased_normalised.mif regrid -vox 1.25 IN/dwi_denoised_unringed_preproc_unbiased_normalised_upsampled.mif -force # for_each * : dwi2mask IN/dwi_denoised_unringed_preproc_unbiased_normalised_upsampled.mif IN/dwi_mask_upsampled.mif -force - FOD估计,采用球面反卷积算法
for_each * : dwiextract IN/dwi_denoised_unringed_preproc_unbiased_normalised_upsampled.mif - \| dwi2fod msmt_csd - ../group_average_response.txt IN/wmfod.mif -mask IN/dwi_mask_upsampled.mif -force - 生成一个专用的非偏置FOD模板
mkdir -p ../template/fod_input mkdir ../template/mask_input for_each * : ln -sr IN/wmfod.mif ../template/fod_input/PRE.mif -force for_each * : ln -sr IN/dwi_mask_upsampled.mif ../template/mask_input/PRE.mif -force #这是为分组分析做的 for_each `ls -d *patient | sort -R | tail -20` : ln -sr IN/wmfod.mif ../template/fod_input/PRE.mif ";" ln -sr IN/dwi_mask_upsampled.mif ../template/mask_input/PRE.mif for_each `ls -d *control | sort -R | tail -20` : ln -sr IN/wmfod.mif ../template/fod_input/PRE.mif ";" ln -sr IN/dwi_mask_upsampled.mif ../template/mask_input/PRE.mif #这是为分组分析做的 population_template ../template/fod_input -mask_dir ../template/mask_input ../template/wmfod_template.mif -voxel_size 1.25 - 将所有图像配准至刚才的模板
for_each * : mrregister IN/wmfod.mif -mask1 IN/dwi_mask_upsampled.mif ../template/wmfod_template.mif -nl_warp IN/subject2template_warp.mif IN/template2subject_warp.mif -force for_each * : mrtransform IN/wmfod.mif -warp IN/subject2template_warp.mif -reorient_fod no IN/fod_in_template_space_NOT_REORIENTED.mif -force - 计算模板的mask
for_each * : mrtransform IN/dwi_mask_upsampled.mif -warp IN/subject2template_warp.mif -interp nearest -datatype bit IN/dwi_mask_in_template_space.mif -force mrmath */dwi_mask_in_template_space.mif min ../template/template_mask.mif -datatype bit -force - 计算白质分析模板的mask
fod2fixel -mask ../template/template_mask.mif -fmls_peak_value 0.10 ../template/wmfod_template.mif ../template/fixel_mask -force 分割FOD图像以估计fixel及其表观纤维密度(FD)
for_each * : fod2fixel -mask ../template/template_mask.mif IN/fod_in_template_space_NOT_REORIENTED.mif IN/fixel_in_template_space_NOT_REORIENTED -afd fd.mif -forcefixel重定向
for_each * : fixelreorient IN/fixel_in_template_space_NOT_REORIENTED IN/subject2template_warp.mif IN/fixel_in_template_space -force将个例的fixel与模板fixel关联
for_each * : fixelcorrespondence IN/fixel_in_template_space/fd.mif ../template/fixel_mask ../template/fd PRE.mif -force计算纤维横截面(FC)
for_each * : warp2metric IN/subject2template_warp.mif -fc ../template/fixel_mask ../template/fc IN.mif -force对于分组统计来说,使用log(FC)是更好的选择
mkdir ../template/log_fc cp ../template/fc/index.mif ../template/fc/directions.mif ../template/log_fc for_each * : mrcalc ../template/fc/IN.mif -log ../template/log_fc/IN.mif -force计算纤维密度-横截面联合参数(FDC)
mkdir ../template/fdc cp ../template/fc/index.mif ../template/fdc cp ../template/fc/directions.mif ../template/fdc for_each * : mrcalc ../template/fd/IN.mif ../template/fc/IN.mif -mult ../template/fdc/IN.mif -force全脑纤维束追踪
cd ../template tckgen -angle 30 -maxlen 25 -minlen 1 -power 1.0 wmfod_template.mif -seed_image template_mask.mif -mask template_mask.mif -select 20000000 -cutoff 0.10 tracks_20_million.tck -force
之后关于连接组与FD FC FDC的工作还有待细化,先写这么多吧,有时间再更新
Enable Ginger Cannot connect to Ginger Check your internet connectionor reload the browserDisable in this text fieldRephraseRephrase current sentence Log in to edit with Ginger×
本文含有隐藏内容,请 开通VIP 后查看