SPM/操作指南
SPM 華夏公益教科書已遷移至 https://www.fil.ion.ucl.ac.uk/spm/docs/ |
此頁面列出了使用 SPM 的一系列操作指南。它們應該適用於所有最近版本的軟體。

要更改影像的原點
- 使用 SPM 顯示開啟影像
- 移動十字線位置,使其大致指向 前連合 (AC)。
- 單擊“設定原點”按鈕
- 單擊“重新定向”按鈕並按完成(您的影像已選中)。如果您想將相同的變換應用於其他影像(例如,如果您有一系列功能影像),請在此階段選擇所有影像。
- 對“您是否要儲存重新定向矩陣?”說“否”。
這會將影像的原點(0 0 0 毫米座標)設定為 AC。您可能還想旋轉影像,使其更好地與 MNI 空間對齊:為此,您還需要編輯圍繞 俯仰、橫滾和偏航軸 的旋轉(以 弧度 為單位)的條目。
您還可以嘗試使用 配準 自動執行此過程。
另請參見:查詢連合。
對於早期版本的 SPM,請參閱 重新定位 MRI。
使用 ImCalc 功能,其中 表示式 為“mean(X)”,資料矩陣 選項設定為“是 - 將影像讀入資料矩陣”。您還可以為平均影像選擇輸出檔名(例如 mean.img)及其目錄(預設值為當前資料夾)。
或者,您可以使用 spm_mean_ui 函式,但選項數量有限 - 應優先選擇 ImCalc。
如果您想計算總和,只需使用 表示式 “sum(X)” 即可。
如果您更改了資料的儲存位置和/或 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 路徑中儲存以下函式
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);
