dpabi之ROI提取批量代码
与之前的fMRI预处理系列一脉相承
代码地址:https://github.com/zhoushusheng/fMRI_preprocessing
结合这篇看好理解:https://www.cnblogs.com/zhoushusheng/p/18322112
% 设置 ROI 掩膜文件路径 roiMask = 'C:\Users\Administrator_S\Desktop\rAAL.nii'; % 设置主目录和被试者列表 mainDir = 'B:\fMRI\preprocessing_exclude_10s\CN\'; subjects = 1:35; % 被试者编号 sbj01 到 sbj20 % 遍历每个被试者的文件夹 for i = subjects % 生成被试者文件夹名称(如 sbj01, sbj02, ...) if i < 10 subjFolder = sprintf('sbj0%d', i); else subjFolder = sprintf('sbj%d', i); end % 设置 fMRI 输入目录和 ROI 输出目录 inputDir = fullfile(mainDir, subjFolder, 'fMRI'); outputDir = fullfile(mainDir, subjFolder, 'ROI'); % 检查输入目录是否存在 if isfolder(inputDir) disp(['Processing folder: ', inputDir]); % 创建 ROI 输出目录(如果不存在) if ~isfolder(outputDir) mkdir(outputDir); end % 获取所有以 'swrs' 开头的 .nii 文件 niiFiles = dir(fullfile(inputDir, 'swrs*.nii')); % 如果找到符合条件的文件,提取路径并处理 if ~isempty(niiFiles) niiFilePaths = fullfile(inputDir, {niiFiles.name}); disp('Processing all files for this subject...'); % 使用 DPABI 的 y_ExtractROISignal 提取 ROI 信号(一次性处理所有文件) outputROIFilePrefix = fullfile(outputDir, 'ROI_Signals_fMRI'); y_ExtractROISignal(niiFilePaths, {roiMask}, [outputROIFilePrefix, '.mat'], 0, '', ''); % 动态查找生成的 .mat 文件 matFiles = dir(fullfile(outputDir, '*.mat')); % 查找所有生成的 .mat 文件 if ~isempty(matFiles) % 假设生成的文件中,第一个就是我们需要的文件 matFilePath = fullfile(outputDir, matFiles(1).name); disp(['Loading file: ', matFilePath]); % 加载 .mat 文件内容,查看所有变量 fileInfo = whos('-file', matFilePath); disp('Variables in the .mat file:'); disp({fileInfo.name}); % 检查是否有名为 'ROICorrelation_FisherZ' 的变量 if ismember('ROICorrelation_FisherZ', {fileInfo.name}) load(matFilePath, 'ROICorrelation_FisherZ'); % 保存相关性矩阵为文本文件 dlmwrite([outputROIFilePrefix, '_FisherZ_Correlation.txt'], ROICorrelation_FisherZ, 'delimiter', '\t'); % 保存 Fisher Z 变换后的相关性矩阵 save([outputROIFilePrefix, '_FisherZ_Correlation.mat'], 'ROICorrelation_FisherZ'); disp(['Fisher Z Correlation extracted and saved.']); else disp('Error: Variable ''ROICorrelation_FisherZ'' not found in the .mat file!'); end else disp('Error: ROI Signals .mat file not found in directory after extraction!'); end else disp(['No matching files found in folder: ', inputDir]); end else disp(['Input directory does not exist: ', inputDir]); end end
本文来自博客园,作者:z_s_s,转载请注明原文链接:https://www.cnblogs.com/zhoushusheng/p/18381762