
简介本资源是专为神经影像研究者设计的SPM12兼容AAL2脑区模板工具包面向使用MATLAB进行fMRI数据分析的科研人员与研究生解决AAL2模板在SPM12中无法直接调用、空间配准与ROI提取不便等实际问题。压缩包共22个文件369KB包含9个MATLAB函数.m用于自动加载、标签映射与簇分析3个.mat/.txt格式的MNI空间ROI定义文件如ROI_MNI_V5_vol.mat2个NIfTI标准模板AAL2.nii、aal2.nii.gz以及XML元数据、LUT颜色查找表和README说明文档全面支持SPM12中的标准化、掩膜生成与统计结果标注。已有655人学习下载资源结构清晰、即装即用提供从模板导入、空间配准到基于AAL2的ROI信号提取与聚类分析的完整脚本链显著提升fMRI组分析效率与可重复性。 前几天一个师弟跑过来问我说下载了aal2_for_SPM12.tar.gz之后解压出来一堆文件却不知道该怎么把它在 SPM12 里真正用起来。我一看这问题太典型了——很多人拿到这个压缩包以为把它塞进 MATLAB 路径就行结果一运行 PPI 或者提取 ROI 信号界面里根本看不到 AAL2 的选项。这篇文章我就从实际使用角度把这个工具包的来龙去脉、安装配置、以及在 fMRI 数据分析里的具体用法完整梳理一遍。先说明这东西到底解决什么问题。AAL2 全称是 Automated Anatomical Labeling atlas 第 2 版本质是一套脑区模板把整个大脑划分成几十个解剖区域配上编号和坐标。做 fMRI 数据处理时不管是提取种子点时间序列、做功能连接还是用 PPI 分析心理生理交互都得先确定“我要研究哪些脑区”。SPM12 自带的图谱比较老旧分区粗糙AAL2 对皮层下结构和小脑做了更细的分割所以在不少研究里比旧版更实用。适合谁看凡是手上有 fMRI 数据、准备做 ROI 分析或 PPI 分析又苦于不知道如何把 AAL2 正确挂到 SPM12 里的人这篇都能帮上忙。1. AAL2 模板的设计思路为什么这么多人绕不开它1.1 AAL 和 AAL2 的差异在哪里老版 AAL 是 2002 年提出的当年它在 Talairach 坐标基础上做了配准转换最后定在 MNI 空间把大脑分成 90 个区域。这个模板用了很多年好处是简单、够用但在实际用的时候它的一个明显短板就是皮层下分区太粗。比如壳核、尾状核、苍白球这些基底节区域它基本上只是按照大致边界圈一个大型 ROI小脑更是简单粗暴直接就是左右两个大块。对于一些精细研究比如奖赏环路、运动控制、成瘾相关的 fMRI 实验这样的分区明显不够。AAL2 的定位就是解决掉这个粗糙度的问题。我个人的印象是它最主要的升级点有三个第一基底节区域做了拆分尤其是把腹侧纹状体单独标记出来这在研究奖赏加工、动机行为时特别重要第二丘脑不再是一个整体大核团而是划分出几个不同的亚区这对感觉通路研究、意识研究的帮助很大第三小脑按照小叶做了更细致的分割不再只有“左小脑”和“右小脑”两个选项。另外AAL2 的文件格式也从老式的 Analyze 格式换成了 NIfTI 格式就是.nii文件这对于现在的 SPM12 和 MATLAB 来说更友好。1.2 为什么 SPM12 里要用独立图谱而不是自带的SPM12 本身自带了一些模板比如TPM.nii这种组织概率图还有早期版本留下的 AAL 图谱文件。但 SPM12 自带的图谱文件是很久以前跟着 SPM8 一起流传下来的里面只包含 AAL 的老版本 90 个分区没有 AAL2 最新的解剖划分。如果你做 ROI 分析时直接依赖 SPM 下拉菜单里默认的那几项可能根本选不到腹侧纹状体、黑质这些区域或者选到了但是分区边界非常粗糙。这时候把 AAL2 装进去SPM12 的 ROI 提取和 PPI 界面就能直接调用不需要你手动去勾画 ROI也不用转去 MarsBaR 里面一个个手动建 ROI。还有一点很关键做全脑 ROI 批量分析的时候AAL2 能让你一次性把几十上百个脑区的信号全部提取出来。手动勾画 ROI 如果只有三五个还能忍受一旦碰上要做全脑功能连接矩阵或者用多个种子点做相关分析手动定义的工作量完全不可行。AAL2 这种“一个模板文件 一个标签表”的方式本质上就是把“定义 ROI”这一步自动化了这也是它成为很多分析流程默认选择的原因。1.3 压缩包里每个文件是干什么的解压aal2_for_SPM12.tar.gz之后里面通常会看到好几类文件我建议别急着把它们乱放先搞清楚各自的用途aal2.nii或ROI_MNI_V7.nii这是图谱的核心图像文件每个体素存一个整数编号编号相同的体素就属于同一个脑区。比如编号 1 可能是颞极编号 2 可能是颞上回具体对应关系看 XML 标签表。aal2.xml标签文件列出了每个脑区的编号、英文全称、缩写、MNI 坐标、体素数等信息。SPM12 在读取图谱时主要就是靠它把图像里的体素编号翻译成文字名称。spm_aatlases.mat和spm_aatlases.m这是 SPM12 的图谱查询接口文件。如果你发现 SPM12 的 PPI 界面里多了一个 Atlas 下拉框并且里面出现了 AAL2 的选项那就是这两个文件在起作用。其他可能有aal2.xlsx或者aal2.csv之类的表格文件方便你直接用 Excel 或者 MATLAB 读取脑区编号和坐标不需要翻代码。理解这些文件的分工之后安装的原理就清楚了图像文件提供“几何地图”XML 文件提供“地名对照表”spm_aatlases.mat则是把两者注册到 SPM12 的图谱列表里。三个部分缺一个SPM12 可能能读取图像但显示不出脑区名称或者干脆找不到这个模板。注意SPM12 里判断一个图谱能不能用靠的是spm_atlas(list)这个函数返回的图谱列表。如果你把文件放好位置但没有注册到spm_aatlases.mat那列表里就永远不会有 AAL2后面做 PPI 的时候自然也选不到。2. 安装配置全流程从压缩包到 SPM12 认出来2.1 第一步解压并且放对位置解压这一步没什么技术含量但有一个路径上的细节很多人会踩坑。aal2_for_SPM12.tar.gz解压后是一个名为aal2_for_SPM12的文件夹我建议把它整体放到 SPM12 工具箱目录下。常见的位置是你的SPM12安装目录/canonical/aal2_for_SPM12等等这里要先说明一下。实际上aal2_for_SPM12文件夹在官方发布版本里推荐放的位置有两个。第一种是放到spm12/toolbox下面第二种是放到spm12/canonical下面然后更新路径。根据我的实测最稳的是放在canonical目录里因为这个目录是 SPM12 专门存放标准图谱和模板文件的地方spm_atlas在启动时会优先扫描这个目录。当然这不是唯一办法你用addpath把文件夹加入 MATLAB 搜索路径也能让 SPM12 找到它但那样必须保证 MATLAB 路径设置每次开机都能记住如果你的 MATLAB 是绿色版或者装在实验室公共服务器上重启后路径设置经常失效那就很容易出问题。2.2 第二步在 MATLAB 里添加路径打开 MATLAB在命令窗口里执行addpath(genpath(/你的路径/aal2_for_SPM12)); savepath;genpath会把当前文件夹以及所有子文件夹都加入搜索路径savepath则是把这个路径设置永久保存下来避免下次启动 MATLAB 时失效。如果这一步不执行或者执行了但没有保存那么下次 MATLAB 一重启AAL2 就会从路径里消失SPM12 自然找不到它。这里有一个容易忽略的问题你的 MATLAB 当前工作目录或者 SPM12 安装路径里如果存在其他版本的spm_aatlases.mat文件MATLAB 有可能会优先加载那个文件导致 AAL2 不被识别。排查方法是在 MATLAB 里执行which spm_aatlases.mat看看返回的路径是不是指向你的 AAL2 文件夹。如果指向别的地方说明路径顺序不对需要把 AAL2 文件夹放到搜索路径的更前面。2.3 第三步覆盖或更新 spm_aatlases.mat关键步骤这是整个安装流程里最容易出错的地方。aal2_for_SPM12文件夹里有一个spm_aatlases.mat文件它的作用是告诉 SPM12“我这里有一个图谱库名字叫 AAL2里面包含这些脑区。”而 SPM12 自己原本也带了一个spm_aatlases.mat位置在spm12/canonical目录下。如果你不把新的spm_aatlases.mat覆盖过去SPM12 还是只会加载它自己旧的那个图谱列表AAL2 不会出现在任何界面里。具体操作就是先把 SPM12 自带的spm_aatlases.mat备份一份例如改名为spm_aatlases_backup.mat然后把 AAL2 里带的spm_aatlases.mat复制到spm12/canonical目录下覆盖旧文件。复制完之后可以顺手在 MATLAB 里确认一下which spm_aatlases.mat如果返回路径已经变成你刚复制过去的位置那基本就成功了一半。注意如果你是在实验室公共服务器上操作没有管理员权限无法修改 SPM12 安装目录里的文件那还有一个变通办法——把spm_aatlases.mat留在 AAL2 自己的文件夹里然后确保那个文件夹在 MATLAB 搜索路径中排在 SPM12 文件夹之前。这样做不会修改 SPM12 安装目录但如果路径顺序乱了问题排查会麻烦一些。2.4 第四步验证安装是否成功验证安装的指令非常简单spm_atlas(list)如果安装成功这个命令会列出 SPM12 当前能识别到的所有图谱里面应该包含AAL2或者在名称上靠着的 AAL 系列条目。如果你看到的列表里只有 SPM 自带的几个旧模板没有 AAL2那说明spm_aatlases.mat没被正确读取。另一种验证方式更直观打开 SPM12 图形界面在 Batch Editor 里新建一个SPM - Tools - Extract ROI data的模块看一下 Atlas 选项的下拉菜单里是否出现了 AAL2。如果出现了说明已经可用。需要注意的是如果你在添加路径之后没有重启 MATLAB或者没有执行clear all界面上可能还是看不到新的图谱因为 MATLAB 可能缓存了旧的spm_aatlases.mat内容。这时候重启 MATLAB 或者执行clear all重新加载即可。2.5 中文字符路径和权限问题这一步单独拿出来说是因为我在这上面浪费过不少时间。SPM12 对路径里的中文字符支持并不完善之前我用过一个放在D:\研究数据\aal2路径下的版本运行 ROI 提取时总报错查了半天才发现是路径里的中文导致 SPM 读取 XML 文件时出现编码问题。所以最稳的建议是所有工具包和数据的路径都不要包含中文和空格最好统一用英文加下划线。另外安装在 Windows 系统Program Files目录下的 MATLAB 和 SPM有时会因为写权限不足导致 SPM12 无法读取或写入图谱缓存文件。如果你遇到“Permission denied”之类的报错建议把 SPM12 和 AAL2 都挪到用户目录下比如C:\Users\你的用户名\spm12然后再重新添加路径。3. 在 fMRI 数据分析中真正把 AAL2 用起来3.1 ROI 信号提取从数据到每个脑区的时间序列安装好 AAL2 之后最常用的操作就是提取 ROI 信号。这个功能的本质是把 AAL2 模板里每个脑区所包含的体素信号取平均生成一条该脑区的时间序列。在 SPM12 的 Batch Editor 里操作路径是选择SPM - Tools - Extract ROI data在Data里填上要提取信号的功能图像比如已经做完预处理和统计建模的con_*.nii或beta_*.nii也可以直接填原始功能像在 Atlas 设定里选择AAL2勾选你想提取的脑区编号或者在名单里直接勾选名称运行 Batch输出结果会保存到一个 MAT 文件里里面存有每个脑区的平均信号值。这一步做完你就得到了一个“脑区 x 条件”的数值矩阵之后就可以做相关分析、做差异检验或者把信号导出来放到其他统计软件里继续分析。但是你会发现用 GUI 界面逐个勾选脑区如果只需要三五个脑区还算了但要做全脑 ROI 分析手动勾选几十个脑区就很费时间。所以更实用的方法是用脚本批量提取。代码如下% 假设 SPM12 已经添加到路径AAL2 也已经装好 clear; clc; % 指定要提取信号的功能图像 data_files { /data/subj01/con_0001.nii,1 /data/subj02/con_0001.nii,1 }; % 设置 ROI 提取任务 matlabbatch{1}.spm.tools.roi.data data_files; matlabbatch{1}.spm.tools.roi.atlas(1).name AAL2; matlabbatch{1}.spm.tools.roi.atlas(1).sel [1 2 3 4 5]; % 这里选择对应脑区的编号 % 运行批次任务 spm_jobman(run, matlabbatch);注意上面脚本里的spm.tools.roi结构是 SPM12 默认 ROI 工具的字段名不同小版本可能略有差异最稳妥的办法是先用 GUI 搭一个 Batch然后点击 “Save Batch” 保存成.mat文件再在 MATLAB 里加载查看字段结构load(batch_roi.mat); % 展开查看 matlabbatch 的结构这个方法能帮你快速确定你自己的 SPM12 版本里字段名到底长什么样避免照抄脚本时报错。3.2 在 PPI 分析里用 AAL2 选定种子点PPIPsychophysiological Interaction心理生理交互是 fMRI 数据分析里比较常见的一类方法研究的是一个脑区在与另一个脑区的功能连接强度是否受到某个心理任务条件的调节。传统做法是手动指定种子脑区然后用一个圆形 ROI 或解剖 ROI 来提取种子点信号。如果你手头有 AAL2这个过程可以规范很多。在 SPM12 里做 PPI 分析时当设置到种子点来源这一步如果 AAL2 正确安装界面上会多出 Atlas 相关的选项。你可以直接从 AAL2 的脑区列表里选择你感兴趣的种子区比如要研究奖赏环路就选腹侧纹状体要研究运动控制就选小脑的相关分区。SPM12 会自动读取该脑区在模板里的所有体素提取平均时间序列作为种子信号这比手动画 ROI 更可重复审稿人也更容易接受。有一个细节值得注意PPI 分析里种子点的坐标必须和功能像在同一个空间。如果功能数据是经过 SPM12 标准化到 MNI 空间的那直接选 AAL2 没问题但如果你做的是个体空间分析或者只是把功能像对齐到了 T1 而没有做标准化那 AAL2 模板就无法直接套用需要先把数据重新标准化到 MNI 空间再执行 PPI 分析。3.3 全脑 ROI 批量提取的完整示例这里给你一个更完整的示例场景假设我有 10 个被试每个被试有 4 个对比图像我想提取 AAL2 里所有 90 个脑区的平均信号然后计算全脑 ROI 之间的功能连接矩阵。单个被试的代码可以这样写% 指定被试列表 subjects {sub01, sub02, sub03}; % 只写了3个示意 conditions {con_0001, con_0002, con_0003, con_0004}; for s 1:length(subjects) for c 1:length(conditions) img_file sprintf(/data/%s/%s.nii,1, subjects{s}, conditions{c}); % 这里用一个结构体保存任务 matlabbatch{1}.spm.tools.roi.data {img_file}; matlabbatch{1}.spm.tools.roi.atlas(1).name AAL2; matlabbatch{1}.spm.tools.roi.atlas(1).sel 1:90; % 全部脑区 spm_jobman(run, matlabbatch); % 因为 ROI 工具的结果会保存在当前目录或指定目录 % 建议在循环里加一个 movefile 把输出文件移动到自己的结果文件夹 end end这个脚本会生成一个若干行、若干列的信号矩阵。要注意的一个点是sel参数里的编号必须和 AAL2 自己的编号体系对应。不同来源的 AAL2 文件脑区编号可能从 0 开始也可能从 1 开始建议先读取aal2.xml确认编号范围比如从 1 到 90 还是从 1 到 120不要盲目写 1:90。3.4 空间分辨率不匹配问题用 AAL2 提取 ROI 信号时需要考虑一个很容易被忽略的问题模板图像与功能像的体素大小和空间维度是否一致。AAL2 模板通常以 1mm 或 2mm 体素提供而你的功能像经过预处理的最终分辨率可能是 2mm 也可能是 3mm。如果维度不一致SPM12 在计算 ROI 信号时虽然会进行重采样但部分边缘体素的归属会出现偏差极个别情况下还会报错。最直接的解决办法是在提取 ROI 之前把功能像重新配准到 AAL2 模板所在的空间。SPM12 里可以用Implicit Masking和Explicit Masking来解决一部分问题但更稳妥的办法是使用 SPM12 的Reslice工具手动把功能像重采样到模板的体素大小。实际操作中我自己比较喜欢把功能像统一 reslice 到[2 2 2]或者镜像数据原始的 MNI 空间然后跑 ROI 提取。这样即便模板是 1mm 的SPM12 也会在处理时自动完成必要的插值结果更可靠。4. 常见问题与排查技巧实录4.1 SPM12 界面里看不到 AAL2 选项这个问题十有八九是spm_aatlases.mat没有生效。排查步骤就三步which spm_aatlases.mat spm_atlas(list) clear all; % 清除 MATLAB 缓存如果which返回的路径确实指向你放进去的新文件但spm_atlas(list)还是没有 AAL2那就看一下 MATLAB 搜索路径里的顺序确保 AAL2 文件夹在 SPM12 文件夹之前。如果还是不行直接在spm_atlas(list,AAL2)单独测试这个图谱能不能加载这样能进一步定位问题。4.2 ROI 提取时报错 “Index exceeds matrix dimensions”这个报错通常发生在两种情况下第一种是填写的脑区编号sel超出了模板里的实际脑区数量比如模板只有 90 个脑区你在脚本里填了 120第二种是图像维度不匹配功能像经过裁剪后和 AAL2 模板的大小对不上。排查方法是先读取模板信息V spm_vol(你的AAL2模板路径/aal2.nii); V.dim再读功能像信息如果发现维度差异很大就需要先做配准或重采样。4.3 坐标信息和脑区名称对不上有时候你从文献里读到某个坐标点想在 AAL2 里找到它对应哪个脑区却发现名称对不上。这种情况不是 AAL2 坏了而是坐标空间不一致。文献里报告的坐标有些是 MNI 空间有些是 Talairach 空间两者之间有一个非线性转换关系。AAL2 是建立在 MNI 空间上的所以当你拿到一个疑似 Talairach 坐标时得先转换成 MNI 坐标再和模板对照。MATLAB 里可以用icbm_spm2tal这类工具做转换或者直接在网上用在线转换工具。4.4 MarsBaR 和 AAL2 配合不好MarsBaR 是很多做 ROI 分析的人熟悉的另一个工具包但要注意它默认并不会直接加载 AAL2 图谱。MarsBaR 有自己的 ROI 文件格式.mat加.img如果你想在 MarsBaR 里用 AAL2 的脑区需要先把 AAL2 的每个脑区导出成 MarsBaR 的 ROI 文件或者用 AAL2 的 XML 坐标批量生成球形 ROI。如果你的分析流程不是必须用 MarsBaR我建议直接用 SPM12 自身的 Extract ROI data 功能省掉转换这一层麻烦。4.5 换了新电脑或新版本的 SPM12 之后又要重新装一遍这是很多人的痛点换电脑之后所有路径、模板、图谱要重新设置一遍。我自己的做法是把所有跟 SPM 相关的依赖包统一放到一个目录下例如D:\MATLAB_Tools或者~/matlab_tools然后在 MATLAB 的startup.m里统一添加% startup.m addpath(genpath(D:\MATLAB_Tools\spm12)); addpath(genpath(D:\MATLAB_Tools\aal2_for_SPM12));这样每次启动 MATLAB 就会自动配好路径不需要手动一步步点。startup.m的创建很简单在 MATLAB 里执行edit startup.m然后把路径设置写进去保存到 MATLAB 的启动目录重启后生效。下面把常见问题整理成速查表方便遇到问题时直接对号入座问题现象可能原因解决思路PPI 或 ROI 界面没有 AAL2 选项spm_aatlases.mat没被正确加载检查which spm_aatlases.mat重新覆盖或调整路径顺序运行spm_atlas(list)报错MATLAB 路径中有多个同名文件冲突执行clear all并重新运行确认路径唯一ROI 提取后所有脑区值都一样图像与模板空间未对齐检查功能图像是否已标准化到 MNI 空间必要时重采样中文路径导致读写失败SPM12 对中文路径支持差更换路径为纯英文避免中文和空格提取出大量 0 值模板与功能像覆盖范围不重叠检查配准参数确认模板匹配编号和名称对不上脑区编号从 0 开始或顺序不同打开 XML 核对编号不要凭印象填空4.6 我自己的安装习惯和备份策略最后分享一下我个人的习惯。每次拿到一个新的工具包我做的第一件事不是解压而是先在 MATLAB 里看which spm_aatlases.mat返回的路径把原始文件备份到一个单独的_backup文件夹里然后再覆盖。这个习惯救了我好几次——有次同事在服务器上装了一个新版本的工具包把原有的图谱列表覆盖了结果整个实验室之前建的 PPI 任务全部读不到旧图谱最后是我从备份文件里恢复回来的。另外提示一下AAL2 的模板文件和数据本身都是体积很小的文件解压后通常也就几 MB 到几十 MB完全不存在性能压力。每次分析之前我都会先跑一遍spm_atlas(list)确认当前环境里图谱加载正常再开始批量处理这样可以避免跑了一晚上才发现路径没配好结果所有任务都白跑的情况。4.7 往后的扩展玩法AAL2 不只是用来做 ROI 信号提取的它还可以配合其他工具做更多分析。比如把 AAL2 的模板结果和 BrainNet Viewer 或者 xjView 一起用可以把脑区之间的功能连接矩阵画成脑网络图这种图在很多文章里很常见。做法就是把 AAL2 每个脑区的中心坐标提取出来做成一个节点列表再把 ROI 信号连接值做成边列表然后丢给可视化工具。如果你后续做图论分析AAL2 的分区也是一个比较常用的网络节点定义方式因为它区分度适中不会像体素级别的图论分析那样计算量爆炸也不会像只分 10 个脑区那样太粗略。我在实际使用中的体会是AAL2 真正厉害的地方不是它比旧版多了多少个脑区而是它让 ROI 分析的标准性大幅提高。以前手动画脑区每个人画出来的形状、大小可能都不一样用了 AAL2 之后只要大家用的是同一个模板版本提取出来的信号就是完全可复现的。这一点在做多中心数据分析或者发论文写方法部分的时候省了很多解释的功夫。最后再分享一个小技巧尽量在分析前就把aal2.xml文件里的脑区编号表打印出来贴在显示器旁边很多报错和结果异常最后发现都是编号填错导致的。先确认编号再写脚本能帮你省掉大半天的排查时间。本文还有配套的精品资源点击获取