Fork me on GitHub

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

 

posted @ 2024-08-27 01:16  z_s_s  阅读(211)  评论(0)    收藏  举报