mcpField
B
bids

bids

github.com/crazymsn数据与数据库2337 次安装22 周前更新
代码仓库

关于 bids

使用 BIDS 社区标准组织、验证、查询和转换神经科学及生物医学数据集的技能。支持 MRI 以外的数据类型,包括电生理和行为数据。

主要功能

  1. 01BIDS 目录与文件命名规范
  2. 02使用 PyBIDS 查询数据集
  3. 03检查是否符合规范
  4. 04元数据与 sidecar 指南
  5. 05DICOM 到 BIDS 的转换流程

适用场景

  1. 01整理神经科学研究数据
  2. 02按受试者、任务或模态查找文件
  3. 03共享前检查数据集
  4. 04将扫描仪 DICOM 数据转换为 BIDS

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/crazymsn/academic-skills --skill bids

安装后在 Claude Code 中输入/bids确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
beps.yml
bids_specification.md
conversion_tools.md
metadata_fields.md
scripts/
update_schema.py

详细介绍

脑成像数据结构(BIDS)

概述

脑成像数据结构(BIDS)是一项社区标准,用于组织和描述神经科学及生物医学研究数据集。它定义了统一的文件命名规范、目录层级和元数据架构,使人和软件工具都能立即理解数据集。BIDS 由 BIDS 规范(当前为 v1.11.x)管理,并由社区通过 BIDS-Standard GitHub 组织维护。

BIDS 最初面向 MRI,如今的应用范围已远不止神经影像。该规范现已涵盖 11 种模态,横跨成像、电生理和行为数据:

  • 成像:MRI(结构、功能、扩散、场图、灌注/ASL)、PET、显微成像
  • 电生理:EEG、MEG、iEEG(颅内 EEG)、EMG
  • 其他:NIRS(近红外光谱)、动作捕捉、行为数据(不含成像)、MR 波谱

正在推进的 BEP 将进一步扩展 BIDS,尤其是 BEP032(微电极电生理)将添加对细胞外记录的支持,包括 Neuropixels 探针,使 BIDS 能够支持动物神经科学研究中常用的方法(另请参阅 neuropixels-analysis 技能)。

主要数据存储库(OpenNeuro、DANDI)、顶级期刊(NeuroImage、Human Brain Mapping、Scientific Data)和资助机构(NIH、ERC)都要求或强烈建议采用该标准。

BIDS 的 Python 生态系统以 PyBIDS(pybids)为核心,用于查询和索引 BIDS 数据集;并提供 bids-validator(基于 Deno,可通过 PyPI 包 bids-validator-deno 安装,也可直接通过 Deno 使用)来检查规范符合性。DICOM 转换通常使用 HeuDiConv、dcm2bids 或 BIDScoin。

何时使用此技能

在以下情况下使用此技能:

  • 将原始神经科学数据(成像、电生理、行为数据)整理为符合 BIDS 规范的目录结构
  • 查询现有 BIDS 数据集,按受试者、会话、任务、运行或模态查找特定文件
  • 在共享或提交数据集之前,根据 BIDS 规范验证数据集
  • 将扫描仪生成的 DICOM 数据转换为 BIDS 格式
  • 编写或编辑 JSON 侧车元数据文件
  • 创建符合 BIDS 规范的衍生数据(预处理数据、分析输出)
  • 为新数据集创建 dataset_description.json
  • 使用 BIDS 实体(受试者、会话、任务、采集、运行等)
  • 配置 .bidsignore,以从验证中排除文件
  • 准备数据并上传至 OpenNeuro、DANDI 或其他支持 BIDS 的数据存储库

安装

# Core BIDS querying library
uv pip install pybids

# BIDS validator (Deno-based, installed via PyPI wrapper)
uv pip install bids-validator-deno
# Alternative: install directly via Deno
# deno install -g -A npm:bids-validator

# DICOM-to-BIDS converters (install as needed)
uv pip install heudiconv       # HeuDiConv - heuristic-based DICOM conversion
uv pip install dcm2bids        # dcm2bids - config-file-based conversion
# BIDScoin: uv pip install bidscoin

# Useful companions
uv pip install nibabel          # NIfTI/other neuroimaging file I/O
uv pip install pydicom          # DICOM file reading (used by converters)

核心工作流

1. BIDS 目录结构

最简 BIDS 数据集遵循以下布局:

my_dataset/
  dataset_description.json      # Required: name, BIDSVersion, etc.
  participants.tsv              # Recommended: subject-level phenotypic data
  participants.json             # Recommended: column descriptions
  README                        # Recommended: dataset documentation
  CHANGES                       # Recommended: version history
  .bidsignore                   # Optional: patterns to exclude from validation
  sub-01/
    anat/
      sub-01_T1w.nii.gz
      sub-01_T1w.json           # Sidecar metadata
    func/
      sub-01_task-rest_bold.nii.gz
      sub-01_task-rest_bold.json
      sub-01_task-rest_events.tsv     # Event timing for task fMRI
      sub-01_task-rest_events.json
    dwi/
      sub-01_dwi.nii.gz
      sub-01_dwi.json
      sub-01_dwi.bvec
      sub-01_dwi.bval
    fmap/
      sub-01_phasediff.nii.gz
      sub-01_phasediff.json
      sub-01_magnitude1.nii.gz
    perf/
      sub-01_asl.nii.gz
      sub-01_asl.json
  sub-01/
    ses-pre/
      anat/
        sub-01_ses-pre_T1w.nii.gz
      func/
        sub-01_ses-pre_task-nback_bold.nii.gz
    ses-post/
      ...

要点:

  • 每个 NIfTI 文件都应有对应的 .json 侧车文件
  • 文件名包含实体信息:sub-<label>[_ses-<label>][_task-<label>][_acq-<label>][_run-<index>]_<suffix>.<extension>
  • 文件名中的实体顺序由规范固定
  • 在根目录层级,只有 dataset_description.json 是严格必需的
2. 创建 dataset_description.json
import json

dataset_description = {
    "Name": "My Neuroimaging Study",
    "BIDSVersion": "1.10.0",
    "DatasetType": "raw",
    "License": "CC0",
    "Authors": ["First Author", "Second Author"],
    "Acknowledgements": "Funded by NIH R01-MH123456",
    "HowToAcknowledge": "Please cite: Author et al. (2025) Journal Name.",
    "Funding": ["NIH R01-MH123456", "NSF BCS-7654321"],
    "ReferencesAndLinks": ["https://doi.org/10.xxxx/xxxxx"],
    "DatasetDOI": "10.18112/openneuro.ds000001.v1.0.0",
    "GeneratedBy": [
        {
            "Name": "HeuDiConv",
            "Version": "1.3.1",
            "CodeURL": "https://github.com/nipy/heudiconv"
        }
    ]
}

with open("dataset_description.json", "w") as f:
    json.dump(dataset_description, f, indent=4)

对于衍生数据,将 "DatasetType": "derivative" 设为指定值,并添加列出处理流程的 "GeneratedBy":

deriv_description = {
    "Name": "fMRIPrep - fMRI PREProcessing",
    "BIDSVersion": "1.10.0",
    "DatasetType": "derivative",
    "GeneratedBy": [
        {
            "Name": "fMRIPrep",
            "Version": "24.1.0",
            "CodeURL": "https://github.com/nipreps/fmriprep"
        }
    ]
}
3. 使用 PyBIDS 查询 BIDS 数据集
from bids import BIDSLayout

# Index a BIDS dataset (validates structure on load)
layout = BIDSLayout("/path/to/bids_dataset")

# Basic queries
subjects = layout.get_subjects()          # ['01', '02', '03', ...]
sessions = layout.get_sessions()          # ['pre', 'post'] or []
tasks = layout.get_tasks()                # ['rest', 'nback']
runs = layout.get_runs()                  # [1, 2] or []

# Find specific files
bold_files = layout.get(
    suffix="bold",
    extension=".nii.gz",
    return_type="filename"
)

# Filter by subject, task, session
nback_sub01 = layout.get(
    subject="01",
    task="nback",
    suffix="bold",
    extension=".nii.gz",
    return_type="filename"
)

# Get metadata from JSON sidecars (automatic inheritance)
metadata = layout.get_metadata("/path/to/sub-01/func/sub-01_task-rest_bold.nii.gz")
tr = metadata["RepetitionTime"]

# Get all entities for a file
entities = layout.get_entities()

# Build a path from entities using BIDSLayout
bids_file = layout.get(subject="01", suffix="T1w", extension=".nii.gz")[0]
print(bids_file.path)
print(bids_file.get_entities())

要点:

  • BIDSLayout 初始化时会为整个数据集建立索引;对于大型数据集,可使用 database_path 缓存索引
  • 元数据继承:较高层级(例如根目录或受试者目录)的 JSON 侧车文件会被其下的所有文件继承,除非被覆盖
  • 路径使用 return_type="filename";BIDSFile 对象使用 return_type="object"(默认值)
4. 验证 BIDS 数据集
通过 PyPI 使用 bids-validator(推荐)

PyPI 包 bids-validator-deno 将基于 Deno 的验证器打包为独立 CLI:

# Install
uv pip install bids-validator-deno

# Validate a dataset
bids-validator /path/to/bids_dataset

# Ignore specific warnings/errors
bids-validator /path/to/bids_dataset --ignoreNiftiHeaders --ignoreSubjectConsistency
直接通过 Deno 使用 bids-validator

如果已安装 Deno,可以不通过 PyPI 安装或运行验证器:

# Install globally via Deno
deno install -g -A npm:bids-validator

# Or run without installing
deno run -A npm:bids-validator /path/to/bids_dataset
旧版 Node.js 验证器

旧版基于 Node.js 的验证器(npm install -g bids-validator)已弃用,建议改用基于 Deno 的版本。Deno 版本是 BIDS Specification v1.9+ 的参考实现。

使用 .bidsignore

在数据集根目录创建 .bidsignore,以从验证中排除文件(采用 gitignore 语法):

# Exclude sourcedata and extra files
sourcedata/
extra_data/
*.log
*_sbref.nii.gz
**/.DS_Store
5. BIDS 实体与文件命名

实体、实体排序、允许的后缀以及所有文件名规则的权威机器可读数据源是 BIDS Schema——一种以结构化 YAML/JSON 表示的规范。此技能随附的 JSON 导出文件位于 references/bids_schema.json。该 Schema 定义在 bids-specification src/schema/ 目录中,并发布于 https://bids-specification.readthedocs.io/en/stable/schema.json。BEP 专用的 Schema 预览可在 https://github.com/bids-standard/bids-schema/tree/main/BEPs 查看。

运行 scripts/update_schema.py,从上游刷新 Schema 和 BEP 列表(除标准库外无其他依赖)。

下表是便于查阅的摘要;如有疑问,请参阅 Schema。

BIDS 文件名由按顺序排列的键值实体对构成:

实体键示例必需用途
受试者sub-sub-01所有文件
会话ses-ses-pre多会话研究
任务task-task-restfunc(bold、cbv、phase)、eeg、meg
采集acq-acq-highres区分采集参数
对比增强剂ce-ce-gadolinium对比增强图像
重建rec-rec-magnitude重建变体
方向dir-dir-AP场图、DWI、相位编码
运行run-run-01多次相同采集
回波echo-echo-1多回波序列
部分part-part-mag幅度/相位拆分
空间space-space-MNI152NLin2009cAsym模板空间中的衍生数据
描述desc-desc-preproc仅用于衍生数据

文件名中的实体顺序由规范固定(定义于 bids_schema.json 的 rules.entities)。完整的编号顺序表请参阅 references/bids_specification.md。常见的部分顺序如下: sub-<label>[_ses-<label>][_task-<label>][_acq-<label>][_ce-<label>][_rec-<label>][_dir-<label>][_run-<index>][_echo-<index>][_part-<label>][_space-<label>][_desc-<label>]_<suffix>.<extension>

按数据类型划分的常见后缀:

数据类型后缀
anatT1w、T2w、FLAIR、T2star、T1map、T2map、defacemask
funcbold、cbv、sbref、events、physio、stim
dwidwi、sbref
fmapphasediff、phase1、phase2、magnitude1、magnitude2、fieldmap、epi
perfasl、m0scan、aslcontext
eegeeg、channels、electrodes、events
megmeg、channels、coordsystem、events
ieegieeg、channels、electrodes、coordsystem、events
petpet、blood
6. DICOM 转换为 BIDS
HeuDiConv

HeuDiConv 是最灵活的 DICOM-to-BIDS 转换工具。它支持三种使用模式——从全自动到完全自定义——并可开箱即用地处理重复数据、来源追踪和源数据归档。

模式 1:ReproIn(开箱即用,新研究推荐使用)

如果扫描仪协议名称遵循 ReproIn 命名约定,转换过程完全自动化——无需编写启发式文件:

# Turnkey conversion: HeuDiConv maps ReproIn protocol names to BIDS automatically
heudiconv --files dicom/001 -o /path/to/bids -f reproin --bids --minmeta

ReproIn 协议名称会直接编码 BIDS 实体:

  • anat-T1w → sub-XX/anat/sub-XX_T1w.nii.gz
  • func-bold_task-rest → sub-XX/func/sub-XX_task-rest_bold.nii.gz
  • dwi_dir-AP → sub-XX/dwi/sub-XX_dir-AP_dwi.nii.gz
  • fmap_dir-PA → sub-XX/fmap/sub-XX_dir-PA_epi.nii.gz

可以在定位像上设置一次会话(例如 anat-scout_ses-pre),ReproIn 会将其传播到该 Program 中的所有序列。被试 ID 从 DICOM 元数据中提取。重复扫描会自动编号。

模式 2:将自定义启发式映射到 ReproIn(适用于现有数据)

如果已有数据使用非 ReproIn 协议名称,可以编写一个精简的启发式文件,将这些名称映射为 ReproIn 约定,从而获得 ReproIn 的全部优势(自动处理实体、管理重复数据等)。HOWTO 见 https://github.com/repronim/reproin/issues/18。

模式 3:自定义启发式(完全灵活)

对于复杂的映射,可以编写 Python 启发式文件:

# Step 1: Reconnaissance — discover DICOM series
heudiconv --files dicom/219/itbs/*/*.dcm -o Nifti/ -f convertall -s 219 -c none

# This creates .heudiconv/219/info/dicominfo.tsv — inspect it to understand
# what was acquired and map series to BIDS names.

# Step 2: Write a heuristic file (see references/conversion_tools.md)

# Step 3: Convert
heudiconv --files dicom/219/itbs/*/*.dcm -s 219 -ss itbs \
  -f Nifti/code/heuristic.py -c dcm2niix --bids --minmeta -o Nifti/

完整的启发式文件示例请参阅 references/conversion_tools.md。

要点:

  • HeuDiConv 使用 dcm2niix 执行实际的 DICOM-to-NIfTI 转换
  • --minmeta:务必使用此标志,以防过多的 DICOM 元数据导致 JSON 侧车文件溢出(可能导致 fMRIPrep/MRIQC 崩溃)
  • 重复数据处理:在模板中使用 {item:03d},以便在同一协议多次运行时自动编号;如果不使用,后续运行会覆盖之前的结果
  • .heudiconv/ 目录:在输出旁创建,用于存储来源记录(所用启发式文件、dicominfo.tsv、转换记录)。为确保可复现性,请将其与数据一同保留
  • sourcedata/:为确保可复现性,HeuDiConv 会将原始 DICOM 归档为 sourcedata/ 下的 .tgz 文件
  • is_motion_corrected 筛选器:在启发式文件中使用,以排除扫描仪生成的 MOCO 序列(例如 if not s.is_motion_corrected)
  • 指定 DICOM 输入时,支持使用 --files(显式路径)和 -d(包含 {subject}、{session} 占位符的模板)
dcm2bids(基于配置文件)
# Step 1: Generate helper output to inspect series
dcm2bids_helper -d /path/to/dicom

# Step 2: Create config file (dcm2bids_config.json)
# Step 3: Convert
dcm2bids -d /path/to/dicom -p 01 -c dcm2bids_config.json -o /path/to/bids_output

详细的配置示例请参阅 references/conversion_tools.md。

7. 元数据侧车文件

每个 BIDS 数据文件都应有一个包含采集参数的 JSON 侧车文件。元数据字段遵循继承原则:较高目录级别的侧车文件适用于其下所有匹配的文件。

继承示例:

my_dataset/
  task-rest_bold.json           # Applies to ALL rest BOLD files
  sub-01/
    func/
      sub-01_task-rest_bold.json  # Overrides/extends for sub-01 only

各模态的关键元数据字段:

对于 func(BOLD):

{
    "RepetitionTime": 2.0,
    "TaskName": "rest",
    "PhaseEncodingDirection": "j-",
    "TotalReadoutTime": 0.05,
    "SliceTiming": [0, 0.5, 1.0, 1.5],
    "EffectiveEchoSpacing": 0.00058,
    "EchoTime": 0.03
}

对于 anat:

{
    "MagneticFieldStrength": 3,
    "Manufacturer": "Siemens",
    "ManufacturersModelName": "Prisma",
    "RepetitionTime": 2.3,
    "EchoTime": 0.00293,
    "FlipAngle": 8
}

对于 DWI:

{
    "PhaseEncodingDirection": "j-",
    "TotalReadoutTime": 0.05,
    "EchoTime": 0.089,
    "RepetitionTime": 3.4,
    "MultipartID": "dwi_1"
}

要点:

  • dcm2niix 会根据 DICOM 头信息自动生成大多数侧车字段
  • BOLD 必须包含 RepetitionTime 和 TaskName
  • fMRI 预处理中的切片时序校正需要 SliceTiming
  • 畸变校正需要 PhaseEncodingDirection 和 TotalReadoutTime(或 EffectiveEchoSpacing)
  • 完整字段参考请参阅 references/metadata_fields.md
8. 任务态 fMRI 的事件文件

基于任务的 fMRI 需要 _events.tsv 文件:

onset	duration	trial_type	response_time
0.0	0.5	face	0.435
2.5	0.5	house	0.367
5.0	0.5	face	0.512
7.5	0.5	scrambled	0.298

必需列:

  • onset - 相对于采集开始时间的事件起始时间,单位为秒
  • duration - 持续时间,单位为秒(瞬时事件使用 n/a)

建议列:

  • trial_type - 条件的类别标签
  • response_time - 反应时间,单位为秒
  • 根据需要添加自定义列(并在相应的 .json 侧车文件中进行说明)
9. 参与者文件
participant_id	age	sex	group	handedness
sub-01	25	M	control	right
sub-02	30	F	patient	left
sub-03	28	M	control	right

participants.json 侧车文件用于描述各列:

{
    "age": {
        "Description": "Age of the participant at time of scanning",
        "Units": "years"
    },
    "sex": {
        "Description": "Biological sex",
        "Levels": {
            "M": "male",
            "F": "female"
        }
    },
    "group": {
        "Description": "Experimental group",
        "Levels": {
            "control": "Healthy control",
            "patient": "Patient group"
        }
    },
    "handedness": {
        "Description": "Dominant hand",
        "Levels": {
            "right": "Right-handed",
            "left": "Left-handed",
            "ambidextrous": "Ambidextrous"
        }
    }
}
10. BIDS 衍生数据

处理后的输出放在 derivatives/ 目录下:

my_dataset/
  derivatives/
    fmriprep-24.1.0/
      dataset_description.json      # DatasetType: "derivative"
      sub-01/
        anat/
          sub-01_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz
          sub-01_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz
        func/
          sub-01_task-rest_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz
          sub-01_task-rest_desc-confounds_timeseries.tsv
    mriqc-24.0.0/
      dataset_description.json
      sub-01/
        anat/
          sub-01_T1w.html
        func/
          sub-01_task-rest_bold.html
      group_T1w.tsv
      group_bold.tsv

衍生数据约定:

  • space-<label> - 模板/参考空间(例如,MNI152NLin2009cAsym、T1w)
  • desc-<label> - 处理说明(例如,preproc、brain、smoothed)
  • res-<label> - 分辨率(例如,2 表示 2 mm 等体素)
  • 每个处理流水线都应在 derivatives/ 下拥有自己的目录
  • 必须拥有自己的 dataset_description.json,其中包含 GeneratedBy
11. PyBIDS:高级用法
from bids import BIDSLayout
from bids.layout import BIDSLayoutIndexer

# Cache the layout index for faster repeated access
layout = BIDSLayout("/path/to/dataset", database_path="/path/to/cache.db")

# Include derivatives
layout = BIDSLayout(
    "/path/to/dataset",
    derivatives=["/path/to/dataset/derivatives/fmriprep-24.1.0"]
)

# Get derivative files
preproc = layout.get(
    subject="01",
    task="rest",
    desc="preproc",
    suffix="bold",
    space="MNI152NLin2009cAsym",
    extension=".nii.gz",
    return_type="filename"
)

# Get confound regressors
confounds = layout.get(
    subject="01",
    task="rest",
    desc="confounds",
    suffix="timeseries",
    extension=".tsv",
    return_type="filename"
)

# Build BIDS path from entities
from bids import BIDSLayout
layout = BIDSLayout("/path/to/dataset")
path = layout.build_path(
    {
        "subject": "01",
        "session": "pre",
        "task": "rest",
        "suffix": "bold",
        "extension": ".nii.gz",
        "datatype": "func"
    },
    validate=True
)

# Get all files for a subject as a DataFrame
import pandas as pd
files_df = layout.to_df()
sub01_df = files_df[files_df["subject"] == "01"]
12. BIDS 应用

BIDS 应用是容器化的分析流水线,接受 BIDS 数据集作为输入:

# General BIDS-App invocation pattern
docker run -v /path/to/bids:/data:ro -v /path/to/output:/out \
    <bids-app-image> /data /out participant --participant_label 01

# Common BIDS-Apps:
# fMRIPrep - fMRI preprocessing
docker run nipreps/fmriprep /data /out participant \
    --participant-label 01 --fs-license-file /license.txt

# MRIQC - MRI quality control
docker run nipreps/mriqc /data /out participant \
    --participant-label 01

# QSIPrep - diffusion MRI preprocessing
docker run pennbbl/qsiprep /data /out participant \
    --participant-label 01

BIDS 应用接口约定:

bids-app input_dataset output_dir {participant|group} [options]
  • participant 级别:逐个受试者运行
  • group 级别:跨所有受试者运行(汇总/组统计)

参考资料

此技能包含详细的参考文档:

使用以下命令更新架构和 BEP:python scripts/update_schema.py

常见问题与解决方案

1. 验证器报告“Not a BIDS dataset”

原因:根目录下缺少 dataset_description.json。 解决方法:创建该文件,至少包含 {"Name": "...", "BIDSVersion": "1.10.0"}。

2. 受试者不一致警告

原因:并非所有受试者都拥有相同的一组文件(有些缺少会话、运行等)。 解决方法:这是警告,而非错误。如果这是有意的,请使用 --ignoreSubjectConsistency。在 participants.tsv 或 scans.tsv 中记录缺失数据。

3. 缺少 SliceTiming

原因:dcm2niix 无法从 DICOM 头信息中提取切片时序。 解决方法:根据扫描协议确定切片顺序,并手动添加到 JSON 旁文件中。常见模式:升序、降序、交错(奇数优先或偶数优先)。

4. 相位编码方向混淆

原因:轴标签(i/j/k 与 x/y/z 与 LR/AP/SI)容易混淆。 解决方法:在 BIDS 中,使用 NIfTI 图像轴:i=第一轴,j=第二轴,k=第三轴。- 表示负方向。对于标准轴位采集,j 通常表示前后方向。请根据采集协议进行确认。

5. PyBIDS 在大型数据集上速度较慢

原因:每次调用 BIDSLayout() 时都会对整个文件系统进行索引。 解决方法:使用 database_path 将索引缓存到 SQLite 文件中:

layout = BIDSLayout("/data", database_path="/data/.pybids_cache.db")
6. PyBIDS 未找到衍生数据

原因:衍生数据目录缺少自己的 dataset_description.json。 解决方法:每个衍生数据目录都必须包含 dataset_description.json,其中设置 "DatasetType": "derivative"。

7. 事件文件的时序不正确

原因:onset 时间使用了错误的参考点(例如触发时间而非第一个体积的时间)。 解决方法:onset 必须以秒为单位,相对于该次运行采集的第一个体积。若丢弃了空扫描,请将其考虑在内。

8. TSV 文件验证失败

原因:编码或分隔符问题(使用空格而非制表符、BOM 字符、Windows 换行符)。 修复方法:确保使用 UTF-8 编码和 Unix 换行符(\n),并以制表符分隔值。缺失值请使用 n/a(不要使用 NA、NaN 或空值)。

最佳实践

  1. 尽早并经常验证 - 每次转换或修改后都运行 BIDS 验证器。在错误累积之前修复它们。

  2. 使用元数据继承 - 将共享元数据(例如 TaskName、扫描仪参数)放在顶层 sidecar 文件中,而不是在每个受试者的目录中重复存放。

  3. 保留 sourcedata - 将原始 DICOM(或其他原始)数据存放在 sourcedata/ 下,以便转换过程可复现。将 sourcedata/ 添加到 .bidsignore。

  4. 从一开始就使用一致的命名方式 - 在数据采集前定义 BIDS 命名方案。使用 ReproIn 命名约定来命名扫描协议,以便自动转换。

  5. 记录数据集信息 - 编写详尽的 README,描述研究设计、采集参数、已知问题以及任何偏离 BIDS 的情况。

  6. 使用 scans.tsv 记录运行级元数据 - 记录每次运行的采集时间和质量备注:

    filename	acq_time	quality
    func/sub-01_task-rest_bold.nii.gz	2025-01-15T10:30:00	good
    
  7. 对数据集进行版本控制 - 使用 CHANGES 记录数据集修改。对于大型数据集,可考虑使用 DataLad 进行完整版本控制。

  8. 对解剖图像进行面部去识别 - 在分享前,从 T1w/T2w 图像中移除面部特征(例如,使用 pydeface、mri_deface 或 afni_refacer)。将去识别版本存为主要数据,或使用 _defacemask 文件。

  9. 使用 BIDS URI 记录来源 - 在衍生数据中,使用 BIDS URI 引用源文件:bids::sub-01/anat/sub-01_T1w.nii.gz。

  10. 优先使用社区工具 - 尽可能使用成熟的 BIDS-Apps(fMRIPrep、MRIQC、QSIPrep),而不是自定义流水线。它们能正确处理 BIDS 输入/输出,并生成符合 BIDS 规范的衍生数据。

  11. 研究 bids-examples - bids-examples 仓库是原型 BIDS 数据集的权威集合,涵盖不同模态和使用场景(MRI、fMRI、DWI、EEG、MEG、iEEG、PET、ASL、遗传学、衍生数据等)。在构建自己的数据集时,可将其用作参考;也可将其作为 BIDS 工具的测试数据,或了解特定模态应如何组织。每个示例都通过了 BIDS 验证器的验证。

BIDS 扩展提案(BEP)

BEP 是由社区推动的提案,旨在将 BIDS 扩展到新的模态、衍生数据或元数据。包含状态、负责人和链接的完整列表见 references/beps.yml(从 bids-website 获取)。BEP 专属的 schema 预览可在 https://github.com/bids-standard/bids-schema/tree/main/BEPs 查看。

当前 BEP(截至 schema 更新):

BEP标题内容状态
004磁化率加权成像原始数据正在寻找新负责人
011结构预处理衍生数据衍生数据已有 PR(#518)
012功能预处理衍生数据衍生数据已有 PR(#519),schema 已实现
014仿射变换和非线性场扭曲衍生数据X5 格式开发中
016扩散加权成像衍生数据衍生数据已有 PR(#2211)
017通用 BIDS 连通性数据 schema衍生数据开发中
021通用电生理衍生数据衍生数据开发中
023PET 预处理衍生数据衍生数据开发中
024计算机断层扫描原始数据正在寻找贡献者
026微电极记录原始数据正在寻找新负责人
028溯源信息元数据已有 PR(#2099)
032微电极电生理学原始数据已有 PR(#2307),提供预览 — 涵盖 Neuropixels 和其他细胞外探针;与 neuropixels-analysis skill 相关
033高级扩散加权成像原始数据正在寻找贡献者
034计算建模衍生数据已有 PR(#967)
035使用不合规衍生数据进行大型分析衍生数据开发中
036表型数据指南原始数据社区审查中
037无创脑刺激原始数据开发中
039基于降维的网络原始数据开发中
040功能超声原始数据开发中
041统计模型衍生数据衍生数据正在收集反馈
043BIDS 术语映射元数据正在收集反馈
044刺激材料原始数据已有 PR(#2022),社区审查中
045外周生理记录原始数据已有 PR(#2267)
046扩散纤维束成像衍生数据开发中
047行为实验音频/视频录制原始数据已有 PR(#2231)

相关标准:

  • BIDS-Stats Models:用于定义基于 GLM 的神经影像分析的 JSON 规范
  • BIDS-Derivatives(BEP003):预处理/分析输出的标准(部分内容已合并到规范中)

相关工具生态

工具用途
fMRIPrepfMRI 预处理(生成 BIDS 衍生数据)
MRIQCMRI 质量控制(生成 BIDS 衍生数据)
QSIPrep扩散 MRI 预处理
TemplateFlow采用类似 BIDS 命名方式的神经影像模板和图谱
FitlinsBIDS Stats Models 实现
DataLad大型数据集的版本控制,与 BIDS 集成
OpenNeuro免费的 BIDS 数据集存储库
DANDI神经生理数据档案(部分模态使用 BIDS)
HeuDiConv使用启发式 Python 文件将 DICOM 转换为 BIDS
dcm2bids使用 JSON 配置将 DICOM 转换为 BIDS
BIDScoin使用 GUI 和 YAML 配置将 DICOM 转换为 BIDS
nwb2bids将 NWB(Neurodata Without Borders)文件转换为 BIDS
CuBIDSBIDS 数据集整理与协调
bids2table对 BIDS 数据集进行高效的表格化索引
bids-examples涵盖所有模态的典型 BIDS 数据集权威集合

文档

评论

支持 Markdown