【最全】如何不写代码将 Dicom 图像转 Nifti 格式, 7种工具任你选!

news2024/9/20 8:47:03

大多数医学成像设备以复杂的 DICOM 格式(后缀 .dcm)的变体存储图像。许多科学工具希望医学图像以更简单的 NIfTI 格式(后缀 nii.gz)存储。事实上,我们做深度学习基本都是使用的 nii.gz 格式或者 nii 格式。

那么,如何将 dicom 格式转换为 Nifti 格式,是我们做研究的第一个难题。

本次推荐一个特别好用的转换工具(dcm2niix),可以批量转换你的 dicom 数据。当然,你要是不满足一种方案,直接拉到文章最后,查看转换工具汇总,总有一个适合你

dcm2niix

文章目录

    • dcm2niix 简介
    • dcm2niix 使用方法-简单版
      • 图形界面版
      • 命令行版
    • dcm2niix 图形界面安装和使用
    • dcm2niix 命令行版
      • 命令行版的安装
      • dcm2niix 命令行详细使用说明
    • 其他工具推荐

dcm2niix 简介

dcm2niix 是一款由 NTRC团队开发的医学图像转换工具,用于将数字成像与通信(DICOM)格式的医学图像转换为更加通用的神经影像学信息交换(NIfTI)格式。该软件直接读取磁共振成像(MRI)和计算机断层扫描(CT)数据,并把它们转换为 NIfTI 格式。除此之外,dcm2niix 还能够处理其他信息,例如医院信息化系统(HIS)中的元数据、图像方向和标签等。

NTRC 团队还开发了 MRICron 软件,这是一款 NIfTI 格式的看图软件,而且它可以方便地调用 dcm2niix 进行图像转换。dcm2niix 的出现使得神经影像学数据的转换和处理更加高效、准确和便捷。

dcm2niix 使用方法-简单版

为了让各位看官对 dcm2niix 。有个初步印象和了解。在这里,先简单介绍一下如何使用。后面再跟深入的讲解安装和使用细节~

简单讲,使用分为 图形界面版和命令版

图形界面版


图形界面版需要先下载 MRICron。在上图左边设置好输出文件的命名格式,输出文件夹等参数,把dcm文件夹拖到右边空白处即可完成转换。

命令行版

对于使用 shell 命令不太熟,数据量少的朋友,可以使用图形界面版,鼠标点点点就可以了。当然计算机玩家还是推荐命令行版。

dcm2niix 图形界面安装和使用

图形界面版的安装

官方推荐下载 MRIcroGL 版本,是 MRICron 的升级版本。如下图,选择对应的操作系统下载安装即可

软件打开界面如下图👇

这个界面我还没研究透。还是用 MRICron 比较顺手。

使用方法

MRIcroGL包括一个简单的图形用户界面,用于控制dcm2niix。启动 MRIcroGL 后,选择 Import/ConvertDICOMtoNIfTI菜单项。

界面如下图所示。

复选框设置输出是压缩(创建.nii.gz文件)还是不压缩(创建.nii文件)。然后,您可以使用图片中描述的格式指定所需的输出文件名。

当您调整所需的输出名称时,软件将显示一个示例,说明您的文件将如何显示。您还可以选择是否要将输出保存到特定的文件夹中,或者是否应该在与输入DICOM文件相同的文件夹中创建NIfTI图像。

最后一步是拖放要转换为应用程序的文件夹。注意,界面总是以交互方式显示命令行,因此,当您通过选择复选框与界面交互时,您正在创建一个文本命令,您可以将其复制并粘贴到您喜欢的脚本中。

注意:我在 mac 中使用 MRIcroGL 转 Nii 时,会提示没有有效的DICOM文件,但是我换成 MRICron 就能成功。奇了怪了,搞不懂,遇到同样问题的话,你就使用 MRICron。

MRICron的下载链接,软件示意图👇

图形界面版比较简单,就介绍这么多

dcm2niix 命令行版

命令行版的安装

有几种方法可以安装 dcm2niix

  • 有 conda, conda install -c conda-forge dcm2niix on Linux, MacOS or Windows.
  • 有 pip, python -m pip install dcm2niix on Linux, MacOS or Windows.
    这两种方法安装最简单,但不一定有效。比如,我在 mac 上使用这两种方法安装后,转 nii 时,总会提示下图错误

    但是在 linux 上这样安装是可用的。

如果上述安装方法不行,试试以下两种方法,稍微复杂一些。

  • 下载 Github Releases 版本,提供了最新的可编译的执行文件。

    下载对应的版本并解压,把可执行文件放入 /Users/xxx/opt/anaconda3/bin/dcm2niix

为什么放在这个地方?计算机咱也不太懂,不过我们之前不是使用 conda 安装过 dcm2niix 吗,它就放在了这个位置。我想的是它自动安装的版本可能不太好用,我就用最新版本替换掉它,所以放在了此处,实际证明是可行的。

我们可以通过命令 which dcm2niix获取地址,并使用刚下载的 dcm2niix 替换掉它

  • 运行以下命令获取Linux、Macintosh或Windows的最新版本

如果你不想从上述网站进去下载,也可以直接使用如下命令下载

curl -fLO https://github.com/rordenlab/dcm2niix/releases/latest/download/dcm2niix_lnx.zip (linux版)
curl -fLO https://github.com/rordenlab/dcm2niix/releases/latest/download/macos_dcm2niix.pkg (macos版)
curl -fLO https://github.com/rordenlab/dcm2niix/releases/latest/download/dcm2niix_win.zip (windows版)

如果是计算机玩家,还可以 build from source((using make or cmake)). 详细流程自行浏览 dcm2niix github

dcm2niix 命令行详细使用说明

dcm2niix 命令中唯一必填的参数是:需要转换的 DICOM 文件夹的位置该参数始终作为最后一个参数进行提供。例如,dcm2niix ~/dicomdir 将会转换文件夹 “dicomdir” 中的所有 DICOM 文件。但是,你可以指定一些可选参数来影响转换结果。

因此,一个典型的转换命令可能是 dcm2niix -o ~/niftidir -f %p_%s -g y ~/dicomdir

在这个例子中,软件会在 dicomdir 中查找 DICOM 图像并将转换后的 NIfTI 文件保存在 niftidir 中,输出文件将被压缩,并包含协议名称 (%p) 和序列号 (%s) 作为文件名。

下面是详细的参数列表(在终端直接输入 dcm2niix 命令来查看所有命令的列表)。以下是各个参数的说明:

  1. -1…-9 压缩级别(1为最快,9为最慢但会产生更小的文件,默认为6)。
  2. -b: BIDS sidecar:(“-b y”或“-b n”, 默认为 y)如果选择“yes”,则软件将生成与NIfTI图像同名的一种Brain Imaging Data Structure文件。该文件采用JSON文本格式,提供了有关扫描的附加信息,这些信息无法保存在NIfTI头文件中
    -ba BIDS sidecar的匿名化:(“-ba y”或“-ba n”)如果选择“no”,则BIDS文件将包含编码在DICOM文件中的参与者个人信息。这些识别信息可能会危及参与者的隐私。此选项仅影响BIDS sidecar(见b)。
  3. -f 输出文件名:(例如“-f myMR”, 默认 ‘%f_%p_%t_%s’)dcm2niix允许您指定转换后的 NIfTI 文件的命名方式。该方法可能一开始看起来很复杂,但它提供了非常大的灵活性。
一个简单的文件名可能是“exp03subj09”。
在这种情况下,这个参与者的第一个序列将被命名为exp03subj09.nii,
接下来是exp03subj09a.nii,然后是exp03subj09b.nii等等。

但是

dcm2niix还允许您将相关信息的存在和位置标注到文件名中。
考虑您指定“exp03subj09%p%s” 
在这种情况下,协议的名称和序列号(存储在DICOM文件中)将成为文件名的一部分。
在这种情况下,输出文件的名称可能是exp03subj09fmri1.nii、
exp03subj09t12.nii
和exp03subj09fmri3.nii。
您可以按任意顺序组合尽可能多的修饰符。
以下是特殊修饰符的列表:
%a:插入天线(线圈)编号。例如,“myName%a”的输出文件名将生成“myName1”,“myName2”等,每个线圈一个。请注意,大多数扫描都会将所有线圈的数据组合在一起,在这些情况下,该选项将被忽略。例如,大多数将所有线圈的数据组合在一起的扫描通常只称为“myName”。
%d:插入系列描述(0008,103E)。例如,使用“myName%d”转换的回波平面图像会产生“myNameEPI”
%e:插入回波数。例如,具有两个回波时间的序列使用输出文件名“myName%e”进行转换,将产生“myName1”和“myName2”。请注意,大多数MRI序列仅使用单个回波时间,在这种情况下,您只会得到“myName1”。
%f:插入输入文件夹名。例如,使用输入文件夹“/usr/Subj22”和输出文件名“myName%f”将导致输出文件命名为“myNameSubj22.nii”。
%i:插入病人ID(DICOM标签0010,0020)。例如,“myName%i”的输出文件名将把病人ID命名为“ID123”的图像转换为“myNameID123.nii”
%m:制造商名称。 例如,“myName%m”的输出文件名将把来自GE扫描仪的图像转换为“myNameGE.nii”,而来自Philips的图像将变为“myNamePh.nii”,而Siemens将变为“myNameSi.nii”,否则制造商不可用(“myNameNA.nii”)。 (需要2015年或之后的dcm2nii版本)。
%n:插入受试者姓名(DICOM标签0010,0010)。例如,“myName%n”的输出文件名将把来自John Doe的图像转换为“myNameJohnDoe.nii”。如果您的参与者名称仅使用英文字母,则此选项最有效。对于其他欧洲语言,您可能会发现它进行一些基本转换(“Müller”将变成“Muller”)。对于非欧洲语言,您会发现此选项不满意。也许以后的版本可以支持DICOM标签0008,0005。
%p:插入协议名称(DICOM标签0018,1030)。例如,“myName%p”的输出文件名将把协议命名为T1的图像转换为“myNameT1.nii”
%q:插入序列名称(DICOM标签0018,1020)。例如,使用输出文件名“myName%q”将旋转回波序列转换为“myNameSE.nii”(新功能,在2015年8月30日版本中)。
%s:插入系列(DICOM标签0020,0011)。例如,使用输出文件名“myName%s”将第二个序列转换为“myName2.nii”。如果您想将系列号补零,请插入所需的数字数(0..9)。例如,在转换11个序列时应用过滤器“m%s”将创建文件,这些文件将导致简单的按字母排序出现问题,例如“m1.nii,m11.nii,m2.nii...m9.nii”的区别在于指定“m%3s”将有助于排序(例如“m001.nii,m002.nii...m011.nii”)。
%t:插入会话日期和时间(DICOM标签0008,0021和0008,0030)。例如,“myName%t”的输出文件名将把会话开始于2014年1月13日下午1:23的图像转换为“myName20140113132322.nii”
%z:插入序列名称(0018,0024),因此使用“myName%z”转换的T1扫描可能会产生“myNameT1”。
  1. -h 显示帮助屏幕
  2. -m: 合并2D切片:(n/y or 0/1/2, default 2) [no, yes, auto])如果选择,同一系列的图像将堆叠到单个NIfTI图像中. 默认就好了,3维数据直接在同一个 nii 里面。
  3. -o: 输出文件夹(不给,就会直接放在input folder)
  4. -z: 是否压缩,(y/o/i/n/3, default n) [y=pigz, o=optimal pigz, i=internal:zlib, n=no, 3=no,3D] 一般会选择压缩(-z y)

参数很多,但常用的转换命令如下(至少满足我的需求)
dcm2niix -z y -f %i_%d_%s -o niftidir dcmdir

表示将 dcmdir 的所有图像转换到 niftidir 并压缩图像,重命名为 %i_%d_%s

dcm2niix 我已经用了 2年以上了,团队里面转换都是用这个,转换快,需要的操作少。

但是朋友们刚开始接触需要花一点时间了解,我都做到这份上了,学习起来应该很容易吧。

你要是觉得这个工具不ok, 别急走!!!我还能在推荐10个

其他工具推荐

  • dinifti: dinifti 下载链接, 用C语言编写的,专注于Siemens数据的转换
  • dicm2nii: 用Matlab编写的。Matlab语言使得这个工具非常易于脚本化。它试图保留扩散梯度信息。dicm2nii 下载链接
  • dicom2nifti: 看起来很有前途:可使用命令行,也可以在python中调用 dicom2nifti 下载链接。
  • dcmstack: Python编写的。它具有一个巧妙的功能,可以让你在NIfTI文件中存储/查看DICOM元头数据。dcmstack下载链接
  • mrconvert: MRtrix工具mrconvert是一个有用的通用图像转换器,并能够良好地处理DTI数据
  • mri_convert: mri_convert下载链接是流行的FreeSurfer软件包的一部分。根据我的有限经验,这个工具适用于GE和Siemens数据,但在Philips 4D数据集上失败。
    以下是不同工具处理数据所需花费的时间。dcm2niix为对照组,表里的时间是相对dcm2niix而言的

这么多工具,总有一个适合你吧。

文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文吃透 CSS Flex 布局

原文链接:一文吃透 CSS Flex 布局 教学游戏 这里有两个小游戏,可用来练习 flex 布局。 塔防游戏 送小青蛙回家 Flexbox 概述 Flexbox 布局也叫 Flex 布局,弹性盒子布局。 它决定了元素如何在页面上排列,使它们能在不同的屏幕…

Mysql索引、事务以及存储引擎

目录 一、索引 1.概述 2.作用 3.索引的缺点 4.创建索引的原则依据 5.索引分类和创建 5.1普通索引 5.2唯一索引 5.3主键索引 5.4组合索引(单列索引与多列索引) 5.5全文索引(FULLTEXT) 6.查看索引 7.删除索引 二、事务…

测试必会技能之接口性能测试方案你会不会写?

目录 一、 性能测试术语解释 二、 性能测试方法及目标 三、 性能需求分析 四、 性能测试范围 五、 并发数计算方法 六、 性能测试用例与场景 七、 性能测试工具选择 八、 性能测试结果分析 九、 性能测试通过标准 总结: 一、 性能测试术语解释 …

腾讯云服务器可用区什么意思?

腾讯云服务器可用区什么意思?可用区(Zone)是指腾讯云在同一地域内电力和网络互相独立的物理数据中心,一个可用区故障不会影响另一个可用区的正常运行,所以可用区用于构建高容灾、高可靠性应用。腾讯云服务器网来详细说…

java为什么不支持多继承

Java为什么不支持多继承 前面我们提到过“继承则好比武侠中的传承血脉,子类可以继承父类的属性和方法,并且可以根据需要进行自我扩展,这样就不用从头造轮子,提高了代码的重用性和可维护性。”,在java中支持接口实现多继…

龙芯电脑(LoongArch)如何升级BIOS(UEFI固件)

龙芯UEFI 获取地址(包括3A5000 台式机,笔记本,3C5000 服务器): gitee: https://gitee.com/loongson/Firmware github: https://github.com/loongson/Firmware 根据自身机型选择相应的固件(Image目录有相…

第七章——微分方程

注://之后的都是注释,不是过程。 一、求常系数线性齐次微分方程的通解 1.一般形式:ypyqy0。 2.齐次:“齐次”的含义就是次数相等,ypyqy0都是一次幂,所以是齐次线性微分方程,如果说加上一个常…

有理函数积分

有理函数积分,一共分为三步: ①有理函数拆分 ②求待定系数 ③积分 一、有理函数拆分 有理函数拆分就是需要把被积函数拆开成若干项简单真分式相加。 (真分式:分子最高次幂<分母最高次幂) 简单真分式&#x…

自定义注解实现数据脱敏

自定义注解实现数据脱敏 在实际开发中经常会遇到有一些信息不能全部展示用户,需要隐藏(可以叫脱敏)一部分的情况比如地址,电话,手机号,身份证等。 脱敏的做法目前我知道的方法有: 1)…

JMeter 性能测试基本过程及示例,希望可以帮到你

目录 jmeter 为性能测试提供了一下特色: 基本过程 总结 jmeter 为性能测试提供了一下特色: jmeter 可以对测试静态资源(例如 js、html 等)以及动态资源(例如 php、jsp、ajax 等等)进行性能测试 jmeter 可…

(CVPR-2014)DeepPose:通过深度神经网络进行人体姿态估计

DeepPose:通过深度神经网络进行人体姿态估计 论文题目:DeepPose: Human Pose Estimation via Deep Neural Networks 论文是谷歌发表在CVPR 2014的工作 论文地址 Abstract 我们提出了一种基于深度神经网络 (DNN) 的人体姿态估计方法。姿势估计被表述为基…

202318读书笔记|《芭蕉·芜村·一茶:俳句三圣新译300》——樱花——让一整个春夜亮起来!

202318读书笔记|《芭蕉芜村一茶:俳句三圣新译300》——樱花——让一整个春夜亮起来! 《芭蕉芜村一茶:俳句三圣新译300》诗歌,词,短歌,俳句我都喜欢,读起来轻松明快! 松尾…

【代码实验】YOLO V7利用pycocotools进行评估时的一些问题

文章目录 一、无法使用pycocotools进行评估二、使用pycocotools计算的结果与YOLO自身的mAP差异较大的原因 一、无法使用pycocotools进行评估 yolov7有自己的计算mAP方式,但是在使用pycocotools进行test时,出现了pycocotools unable to run: Results do …

Java关键词synchronized

目录 一、通过卖票系统观察多线程的安全隐患 二、synchronized的基本知识 1.使用synchronized的原因 2.synchronized的作用 3.synchronized的基本格式 a.synchronized加在方法名前 b.synchronized用在方法中 4. Java锁机制 5.synchronized注意事项 三、使用synchronize…

【可变参数列表如何可变?】

可变参数列表 本章重点 学会使用可变参数列表的使用与原理 函数传参补充知识 如果函数没有形式参数,仍然可以给函数传递参数。在c语言中,只要发生了函数调用并且传递了函数,必定形成临时变量。所谓的临时拷贝本质就是在栈帧内部形成的&#…

Tcl常用命令备忘录-基础篇

一、置换 1、变量置换 在Tcl中,$符号可以用来引用变量。变量置换可以用来将变量的值嵌入到代码中。例如: set name "Tom" puts "Hello, $name!"这个示例中,变量$name的值会在输出语句中被替换为"Tom"。 2…

腾讯云服务器镜像市场快速搭建WordPress博客网站教程

通过腾讯云服务器的镜像市场搭建WordPress网站非常简单,不需要手动配置WP所需的Web环境,一键即可安装WordPress博客,腾讯云百科使用腾讯云服务器通过镜像市场的WordPress镜像搭建WP网站教程: 目录 腾讯云服务器通过市场镜像安装…

SpringMvc拦截器和手写模拟SpringMvc工作流程源码详解

目录 1. SpringMvc简介 1.1 什么是MVC 1.2 什么是SpringMvc 1.3 SpringMvc 能干什么 1.4 SpringMvc 工作流程 2. SpringMvc拦截器和过滤器 2.1 拦截器 2.1.1 拦截器作用 2.1.2 拦截器和过滤器的区别 2.1.3 拦截器方法说明 2.1.4 多个拦截器执行顺序 2.1.5 自定义拦…

29 虚拟地址到物理地址的转换

前言 呵呵 这是 linux 中内存管理中很基础的一环 用户程序 操作的地址都是虚拟地址, 虚拟地址通过 mmu 转换为物理地址 用户程序 看到的地址都是一个完整的世界, 只有具体需要使用的时候 产生缺页中断, 然后 分配具体的物理页 这里 要说的就是 虚拟地址 到 物理地址 的转…

1001router6-react

文章目录 1 一级路由2 Navigate3 NavLink 自定义高亮样式4 useRoutes()5 嵌套路由6 路由传参6.1 传递params参数6.2 传递search参数6.3 传递state参数 7 编程式导航7.1 路由跳转7.2 前进、后退 8 钩子函数8.1 useInRouterContext()8.2 useNavigationType()8.3 useOutlet()8.4 u…