You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中提取SPM脑图像毫米坐标体素的T-stat值?

在Matlab中提取SPM结果图像的毫米坐标对应T值的方法

SPM本身提供了配套的Matlab函数来处理这类需求,核心思路是直接利用SPM内置工具完成坐标转换或直接采样,下面是两种实用方法:

方法一:手动转换坐标后提取T值

  1. 加载SPM结果图像的头信息与数据
    V = spm_vol('spmT_0001.nii'); % 替换为你的SPM结果文件名
    T_data = spm_get_data(V); % 获取所有体素的T值矩阵
    
  2. 将毫米坐标转换为体素坐标
    利用图像头中的空间变换矩阵,通过逆变换完成坐标转换:
    mm_coord = [x, y, z]; % 输入目标毫米坐标,如[-20, 10, 30]
    vox_coord = round(spm_inv(V.mat) * [mm_coord, 1]'); % 转换后取整得到体素坐标
    vox_coord = vox_coord(1:3)'; % 提取xyz维度的体素坐标
    
  3. 提取对应T值
    先判断坐标是否在图像范围内,再索引取值:
    if all(vox_coord >= 1) && all(vox_coord <= size(T_data))
        t_value = T_data(vox_coord(1), vox_coord(2), vox_coord(3));
    else
        t_value = NaN; % 坐标超出图像范围时返回空值
    end
    

方法二:用spm_sample_vol一步采样

SPM的spm_sample_vol函数可以直接根据毫米坐标提取体素值,无需手动转换:

V = spm_vol('spmT_0001.nii');
mm_coord = [x, y, z];
t_value = spm_sample_vol(V, mm_coord(1), mm_coord(2), mm_coord(3), 0);

最后一个参数设为0表示直接取对应体素的原始值;若需要插值采样,可改为1(线性插值)或其他插值模式,但提取体素本身的T值时,0是最准确的选择。

批量处理提示

如果需要处理多个毫米坐标,可将坐标存入矩阵循环处理:

mm_coords = [[-20,10,30]; [-15,5,25]]; % 多行存储多个目标坐标
t_values = zeros(size(mm_coords,1),1);
for i = 1:size(mm_coords,1)
    t_values(i) = spm_sample_vol(V, mm_coords(i,1), mm_coords(i,2), mm_coords(i,3), 0);
end

注意

确保Matlab已加载SPM环境(通过spm fmri启动或手动添加SPM路径到Matlab工作路径)。

内容的提问来源于stack exchange,提问作者jbun0007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:45:30