跳轉到內容

SPM/BIDS

來自華夏公益教科書
< SPM


腦影像資料結構

[編輯 | 編輯原始碼]

The 腦影像資料結構 (BIDS) 是一種簡單直觀的組織和描述腦影像和行為資料的方式。

標準規範

[編輯 | 編輯原始碼]

驗證器

[編輯 | 編輯原始碼]

討論論壇

[編輯 | 編輯原始碼]

出版物

[編輯 | 編輯原始碼]

腦影像資料結構,一種組織和描述神經影像實驗輸出的格式. Gorgolewski K.J., Auer T., Calhoun V.D., Craddock R.C., Das S., Duff E.P., Flandin G., Ghosh S.S., Glatard T., Halchenko Y.O., Handwerker D.A., Hanke M., Keator D., Li X., Michael Z., Maumet C., Nichols B.N., Nichols T.E., Pellman J., Poline J.-B., Rokem A., Schaefer G., Sochat V., Triplett W., Turner J.A., Varoquaux G. & Poldrack R.A. 科學資料 3, 160044 (2016).

BIDS 應用:改善神經影像資料分析方法的易用性、可訪問性和可重複性. Gorgolewski K.J., Alfaro-Almagro F., Auer T., Bellec P., Capota M., Chakravarty M.M., Churchill N.W., Cohen A.L., Craddock R.C., Devenyi G.A., Eklund A., Esteban O., Flandin G., Ghosh S.S., Guntupalli J.S., Jenkinson M., Keshavan A., Kiar G., Liem F., Raamana P.R., Raffelt D., Steele C.J., Quirion P.-O., Smith R.E., Strother S.C., Varoquaux G., Wang Y., Yarkoni T. & Poldrack R.A. PLOS 計算生物學 13(3):e1005209 (2017).

MEG-BIDS,擴充套件到腦磁圖的腦影像資料結構. Niso G., Gorgolewski K.J., Bock E., Brooks T.L., Flandin G., Gramfort A., Henson R.N., Jas M., Litvak V., Moreau J.T., Oostenveld R., Schoffelen J.-M., Tadel F., Wexler J. & Baillet S. 科學資料 5, 180110 (2018).

EEG-BIDS,腦影像資料結構擴充套件到腦電圖. Pernet C.R., Appelhoff S., Gorgolewski K.J., Flandin G., Phillips C., Delorme A. & Oostenveld R. 科學資料 6, 103 (2019) .

SPM/MATLAB 中的 BIDS 工具

[編輯 | 編輯原始碼]

SPM 提供了許多功能(MATLAB/Octave 函式)來幫助建立或使用根據 BIDS 格式化的資料集。

JSON 檔案

[編輯 | 編輯原始碼]

可以使用 spm_jsonreadspm_jsonwrite 讀取/寫入 JSON 檔案

>> type sub-01_task-rest_bold.json           

{
  "RepetitionTime": 3.0,
  "Instruction": "Lie still and keep your eyes open"
}
>> bold = spm_jsonread('sub-01_task-rest_bold.json')

bold = 

    RepetitionTime: 3
       Instruction: 'Lie still and keep your eyes open'
>> descr = struct('Name','My Dataset','BIDSVersion','1.0.2')              

descr = 

           Name: 'My Dataset'
    BIDSVersion: '1.0.2'

>> spm_jsonwrite('dataset_description.json',descr, struct('indent','  '));
>> type dataset_description.json                                          

{
  "Name": "My Dataset",
  "BIDSVersion": "1.0.2"
}

這些函式也可單獨在 JSONio,一個針對 MATLAB 和 Octave 的 JSON 庫 中使用。它們與 MATLAB 的 jsonencodejsondecode 相容。

TSV 檔案

[編輯 | 編輯原始碼]

可以使用 spm_loadspm_save 讀取/寫入 製表符分隔值 (TSV) 檔案

>> type task-Checkerboard_acq-TR645_events.tsv    

onset   duration        trial_type
0       20      Fixation
20      20      Checkerboard
40      20      Fixation
60      20      Checkerboard
80      20      Fixation
100     20      Checkerboard
>> events = spm_load('task-Checkerboard_acq-TR645_events.tsv')

events = 

         onset: [6x1 double]
      duration: [6x1 double]
    trial_type: {6x1 cell}
>> p = struct('participant_id',{{'sub-01','sub-02'}}, 'sex',{{'M','F'}}, 'age',[28 21])

p = 

    participant_id: {'sub-01'  'sub-02'}
               sex: {'M'  'F'}
               age: [28 21]

>> spm_save('participants.tsv',p)                                                      
>> type participants.tsv                                                               

participant_id  sex     age
sub-01  M       28
sub-02  F       21

這些函式與 MATLAB 表格陣列 相容,並透明地處理 gzip 壓縮。

>> participant_id = {'sub-01'; 'sub-02'};
>> sex = {'M'; 'F'}; 
>> age = [28 21]';  
>> p = table(participant_id,sex,age);
>> spm_save('participants.tsv.gz',p) 
>> spm_load('participants.tsv.gz')   

ans = 

    participant_id: {2x1 cell}
               sex: {2x1 cell}
               age: [2x1 double]

NIfTI 檔案

[編輯 | 編輯原始碼]

可以使用 spm_vol@nifti 讀取/寫入 NIfTI 檔案

>> S = nifti('sub-2475376__T1w.nii')
 
S = 
 
NIFTI object: 1-by-1
            dat: [256x256x192 file_array]
            mat: [4x4 double]
     mat_intent: 'Scanner'
           mat0: [4x4 double]
    mat0_intent: 'Scanner'
        descrip: 'MR'

>> F = nifti('sub-2475376_task-Checkerboard_bold.nii')
 
F = 
 
NIFTI object: 1-by-1
            dat: [4-D file_array]
            mat: [4x4 double]
     mat_intent: 'Scanner'
           mat0: [4x4 double]
    mat0_intent: 'Scanner'
         timing: [1x1 struct]
        descrip: '4D image'

>> F.timing.tspace

ans =

    1.4000

預設情況下,SPM 不支援壓縮的 NIfTI 檔案 (.nii.gz),但 MATLAB/Octave 提供 gzip/gunzip 函式,如果需要,它們也可透過 BasicIO > 檔案操作 > 解壓縮檔案 從批處理介面獲得。

BIDS 解析器和查詢

[編輯 | 編輯原始碼]

可以使用 spm_BIDS 解析根據 BIDS 組織的資料目錄。

以下是一個使用 ds007 資料集的示例

>> % Parse BIDS directory
>> BIDS = spm_BIDS('/data/BIDS-examples/ds007');

>> % Make general queries about the dataset
>> spm_BIDS(BIDS,'subjects')           
ans = 
    '01'  '02'  '03'  '04'  '05'  '06'  '07'  '08'  '09'  '10'  '11'  '12'  '13'  '14'  '15'  '16'  '17'  '18'  '19'  '20'

>> spm_BIDS(BIDS,'sessions')
ans = 
    Empty cell array: 1-by-0

>> spm_BIDS(BIDS,'runs')    
ans = 
    '01'    '02'

>> spm_BIDS(BIDS,'tasks') 
ans = 
    'stopsignalwithletternaming'    'stopsignalwithmanualresponse'    'stopsignalwithpseudowordnaming'

>> spm_BIDS(BIDS,'types')
ans = 
    'T1w'    'bold'    'events'    'inplaneT2'

>> spm_BIDS(BIDS,'modalities')
ans = 
    'anat'    'func'

>> % Make more specific queries
>> spm_BIDS(BIDS,'runs','type','T1w')     
ans = 
   Empty cell array: 1-by-0

>> spm_BIDS(BIDS,'runs','type','bold')
ans = 
    '01'    '02'

>> % Get the NIfTI file for subject '05', run '02' and task 'stopsignalwithmanualresponse':
>> spm_BIDS(BIDS,'data','sub','05','run','02','task','stopsignalwithmanualresponse','type','bold')

ans = 

    '/data/ds007/sub-05/func/sub-05_task-stopsignalwithmanualresponse_run-02_bold.nii.gz'

>> % and corresponding metadata, including TR:
>> spm_BIDS(BIDS,'metadata','sub','05','run','02','task','stopsignalwithmanualresponse','type','bold')

ans = 

    RepetitionTime: 2
          TaskName: 'stop signal with manual response'

>> % Get the T1-weighted images from all subjects:
>> spm_BIDS(BIDS,'data','type','T1w')                                                                 

ans = 

    '/data/ds007/sub-01/anat/sub-01_T1w.nii.gz'
    '/data/ds007/sub-02/anat/sub-02_T1w.nii.gz'
    '/data/ds007/sub-03/anat/sub-03_T1w.nii.gz'
    '/data/ds007/sub-04/anat/sub-04_T1w.nii.gz'
    '/data/ds007/sub-05/anat/sub-05_T1w.nii.gz'
    '/data/ds007/sub-06/anat/sub-06_T1w.nii.gz'
    '/data/ds007/sub-07/anat/sub-07_T1w.nii.gz'
    '/data/ds007/sub-08/anat/sub-08_T1w.nii.gz'
    '/data/ds007/sub-09/anat/sub-09_T1w.nii.gz'
    '/data/ds007/sub-10/anat/sub-10_T1w.nii.gz'
    '/data/ds007/sub-11/anat/sub-11_T1w.nii.gz'
    '/data/ds007/sub-12/anat/sub-12_T1w.nii.gz'
    '/data/ds007/sub-13/anat/sub-13_T1w.nii.gz'
    '/data/ds007/sub-14/anat/sub-14_T1w.nii.gz'
    '/data/ds007/sub-15/anat/sub-15_T1w.nii.gz'
    '/data/ds007/sub-16/anat/sub-16_T1w.nii.gz'
    '/data/ds007/sub-17/anat/sub-17_T1w.nii.gz'
    '/data/ds007/sub-18/anat/sub-18_T1w.nii.gz'
    '/data/ds007/sub-19/anat/sub-19_T1w.nii.gz'
    '/data/ds007/sub-20/anat/sub-20_T1w.nii.gz'

將資料集格式化為 BIDS

[編輯 | 編輯原始碼]

輔助函式 spm_mkdirspm_copy 可能會有用,以及前面提到的 spm_savespm_jsonwrite

例如,以下使用 spm_mkdir 的程式碼片段

>> spm_mkdir('/data/bids',{'sub-2475376','sub-5489652'},{'ses-1','ses-2'},'func');
>> spm_mkdir('/data/bids',{'sub-2475376','sub-5489652'},'ses-1','anat');

建立此目錄層次結構

/data
└── bids
    ├── sub-2475376
       ├── ses-1
          ├── anat
          └── func
       └── ses-2
           └── func
    └── sub-5489652
        ├── ses-1
           ├── anat
           └── func
        └── ses-2
            └── func

spm_copy 使得更容易複製檔案及其附加的元資料(例如 sidecar JSON 檔案),並在複製過程中進行壓縮。

>> ls
sub-2475376_task-rest_bold.json
sub-2475376_task-rest_bold.nii.gz
>> spm_copy('sub-2475376_task-rest_bold.nii.gz','/derivatives', 'nifti',true, 'gunzip',true)
>> ls /derivatives
sub-2475376_task-rest_bold.json
sub-2475376_task-rest_bold.nii

另請參閱批處理介面中的這些選項

  • DICOM 匯入 批處理模組有一個選項可以建立元資料 sidecar JSON 檔案
matlabbatch{1}.spm.util.import.dicom.convopts.meta = true;
  • 3D 到 4D 檔案轉換 批處理模組有一個選項可以將 TR 儲存在 NIfTI 標頭檔案中
matlabbatch{1}.spm.util.cat.RT = TR;

另請參閱

[編輯 | 編輯原始碼]

SPM BIDS-App

華夏公益教科書