| 图源-slice

| 工具:dpabi5.0, spm12, NIfTI_20140122(密码:iizk)
  

  我们知道在进行fMRI预处理的时候,要求所有被试时间点相同,它将直接影响到slice timing的顺利执行,另外要求每个体素的尺寸也相同。fMRI数据一般是4D的,不能直接看个数,但是可以通过MRIcro查看每个被试的时间点数和体素尺寸,不过很麻烦。笔者没有找到可以一次性审查全部被试时间点和体素尺寸的程序,所以自己写了一个,放在这里供大家参考。

  另外,dpabi是一个比较强大的脑影像分析工具,但它难以在不能显示图形界面和弹窗的服务器上使用,笔者想在那样的服务器上跑,所以也自己写了一个脚本,它可以完成在GUI能上完成的DPARSFA的所有操作,放在这里供大家参考。

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/113425845?spm=1001.2014.3001.5502


fMRI 时间点与体素尺寸批量审查


  • NIFTI解析工具

  matlab上的一个工具包NIfTI_20140122,是一个便利的nifti图像解析工具。其中load_nii() 函数,用于载入3D的影像,如T1像。load_untouch_nii() 函数用于载入4D的影像,如功能态影像。载入的nifti文件以一个结构体的形式储存,其中包括数据头(包含时间点,像素尺寸等信息)和图像数组。
  
  我们需要审查的项由右下图红框标出——nii_file.hdr.dime.dim(5)nii_file.hdr.dime.pixdim(2:4)。以在左下图MRIcro上显示的为参考,我们可以发现两者时间点和体素尺寸是一致的——240, [3.4375,3.4375,4.6]。


  随机查看多个被试,以确定全部被试正确的时间点和体素尺寸,笔者这批数据即为240, [3.4375,3.4375,4.6]。所以代码通过该标准来对数据进行批量审查。挑出时间点,像素尺寸等有问题的文件。

  • 代码与效果

  代码适用于如下所示的三层目录结构:运行后,通过GUI选择Root_dir。

% accurate timepoint and voxelsize
TimePoint = 240;
VoxelSize = [3.4375, 3.4375, 4.6];folder = uigetdir;
root_dir = dir(folder);
h=waitbar(0,'time point checking, please wait'); %进度条
[D1, D2] = size(root_dir);ErrorOut1 =  fullfile(folder, '_timepoint_error');    %存放错误文件的文件夹
if exist(ErrorOut1,'dir')==0mkdir(ErrorOut1)
end
ErrorOut2 =  fullfile(folder, '_voxelsize_error');
if exist(ErrorOut2,'dir')==0mkdir(ErrorOut2)
endErrorOut3 =  fullfile(folder, '_filemiss_error');
if exist(ErrorOut3,'dir')==0mkdir(ErrorOut3)
endfor i = 3:size(root_dir)files = dir(fullfile(root_dir(i).folder, root_dir(i).name));[d1, d2] = size(files);if d1 > 2nii_file = load_untouch_nii(fullfile(files(3).folder, files(3).name));time_point = nii_file.hdr.dime.dim(5);        % 时间点比较voxel_size = nii_file.hdr.dime.pixdim(2:4);   % 体素尺寸比较if time_point ~= TimePointmovefile(fullfile(root_dir(i).folder, root_dir(i).name),ErrorOut1); elseif VoxelSize ~= voxel_sizemovefile(fullfile(root_dir(i).folder, root_dir(i).name),ErrorOut2);endelsemovefile(fullfile(root_dir(i).folder, root_dir(i).name),ErrorOut3);endwaitbar(i/(D1-2), h);
enddisp('All Files Done!!!');
delete(h);

  效果与结果图:

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/113425845?spm=1001.2014.3001.5502


服务器上无GUI无弹窗跑DPARSFA


  • DPARSFA_run函数

  dpabi官网上提供了无GUI跑DPARSFA的方法,即直接调用DPARSFA_run(),它共有四个参数,可以通过以下方式调用:DPARSFA_run(Cfg)、DPARSFA_run(’/XXX.mat’)或者 DPARSFA_run(’/XXX.mat’,WorkingDir,SubjectListFile,IsAllowGUI)等。

  其中Cfg是一个结构体,它包含了包含Time Points等在内的几十个参数,它是XXX.mat的内容,而XXX.mat就是我们在如下GUI中选择参数后,save的.mat文件。

  • 服务器上DPARSFA_run函数修改

   如果输入的数据是nifti格式,或者没有勾选Crop——切脖子选项,且需要处理T1时,DPARSFA_run会因为找不到co开头的切了脖子的nifti图像。而在有GUI时产生如下弹窗——no co*T1 image is found,选yes则可以用T1像代替而继续运行。而在没有GUI的时则出错而停止

  修改方法:查找出DPARSFA_run.m文件中所有含questdlg的代码段,并做如下替换,共需要替换5处。目的是在没有co*T1时能够直接用T1接着运行。

  替换前代码

   button = questdlg(['No co* T1 image (T1 image which is reoriented to the nearest orthogonal direction to ''canonical space'' and removed excess air surrounding the individual as well as parts of the neck below the cerebellum) is found. Do you want to use the T1 image without co? Such as: ',DirImg(1).name,'?'],'No co* T1 image is found','Yes','No','Yes');if strcmpi(button,'Yes')UseNoCoT1Image=1;elsereturn;end

  替换后代码

    if AutoDataProcessParameter.IsAllowGUI == 0  % no GUI no pop-up windowsUseNoCoT1Image=1;disp('WARNING:No co* T1 image, use NoCoT1Image instead');elsebutton = questdlg(['No co* T1 image (T1 image which is reoriented to the nearest orthogonal direction to ''canonical space'' and removed excess air surrounding the individual as well as parts of the neck below the cerebellum) is found. Do you want to use the T1 image without co? Such as: ',DirImg(1).name,'?'],'No co* T1 image is found','Yes','No','Yes');if strcmpi(button,'Yes')UseNoCoT1Image=1;elsereturn;endend

  另外,在无GUI的情况下,默认不会产生PicturesForChkNormalization文件夹,而它是后面做质量检测时重要的参考,所以必须要产生它。做如下修改即可。修改完保存。

  查找出所有的Generate the pictures only if GUI is allowed字段,共两处,将其所在行的if语句注释掉,并且注释其对应的end。

% if AutoDataProcessParameter.IsAllowGUI %YAN Chao-Gan, 161011. Generate the pictures only if GUI is allowed.
  • 笔者代码——dpabi_noGUI

   笔者代码如下,它的功能是通过输入参数更新Cfg结构体、运行DPARSFA处理流程并生成log文件。它的参数有四个,Cfg_file是在GUI上选择并保存的.mat文件,work_dir是dpabi指定的工作目录,StartingDirName是DPARSFA处理流程的起始目录,如FunImg。ROI_altas_name是要做ROI分析时指定的脑图谱的名字,它必须存在与dpabi的Template下才能使用。

function dpabi_noGUI(Cfg_file,work_dir,StartingDirName,ROI_altas_name)% use dpabi pipeline without GUI
% Cfg_file, work_dir , StartingDirName and ROI_atlas_name in dpabi as fuction inputs.
% Cfg_file mat file from dipabi GUI selection saving.
% if you dont do FC with ROI altas, make ROI_altas_name='', if not, make  ROI_altas_name= 'altas_name' such as 'aal.nii'
% command: matlab -nodisplay "$nojvm" -nosplash -r "dpabi_noGUI('/home/pc/fMRI/data/tmp.mat','/home/pc/fMRI/data','FunImg', 'aal.nii')"
% kill progress command: ps -ef|grep 'matlab'|grep -v  'ii'|cut -c 9-16|xargs kill -9dpabi_dir = '/home/opt/matlab2018a/toolbox/dpabi';   %dpabi install dir,需要自行修改路径template_dir = [dpabi_dir,'/Templates/'];sub_dir = dir([work_dir, '/',StartingDirName]);log_file = [work_dir, '/log.txt'];[D1, ~] = size(sub_dir);SubjectID = cell(D1-2, 1);for i = 3:D1SubjectID{i-2} = sub_dir(i).name;endload(Cfg_file)Cfg.WorkingDir = '';Cfg.DataProcessDir  = '';Cfg.SubjectID = SubjectID;if Cfg.IsCalFC == 1 || Cfg.IsExtractROISignals == 1if size(ROI_altas_name) == 0disp('there is no ROI_atlas_name')returnelse Cfg.CalFC.ROIDef = {[template_dir, ROI_altas_name]};endendCfg.StartingDirName = StartingDirName;f1 = fopen(log_file,'w+');diary(log_file)diary onDPARSFA_run(Cfg,work_dir,'',0);fclose(f1);disp('Success!')diary offend
  • dpabi_noGUI使用——简单配置

   将dpabi_noGUI.m传到服务器上,并将它所在路径添加到matlab搜索路径,这样可以直接在matlab中用dpabi_noGUI()使用该函数,当然也可以直接把它传到dpabi的安装目录下。如下是命令行永久添加matlab搜索路径的方法。

matlab -nodisplay
p=genpath('scriptpath')
addpath(p)
savepath
  • dpabi_noGUI使用——流程

  比如我想在服务器上跑协变量回归,滤波,功能连接和ROI时间序列提取操作。我需要这样操作:

   第一、在自己电脑上用GUI选好要做的流程,如下图,我勾选了4个我想做的操作。工作目录,被试列表,和起始目录可以默认。选好后保存成.mat文件。

   第二、把.mat文件和要处理的数据一起传到服务器上。假设传到了/xx/xx/xx下。

   第三、打开终端,敲入如下命令。路径一定要是绝对路径,相对路径会出错。由于我先前做过头动校正和归一化了,所以起始目录选的FunImgRW,然后脑图谱用的400个脑区的Schaefer2018_400Parcels_7Networks_order_FSLMNI152_1mm.nii

matlab -nodisplay "$nojvm" -nosplash -r "dpabi_noGUI('/xx/xx/xx/xxx.mat','/xx/xx/xx', 'FunImgRW', 'Schaefer2018_400Parcels_7Networks_order_FSLMNI152_1mm.nii')"

  强制停止进程方法

ps -ef|grep 'matlab'|grep -v  'ii'|cut -c 9-16|xargs kill -9

  结果与效果

  400个脑区的连接矩阵:出现与主对角线平行的两条线的原因是Schaefer2018_400Parcels_7Networks_order_FSLMNI152_1mm.nii图谱,前200和后200分别对应的是左右脑对称位置的脑区,而在对称位置的功能往往存在较大的相似性,所以出现高亮的线。

figure
imagesc(255*ROICorrelation)

  PicturesForChkNormalization:

  • XXX.mat修改

  .mat文件决定了dpabi的执行流程。如果中途发现它需要修改,在本地修改好了,用FileZilla之类的工具传到服务器上,覆盖原来的.mat文件即可。

  完成后,重新执行脚本。

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/113425845?spm=1001.2014.3001.5502


参考


http://www.rfmri.org/content/configurations-dparsfarun

fMRI质量预检查与服务器批量处理:时间点、体素尺寸批量审查与Dpabi(DPARSFA)服务器上无GUI无弹窗处理脑功能影像(附matlab脚本)相关推荐

  1. 明日方舟服务器维护结束时间,明日方舟9月18日12:00服务器停机维护通知_明日方舟9月18日更新了什么_玩游戏网...

    <明日方舟>礼包码大全 明日方舟礼包兑换码怎么获得?官方为玩家们准备了很多的福利,可能有玩家还不清楚明日方舟兑换码的获取途径,小编这里就汇总了明日方舟的礼包码,赶紧来兑换吧!明日方舟礼包码 ...

  2. 看服务器时间修改日志,怎样看服务器远程更改时间记录

    怎样看服务器远程更改时间记录 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 华 ...

  3. 大话西游2服务器显示不出来,大话西游2:不到一年的服务器出现2只化无龙兔,主人是同一个人...

    原标题:大话西游2:不到一年的服务器出现2只化无龙兔,主人是同一个人 每天一期大话,期期都有精彩,大家好,我是你们熟悉的小苏.每次提及<大话西游2>玩家们最先想到的关键词就是"氪 ...

  4. 浪潮财务软件 系统表预检查: 对象 ID X。无法使用闩锁类型 SH 读取并闩锁页 。由于不可修复的错误,CHECK 语句已终止。

    浪潮财务软件 系统表预检查: 对象 ID X.无法使用闩锁类型 SH 读取并闩锁页 .由于不可修复的错误,CHECK 语句已终止. 数据恢复故障描述: 客户由于断电不正常关机,正在录入凭证的时候停电, ...

  5. RHCE--Linux中搭建主DNS、正反批量解析、区域传送、辅DNS、缓存DNS服务器

    文章目录 DNS的概念 DNS域名解析全过程 因特网的域名结构 DNS中的七大资源记录 1.A记录 格式:完整主机名(FQDN) IN A IP地址 2.NS记录 格式:区域名 IN NS 完整主机名 ...

  6. Linux设备配置DNS服务器,实现正向解析和反向解析,实现DNS主从服务器同步,实现批量域名正/反向解析

    本文基于Linux上CentOS 7版本配合bind(named)服务进行演示 一.DNS域名服务器原理及作用等介绍 1.DNS简介: 2.原理简单介绍 3.常见域名后缀 4.DNS域名服务器类型 5 ...

  7. 从服务器收到意料之外的响应,WordPress出现“从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。”错误的解决方法...

    在WordPress网站上遇到图片上传问题?对于大多数初学者来说,图片上传错误可能会让人很困惑,因为无需您做任何其他操作就可以显示它们. 无法上传图片是WordPress中最常见的图片问题之一.幸运的 ...

  8. 代码质量静态检查工具

    一 点睛 代码质量静态检查工具可以自动快速发现劣质代码,潜在Bug,给出代码优化建议.因此代码静态检查工具在实际项目研发中有举足轻重的作用,利用好各种优秀检查工具是做好品质管理的重要环节. 二 静态分 ...

  9. 【Vegas原创】wordpress 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。此响应不是合法的JSON响应。解决方法。...

    两种报错方式: 1.此响应不是合法的JSON响应. 2.从服务器收到预料之外的响应.此文件可能已被成功上传.请检查媒体库或刷新本页. 情况:媒体服务器上传小文件没问题,大一点的文件报这个错误. 原因: ...

最新文章

  1. Java排序 - 不实用的几个排序算法 -- 睡眠排序、猴子排序、面条排序、珠排序...
  2. Laravel Breadcrumbs 自动面包屑导航
  3. 【DP】【递归】分离与合体
  4. wsl2 Ubuntu 18.04 安装 ROS
  5. vue+node前后端分离接口调用(初学者)
  6. java访问其它服务器,一个Java Web应用程序是否可以在tomcat服务器的同一本地主机中调用另一个Java Web应用程序...
  7. 测试用例设计技术之一等价类法
  8. (2) GoJS Node简介
  9. 熊猫猪新系统測试之二:Mac OS X 10.10 优胜美地
  10. Javascript:forEach、map、filter、reduce、reduceRight、find、findIndex、keys、values、entries、every、some的使用
  11. MongoDB学习(黑马教程)-2-数据库MongoDB的导入文档和查询文档的操作
  12. 高清卫星影像DEM数据免费下载,3款软件4个网站推荐收藏!
  13. 中国省份、市区、地区县信息表
  14. 自己制做python3.6精简绿色版
  15. excel自动调整列宽_如何以厘米为单位精确设置Excel表格的行高列宽?
  16. 智能清洁新消费的2021:不止营销造势,还有实力突围
  17. excel行数据不规则解析匹配
  18. SEO人员,为什么要做流量过滤,如何操作?
  19. 诺基亚暗恋Android背后:WP增长是假象
  20. 谷歌的招聘(pta)

热门文章

  1. 输入时刻time,计算出在time和time+1之间,时针和分针重合的时刻
  2. 芝诺数解|【二】风禾尽起,且住为佳——重庆租房
  3. Photoshop从入门到精通所有视频教程(43G)以及素材资料免费拿
  4. Scala集合—可变Map和不可变Map |CSDN独创
  5. day26-多进程多线程
  6. 转《魏炜的举世无双大博客》
  7. 每天一剂 WebView 良药
  8. 图片表情制作,QQ斗图生成,搜狗图片搜索,自适应支持手机浏览
  9. 首例 3次IPO:前2次申请科创板、创业板均撤回、第3次改为主板、难圆其说变更保代及券商……
  10. 操作系统——进程管理(一文弄懂进程间的那些事)