Vol.1
前言
在上一次推文中(如何将 DICOM 格式的图像转换为 NIfTI/BIDS 格式(一)https://mp.weixin.qq.com/s/Xm6S3H_m07scXH4F_v9zBA ,我们详细介绍了DICOM,NIfTI和BIDS格式,以及如何将DICOM格式的图像转换为NIfTI格式,在本次推文中我们将介绍如何整理成符合BIDS标准的文件结构。
Vol.2
Docker
在最开始,需要安装Docker。Docker 是一个开源的容器化平台,用于开发、交付和运行应用程序。通过 Docker,开发人员可以将应用程序及其依赖项打包到一个名为“容器”的轻量级、可移植的单元中。这使得应用程序能够在任何环境中(无论是开发环境、测试环境,还是生产环境)一致地运行。简单来说,Docker可以提供一个配置好的环境,我们不需要再去单独的配置每个软件所需的依赖等。在Windows和Linux中都可以使用。
在Windows中可以访问Docker官网下载Docker Desktop安装包。(https://www.docker.com/ )
安装命令:
curl -sSL https://get.daocloud.io/docker | sh
或 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Vol.3
heudiconv
转换格式的软件使用heudiconv,heudiconv是一个开源工具,旨在帮助用户将脑成像数据集(如 fMRI 或 DTI 数据集)按照特定的标准格式(通常是 BIDS 格式)进行组织和转换。heudiconv通过将原始的、可能杂乱无章的扫描数据转换为符合 BIDS 标准的结构,简化了数据管理和分析流程。
heudiconv的安装可以使用命令:pip install heudiconv[all],同时需要手动安装dcm2niix。这里不推荐这种方法,相对较复杂,可以直接从Docker Hub中下载容器使用(https://hub.docker.com/r/nipy/heudiconv/tags/ ),可以选择不同的版本复制命令在cmd命令行中下载 (Docker需要处于运行状态)。
Vol.4
格式转换准备
在进行格式转换之前需要保证所有被试的文件夹结构一致,并且所有被试的文件夹都需要包含ID(ID的长度一致),如下所示。
文件结构可以为:每个文件夹中包含被试的所有dcm文件,或不同模态的dcm文件分别放在不同的文件夹中,总之保证所有被试文件夹结构一致即可。(如果是纵向数据需要每个时间点单独有个文件夹)
Vol.5
格式转换
文件:原始文件夹命名为data,转换后的文件夹命名为bids。
第一步,运行命令:
docker run --rm -it -v $yourpath:/base nipy/heudiconv:1.0.0 -d /base/data/{subject}/*.dcm -o /base/bids -f convertall -s 01 -ss 001 -c none --overwrite
其中$yourpath为你的当前路径,1.0.0为软件的版本,-d /base/data/{subject}/*.dcm为原始文件,这里需要根据文件结构更改,-s 01为任意一名被试的编号即可。注意所有人的影像数据需要在同一台设备上采集。
运行结束之后会在bids文件夹中生成一个隐藏文件夹.heudiconv,其中可以找到heuristic.py和dicominfo.tsv文件。dicominfo.tsv文件中包含了每一种模态的信息,如下所示,通过这些信息可以分辨不同的模态,例如series_id项中T1是3-Accelerated Sagittal MPRAGE,DWI是7-Axial DTI。
第二步,修改heuristic.py文件。
在bids文件夹中新建一个code文件夹,并将heuristic.py文件放入。修改示例如下:
from __future__ import annotations
from typing import Optional
from heudiconv.utils import SeqInfo
def create_key(
template: Optional[str],
outtype: tuple[str, ...] = ("nii.gz",),
annotation_classes: None = None,
) -> tuple[str, tuple[str, ...], None]:
if template is None or not template:
raise ValueError("Template must be a valid format string")
return (template, outtype, annotation_classes)
def infotodict(
seqinfo: list[SeqInfo],
) -> dict[tuple[str, tuple[str, ...], None], list[str]]:
"""Heuristic evaluator for determining which runs belong where
allowed template fields - follow python string module:
item: index within category
subject: participant id
seqitem: run number during scanning
subindex: sub index within group
"""
t1w = create_key('sub-{subject}/{session}/anat/sub-{subject}_{session}_run-00{item:01d}_T1w')
dwi = create_key('sub-{subject}/{session}/dwi/sub-{subject}_{session}_run-00{item:01d}_dwi')
info: dict[tuple[str, tuple[str, ...], None], list[str]] = {t1w: [], dwi: []}
for s in seqinfo:
"""
The namedtuple `s` contains the following fields:
* total_files_till_now
* example_dcm_file
* series_id
* dcm_dir_name
* unspecified2
* unspecified3
* dim1
* dim2
* dim3
* dim4
* TR
* TE
* protocol_name
* is_motion_corrected
* is_derived
* patient_id
* study_description
* referring_physician_name
* series_description
* image_type
"""
if (s.series_id == '3-Accelerated Sagittal MPRAGE ')):
info[t1w].append(s.series_id)
else:
info[dwi].append(s.series_id)
return info
其中黄色部分是需要根据模态信息以及转换信息修改的部分。
需要注意:不同版本的heuristic.py文件格式可能不一样,注意代码的缩进,文件的修改参考:https://heudiconv.readthedocs.io/en/latest/custom-heuristic.html
第三步,批量转换。
for sub in $(ls)
do
echo $sub
docker run --rm -it -v $yourpath:/base nipy/heudiconv:1.0.0 -d /base/data/{subject}/*.dcm -o /base/bids -f /base/bids/code/heuristic.py -s ${sub} -ss 001 -c dcm2niix -b --overwrite
done
注意当前的路径。
转换完成后可以上传到https://bids-standard.github.io/bids-validator/ 进行验证。
如果有任何问题可以私信咨询我们。
关注我们,获取更多神经科学与心理学相关资讯!在后续的推文中,我们还将介绍更多的相关内容,敬请期待!
PSYCH统计实验室
通知公告
网络分析课程目前开放视频课啦!
单次课200元/讲(学生),250元/讲(非学生)
共有四讲内容:
①横断面网络分析简介与基础
②网络分析与因子分析
③交叉滞后网络分析
④时间序列网络分析
购买后开放视频权限14天,可多次申请。
并赠送所有课程相关资料(无PPT)
如果想申请购买,请联系M18812507626
更多资讯
关注我们
文稿:Lee
排版:Peruere
责编:Wink
审核:摘星
本文由“Psych统计自习室”课题组原创,欢迎转发至朋友圈。如需转载请联系后台,征得作者同意后方可转载。