CAT12提取皮层ROI报错

各位老师好,我在matlab2021b版本的基础之上运行cat12.9,进行正常分割之后,对皮层厚度的数据进行重采样以及平滑,重采样的设置如下图所示,想提取平滑之后的ROI数据用于后续计算。

但是在使用Exact ROI-based surface value功能的时候一直报错,该功能设置以及报错内容如下所示

警告: [GIFTI] Parsing of XML file G:\scnu\mdd\segment\mdd\surf\s15.rh.thickness..resampled.MDD_001.gii failed.

位置:read_gifti_file (第 17 行)
位置: gifti (第 108 行)
位置: cat_surf_surf2roi (第 151 行)
位置: cfg_run_cm (第 29 行)
位置: cfg_util>local_runcj (第 1717 行)
位置: cfg_util (第 972 行)
位置: cfg_ui>MenuFileRun_Callback (第 710 行)
位置: gui_mainfcn (第 95 行)
位置: cfg_ui (第 53 行)
03-Sep-2025 15:41:02 - Failed ‘Extract ROI-based surface values’
错误使用 xmltree (第 47 行)
错误使用 xmltree (第 47 行)
[XMLTree] Cannot open G:\scnu\mdd\segment\mdd\surf\s15.rh.thickness..resampled.MDD_001.gii
In file “D:\toolboxes\spm12@xmltree\xmltree.m” (v4460), function “xmltree” at line 47.
In file “D:\toolboxes\spm12@gifti\private\read_gifti_file.m” (v7632), function “read_gifti_file” at line 15.
In file “D:\toolboxes\spm12@gifti\gifti.m” (v7676), function “gifti” at line 108.
In file “D:\toolboxes\spm12\toolbox\cat12\cat_surf_surf2roi.m” (???), function “cat_surf_surf2roi” at line 151.

我进行了以下尝试:

  1. 更换软件版本,尝试matlab2021b,matlab2019b以及cat12.8版本,结果发现均会出现类似的报错
  2. 按照报错的指示,强行修改右侧的gii文件的名称,成双..号版本,即s15.rh.thickness..resampled.MDD_001.gii,再跑提取roi会出现新的报错,如下所示
  3. 我尝试对没有平滑和重采样的thickness数据,使用Exact ROI-based surface value功能,无论是哪一个脑模板,都可以顺利提取出来

03-Sep-2025 15:50:48 - Running ‘Extract ROI-based surface values’
03-Sep-2025 15:50:49 - Failed ‘Extract ROI-based surface values’
错误使用 sub2ind (第 43 行)
下标超出范围。
In file “D:\Matlb\toolbox\matlab\elmat\sub2ind.m” (???), function “sub2ind” at line 43.
In file “D:\toolboxes\spm12@file_array\subsref.m” (v7439), function “multifile2mat” at line 155.
In file “D:\toolboxes\spm12@file_array\subsref.m” (v7439), function “subfun” at line 99.
In file “D:\toolboxes\spm12@file_array\subsref.m” (v7439), function “subsref” at line 65.
In file “D:\toolboxes\spm12@gifti\subsref.m” (v7577), function “subsref” at line 48.
In file “D:\toolboxes\spm12\toolbox\cat12\cat_surf_surf2roi.m” (???), function “cat_surf_surf2roi” at line 195.

The following modules did not run:
Failed: Extract ROI-based surface values

我想请问各位老师,有没有遇到过类似的情况?如何顺利使用cat12提取平滑后的roi的指标呢?

也许你可以打开cat_surf_surf2roi这个函数,按照CAT处理的逻辑,带入你的数据,看看到底是哪里出了问题。从你的第一次报错,我感觉可能CAT没有正确解析出你的文件名。

在这个函数的150-151行(如下所示),就是读取右侧的数据报错了,而读取右侧数据是根据左侧的文件名来找文件的。

lCS = gifti(job.cdata{ti}{si});
rCS = gifti(char(cat_surf_rename(sinfo,'side','rh'))); 

抱歉老师回复迟了,我一直在尝试解决这个报错。

您的建议是正确的,一切错误的起因都是cat_surf_surf2roi函数里面,需要识别lh或者rh开头的文件,才可以从左侧文件,匹配到右侧文件,由于我的文件是s15.lh.thickness.resampled.MDD_001.gii,那么他就没办法正确识别文件,也导致了read_gifti_file函数读取文件失败。
后续我自己重新编写了提取代码,在cat12的操作界面,这个问题确实没有办法解决。

此外我想补充,在进行该操作的时候,我的理解可能有问题。
如果想进行ROI分析,貌似不需要进行平滑以及重采样,只需要在分割后图像的基础之上,应用对应所需要的模版进行提取就行,只有进行顶点层面的分析,才需要进行平滑以及重采样用于提高信噪比以及后续顶点层面的比较,在cat12作者论坛里,找到一篇类似问题的讨论,链接如下CAT12 Cortical Thickness Output - Ready for Statistical Analysis? - Discussions - Brainstorm

再次感谢老师的指点和帮助!