如何将 DICOM 格式的图像转换为 NIfTI/BIDS 格式(二)

文摘   2024-12-27 22:35   北京  


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统计自习室”课题组原创,欢迎转发至朋友圈。如需转载请联系后台,征得作者同意后方可转载。



Psych统计自习室
大家好,我们是由来自北京师范大学,西南大学,天津医科大学等高校在读硕士、博士研究生组成的一个科研团队——Psych统计自习室。Psych统计自习室旨在关注心理学、精神病学领域的最前沿的系列研究,并做前沿统计知识的分享。
 最新文章