利用matlab的SPM12進行功能核磁共振成像資料處理_Auditory fMRI data(四)
阿新 • • 發佈:2018-12-19
懶癌患者可以直接利用SPM12 batch script的程式碼對資料處理進行操作,連資料都不需要下載,直接開啟matlab,執行以下程式碼即可。
data_path = fileparts(mfilename('fullpath')); if isempty(data_path), data_path = pwd; end fprintf('%-40s:', 'Downloading Auditory dataset...'); urlwrite('http://www.fil.ion.ucl.ac.uk/spm/download/data/MoAEpilot/MoAEpilot.zip','MoAEpilot.zip'); unzip(fullfile(data_path,'MoAEpilot.zip')); fprintf(' %30s\n', '...done'); % Initialise SPM %-------------------------------------------------------------------------- spm('Defaults','fMRI'); spm_jobman('initcfg'); % spm_get_defaults('cmdline',true); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PREAMBLE: DUMMY SCANS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f = spm_select('FPList', fullfile(data_path,'fM00223'), '^f.*\.img$') ; clear matlabbatch matlabbatch{1}.cfg_basicio.file_dir.dir_ops.cfg_mkdir.parent = cellstr(data_path); matlabbatch{1}.cfg_basicio.file_dir.dir_ops.cfg_mkdir.name = 'dummy'; matlabbatch{2}.cfg_basicio.file_dir.file_ops.file_move.files = cellstr(f(1:12,:)); matlabbatch{2}.cfg_basicio.file_dir.file_ops.file_move.action.moveto = cellstr(fullfile(data_path,'dummy')); spm_jobman('run',matlabbatch); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SPATIAL PREPROCESSING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f = spm_select('FPList', fullfile(data_path,'fM00223'), '^f.*\.img$'); a = spm_select('FPList', fullfile(data_path,'sM00223'), '^s.*\.img$'); clear matlabbatch % Realign %-------------------------------------------------------------------------- matlabbatch{1}.spm.spatial.realign.estwrite.data = {cellstr(f)}; matlabbatch{1}.spm.spatial.realign.estwrite.roptions.which = [0 1]; % Coregister %-------------------------------------------------------------------------- matlabbatch{2}.spm.spatial.coreg.estimate.ref = cellstr(spm_file(f(1,:),'prefix','mean')); matlabbatch{2}.spm.spatial.coreg.estimate.source = cellstr(a); % Segment %-------------------------------------------------------------------------- matlabbatch{3}.spm.spatial.preproc.channel.vols = cellstr(a); matlabbatch{3}.spm.spatial.preproc.channel.write = [0 1]; matlabbatch{3}.spm.spatial.preproc.warp.write = [0 1]; % Normalise: Write %-------------------------------------------------------------------------- matlabbatch{4}.spm.spatial.normalise.write.subj.def = cellstr(spm_file(a,'prefix','y_','ext','nii')); matlabbatch{4}.spm.spatial.normalise.write.subj.resample = cellstr(f); matlabbatch{4}.spm.spatial.normalise.write.woptions.vox = [3 3 3]; matlabbatch{5}.spm.spatial.normalise.write.subj.def = cellstr(spm_file(a,'prefix','y_','ext','nii')); matlabbatch{5}.spm.spatial.normalise.write.subj.resample = cellstr(spm_file(a,'prefix','m','ext','nii')); matlabbatch{5}.spm.spatial.normalise.write.woptions.vox = [1 1 3]; % Smooth %-------------------------------------------------------------------------- matlabbatch{6}.spm.spatial.smooth.data = cellstr(spm_file(f,'prefix','w')); matlabbatch{6}.spm.spatial.smooth.fwhm = [6 6 6]; spm_jobman('run',matlabbatch); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % GLM SPECIFICATION, ESTIMATION, INFERENCE, RESULTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f = spm_select('FPList', fullfile(data_path,'fM00223'), '^swf.*\.img$'); clear matlabbatch % Output Directory %-------------------------------------------------------------------------- matlabbatch{1}.cfg_basicio.file_dir.dir_ops.cfg_mkdir.parent = cellstr(data_path); matlabbatch{1}.cfg_basicio.file_dir.dir_ops.cfg_mkdir.name = 'GLM'; % Model Specification %-------------------------------------------------------------------------- matlabbatch{2}.spm.stats.fmri_spec.dir = cellstr(fullfile(data_path,'GLM')); matlabbatch{2}.spm.stats.fmri_spec.timing.units = 'scans'; matlabbatch{2}.spm.stats.fmri_spec.timing.RT = 7; matlabbatch{2}.spm.stats.fmri_spec.sess.scans = cellstr(f); matlabbatch{2}.spm.stats.fmri_spec.sess.cond.name = 'active'; matlabbatch{2}.spm.stats.fmri_spec.sess.cond.onset = 6:12:84; matlabbatch{2}.spm.stats.fmri_spec.sess.cond.duration = 6; % Model Estimation %-------------------------------------------------------------------------- matlabbatch{3}.spm.stats.fmri_est.spmmat = cellstr(fullfile(data_path,'GLM','SPM.mat')); % Contrasts %-------------------------------------------------------------------------- matlabbatch{4}.spm.stats.con.spmmat = cellstr(fullfile(data_path,'GLM','SPM.mat')); matlabbatch{4}.spm.stats.con.consess{1}.tcon.name = 'Listening > Rest'; matlabbatch{4}.spm.stats.con.consess{1}.tcon.weights = [1 0]; matlabbatch{4}.spm.stats.con.consess{2}.tcon.name = 'Rest > Listening'; matlabbatch{4}.spm.stats.con.consess{2}.tcon.weights = [-1 0]; % Inference Results %-------------------------------------------------------------------------- matlabbatch{5}.spm.stats.results.spmmat = cellstr(fullfile(data_path,'GLM','SPM.mat')); matlabbatch{5}.spm.stats.results.conspec.contrasts = 1; matlabbatch{5}.spm.stats.results.conspec.threshdesc = 'FWE'; matlabbatch{5}.spm.stats.results.conspec.thresh = 0.05; matlabbatch{5}.spm.stats.results.conspec.extent = 0; matlabbatch{5}.spm.stats.results.print = false; % Rendering %-------------------------------------------------------------------------- matlabbatch{6}.spm.util.render.display.rendfile = {fullfile(spm('Dir'),'canonical','cortex_20484.surf.gii')}; matlabbatch{6}.spm.util.render.display.conspec.spmmat = cellstr(fullfile(data_path,'GLM','SPM.mat')); matlabbatch{6}.spm.util.render.display.conspec.contrasts = 1; matlabbatch{6}.spm.util.render.display.conspec.threshdesc = 'FWE'; matlabbatch{6}.spm.util.render.display.conspec.thresh = 0.05; matlabbatch{6}.spm.util.render.display.conspec.extent = 0; spm_jobman('run',matlabbatch);