跳转到内容

SPM/操作指南

来自维基教科书,开放的书籍,开放的世界
< SPM

此页面列出了使用 SPM 的一系列操作指南。它们应该适用于所有最近版本的软件。

如何手动更改图像的方向?

[编辑 | 编辑源代码]
SPM 显示

要更改图像的原点

  • 使用 SPM 显示打开图像
  • 移动十字线位置,使其大致指向 前连合 (AC)。
  • 单击“设置原点”按钮
  • 单击“重新定向”按钮并按完成(您的图像已选中)。如果您想将相同的变换应用于其他图像(例如,如果您有一系列功能图像),请在此阶段选择所有图像。
  • 对“您是否要保存重新定向矩阵?”说“否”。

这会将图像的原点(0 0 0 毫米坐标)设置为 AC。您可能还想旋转图像,使其更好地与 MNI 空间对齐:为此,您还需要编辑围绕 俯仰、横滚和偏航轴 的旋转(以 弧度 为单位)的条目。

您还可以尝试使用 配准 自动执行此过程。

另请参见:查找连合

对于早期版本的 SPM,请参阅 重新定位 MRI

如何计算一组图像的平均值?

[编辑 | 编辑源代码]

使用 ImCalc 功能,其中 表达式 为“mean(X)”,数据矩阵 选项设置为“是 - 将图像读入数据矩阵”。您还可以为平均图像选择输出文件名(例如 mean.img)及其目录(默认值为当前文件夹)。

SPM Imcalc mean image

或者,您可以使用 spm_mean_ui 函数,但选项数量有限 - 应优先选择 ImCalc

如果您想计算总和,只需使用 表达式 “sum(X)” 即可。

如何在批处理文件或 SPM.mat 中更改文件路径?

[编辑 | 编辑源代码]

如果您更改了数据的存储位置和/或 SPM 的安装位置,则批处理文件和 SPM.mat 中包含的完整路径将失效。SPM 中提供了一个实用程序函数 spm_changepath,用于在 MAT 文件中用另一个字符串替换一个字符串的所有出现。例如

spm_changepath('SPM.mat','C:\mydata','D:\Experiments\data');

将更新 SPM.mat 文件,用 D:\Experiments\data 替换 C:\mydata 的所有出现。初始文件的备份可以在 SPM.mat.old 中找到。运行时将显示所有已更改路径的列表。

如何在渲染中选择颜色限制?

[编辑 | 编辑源代码]

默认情况下,颜色限制的范围是渲染数据的最小值/最大值。如果您想自己指定它们,可以使用以下代码。

对于表面渲染,使用

H = getappdata(get(findobj('Tag','SPMMeshRender'),'Parent'),'handles');
spm_mesh_render('CLim',H) % return current limits
spm_mesh_render('CLim',H,[0 16]); % set limits to [0 16]

对于三个正交视图上的渲染,使用

global st
st.vols{1}.blobs{1}.min = 0;
st.vols{1}.blobs{1}.max = 16;
spm_orthviews('redraw');

如何在二进制掩码中删除小于特定大小的簇?

[编辑 | 编辑源代码]

以下代码将读取一个二进制掩码(ROI),执行连通分量标记,过滤掉体素大小(变量 k)小于特定大小的所有簇,并将其保存为另一个掩码(ROIf)。

ROI  = 'myvoi.nii';  % input image (binary, ie a mask)
k    = 100;          % minimal cluster size
ROIf = 'newvoi.nii'; % output image (filtered on cluster size)

%-Connected Component labelling
V = spm_vol(ROI);
dat = spm_read_vols(V);
[l2, num] = spm_bwlabel(double(dat>0),26);
if ~num, warning('No clusters found.'); end

%-Extent threshold, and sort clusters according to their extent
[n, ni] = sort(histc(l2(:),0:num), 1, 'descend');
l  = zeros(size(l2));
n  = n(2:end); ni = ni(2:end)-1;
ni = ni(n>=k); n  = n(n>=k);
for i=1:length(n), l(l2==ni(i)) = i; end
clear l2 ni
fprintf('Selected %d clusters (out of %d) in image.\n',length(n),num);

%-Write new image
V.fname = ROIf;
spm_write_vol(V,l~=0); % save as binary image. Remove '~=0' so as to
                       % have cluster labels as their size. 
                       % or use (l~=0).*dat if input image was not binary

如何在 MATLAB 当前文件夹浏览器中双击 NIfTI 图像时,在 SPM 中显示它们?

[编辑 | 编辑源代码]

在您的 MATLAB 路径中保存以下函数

function openimg(img)
spm_image('Display',img);
function opennii(nii)
N=nifti(nii);
if size(N.dat,4) == 1
   spm_image('Display',nii);
else
   if ~isdeployed, addpath(fullfile(spm('Dir'),'spm_orthviews')); end
   spm_ov_browser('ui',spm_select('expand',nii));
end

如何在另一个图像上叠加一个具有透明度的掩码图像?

[编辑 | 编辑源代码]

使用“显示”>“添加叠加层”或“检查配准”>“叠加层”>“添加彩色图像”后,键入以下内容

global st
col = st.vols{1}.blobs{1}.colour;
st.vols{1}.blobs{1}.colour = struct('cmap',[0 0 0;col],'prop',0.5);

如何更改图像的体素大小?

[编辑 | 编辑源代码]

运行以下内容(使用适当的体素大小),并选择您要重新采样的图像。重新切片的图像将以“r”前缀保存

voxsiz = [2 2 2]; % new voxel size {mm}
V = spm_select([1 Inf],'image');
V = spm_vol(V);
for i=1:numel(V)
   bb        = spm_get_bbox(V(i));
   VV(1:2)   = V(i);
   VV(1).mat = spm_matrix([bb(1,:) 0 0 0 voxsiz])*spm_matrix([-1 -1 -1]);
   VV(1).dim = ceil(VV(1).mat \ [bb(2,:) 1]' - 0.1)';
   VV(1).dim = VV(1).dim(1:3);
   spm_reslice(VV,struct('mean',false,'which',1,'interp',0)); % 1 for linear
end

如何自动重新定向图像?

[编辑 | 编辑源代码]

以下函数(来自 此处)将对图像进行刚性对齐,以匹配 T1 模板

function auto_reorient(p)
if ~nargin
    [p,sts] = spm_select(Inf,'image');
    if ~sts, return; end
end
p = cellstr(p);
vg = spm_vol(fullfile(spm('Dir'),'canonical','avg152T1.nii'));
tmp = [tempname '.nii'];
for i=1:numel(p)
    spm_smooth(p{i},tmp,[12 12 12]);
    vf = spm_vol(tmp);
    M  = spm_affreg(vg,vf,struct('regtype','rigid'));
    [u,s,v] = svd(M(1:3,1:3));
    M(1:3,1:3) = u*v';
    N  = nifti(p{i});
    N.mat = M*N.mat;
    create(N);
end
spm_unlink(tmp);
华夏公益教科书