跳轉到內容

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);
華夏公益教科書