SPM/使用4D資料
SPM Wikibooks已移至 https://www.fil.ion.ucl.ac.uk/spm/docs/ |
最近的SPM版本(SPM5或更高版本)可以處理4D NIfTI資料集,這些資料集通常用於表示fMRI的3D體積時間序列,以及更一般的相關影像體積集合(例如DARTEL模板中不同的組織類別)。
在圖形使用者介面中使用4D資料(例如,單擊顯示或檢查註冊,或在批處理介面中選擇影像)的關鍵是要意識到影像選擇對話方塊(在右側,就在所選檔案列表上方)中顯示的1指的是4D資料集的第一個體積或幀。請注意,3D資料可以看作是隻有一個體積的4D資料的特例,因此第一個(唯一)幀也適用於正常的3D影像。
要選擇除第一個以外的體積,您只需更改幀規範。要選擇特定幀,您可以用所需編號替換數字1,例如10或100,但更有用的是,您可以輸入MATLAB範圍,然後您將看到所有/所有體積,直到上限,因此輸入1:999將允許您選擇時間序列中少於1000個體積的所有體積。這些體積在其檔名末尾的逗號後顯示其幀號。
對於fMRI資料,更改過濾器表示式從'.*'到僅顯示您感興趣的影像集的正則表示式(例如,將其更改為'^u'以僅檢視以'u'開頭的重新對齊且未扭曲的影像),然後將幀範圍從1更改為'1:999'(或足夠大的數字以顯示所有體積),然後右鍵單擊並選擇'選擇全部'。有關過濾器(正則表示式)的更多幫助,請單擊對話方塊左側的'?'。
幀範圍不直接預設為1:9999999的原因是,如果您進入包含大量NIfTI檔案的目錄,介面將非常慢,因為需要讀取所有NIfTI標頭檔案以找出每個檔案實際上包含多少體積(即使大多數檔案只包含1個)。同樣請注意,在擴充套件幀範圍之前設定過濾器可以在這種情況下有所幫助。
在本文中,我使用了檢查註冊,導航到我的SPM目錄(使用上一個下拉選單),輸入工具箱目錄,然後輸入Seg目錄,其中包含新分割工具箱的組織機率圖(TPM)(另請參見SPM -> 工具 -> 新分割)。4D TPM.nii NIfTI檔案中包含六個TPM體積;透過將幀號從'1'更改為'1:10',我可以檢視所有六個體積,我選擇了第二幀和第三幀(顯示為TPM.nii,2和TPM.nii,3),它們對應於白質和CSF組織類別。
對於高階使用者,批處理系統允許您建立根據模式選擇檔案的批處理,使用
BasicIO -> File Selector (Batch Mode)
在這種情況下,將選擇整個4D NIfTI檔案(沒有',n'幀號)。然後,您可以使用另一個批處理模組
SPM -> Util -> Expand image frames
引用單個4D檔案,並將指定列表或範圍的幀與它關聯。然後,生成的體積集可用作依賴項,在批處理的後續模組中使用。
最後,更高階的使用者可以簡單地將幀號新增到MATLAB指令碼中的檔名,這甚至允許人們使用有時用於多元資料集的五維資料(!)(例如,參見此NIfTI圖的第3頁和第4頁),透過在逗號後新增兩個數字。例如,要檢視儲存在5D DARTEL速度場第五維中的三個(x、y和z)分量(或者只是為了炫耀!),您可以執行以下操作
>> ims = [repmat('u_rc1Blah_Template.nii', 3, 1) [',1,1';',1,2';',1,3']]
>> spm_check_registration(ims)
要自動擴充套件4D nifti檔案路徑中的體積,您可以在SPM12上使用
>> ims = spm_select('expand', fullfile(SCAN_dir,'SCAN.nii'))
對於SPM8及更低版本,您必須手動計算體積數量並自行擴充套件,以下是一段程式碼片段
function n = spm_select_get_nbframes(file)
% spm_select_get_nbframes(file) Get the number of volumes of a 4D nifti file, excerpt from SPM12 spm_select.m
N = nifti(file);
dim = [N.dat.dim 1 1 1 1 1];
n = dim(4);
end
function out = expand_4d_vols(nifti)
% expand_4d_vols(nifti) Given a path to a 4D nifti file, count the number of volumes and generate a list of all volumes
nb_vols = spm_select_get_nbframes(nifti);
out = strcat(repmat(nifti, nb_vols, 1), ',', num2str([1:nb_vols]'));
end
然後,您可以使用
>> ims = expand_4d_vols(fullfile(SCAN_dir,'SCAN.nii'))
請注意,上述任何技術都可以用來只選擇4D體積的一個子集(例如,為了丟棄前x個體積以避免MRI飽和效應)
>> ims = cellstr(ims(4:end,:));
SPM允許您使用批處理系統將多個3D體積連線成一個4D NIfTI
SPM -> Util -> 3D to 4D File Conversion
這些影像必須具有相同的尺寸,否則將它們視為一個4D資料集是沒有意義的。
請注意,此介面還允許您使用從現有4D檔案中選擇的體積建立新的4D檔案,這意味著您可以執行一些操作,例如透過建立僅包含您要保留的體積的新4D檔案,從一個4D檔案的開頭丟棄T1平衡掃描。
從本質上講,4D NIfTI檔案會不可避免地產生記憶體問題,因為它們可以增長到任何可能的大小(取決於4D NIfTI檔案包含的體積數量)。大多數SPM模組完全支援大型4D NIfTI檔案,但第三方工具箱或您自己的使用SPM函式的指令碼可能不支援這些大型檔案。
即使SPM支援大型NIfTI檔案,它也只可以載入與您可用RAM記憶體大小[1]以及您的檔案系統允許的大小[2]相符的檔案(不要忘記,處理步驟的輸出NIfTI檔案可能比輸入檔案大很多!)。諸如記憶體外計算之類的技術可以用來儲存和分割磁碟檔案上的大型計算,但這非常實驗性,在大多數神經科學工具箱中不可用。
在實踐中,如果您使用的是SPM,使用過大的4D NIfTI檔案會導致“無法對映檢視”錯誤(但這並不是唯一可能的原因:從網路SAMBA共享讀取檔案、許可權問題和防病毒軟體也會導致此錯誤)。在這種情況下,您可以嘗試將4D NIfTI檔案轉換為一組3D NIfTI檔案,將每個幀分離成一個單獨的NIfTI檔案,看看這是否能解決您的問題。
此頁面應該已經證明,通常您不需要將4D資料集分離成其組成部分的3D體積以在SPM中使用,無論是使用互動式介面、批處理還是指令碼,唯一的例外是,如果您有如上所述的過大的4D nifti檔案。
在這些情況下,或者由於與您的設計有關的某些特定原因,您可能希望拆分資料集以在無法處理4D NIfTIs的其他軟體包中處理影像。為此,SPM提供了一個簡單的命令列工具(不在批處理介面中,抱歉),您可以透過鍵入以下命令來使用它
>> spm_file_split
然後選擇(第一幀)一個4D NIfTI。如果您選擇Blah.nii,這將建立形式為Blah_00001.nii, Blah_00002.nii等的影像。有關更靈活的使用方法,請參閱help spm_file_split。
一個使用spm_file_split的遞迴4D到3D niftis轉換器可以在這裡找到。
