【医学影像处理】基于MRIcron的dcm2nii批量dcm转nii格式

news2025/1/31 2:47:18

MRIcron下载

MRIcron下载官网
选择适合自己环境的版本,我使用的是windows版本
Alt

MRIcron介绍

MRICron是一款用于处理磁共振成像(MRI)数据的免费开源软件工具。它是一个功能强大的图像处理程序,主要用于可视化、分析和处理医学影像数据别是MRI数据。界面如下:
在这里插入图片描述

除了查看医学图像,MRIcron也有将dcm格式转nii的功能并且支持图形界面转换命令行转换

图形界面如下:

点击import->convert DICOM to NIFTI进入图形界面
在这里插入图片描述
在这里插入图片描述

命令行使用

在window上,下载好MRIcron后,安装包的Resources目录下会有一个dcm2nii.exe程序,打开window命令行窗口(cmd),转到有dcm2nii.exe的路径下(必要)即可在命令行窗口使用dcm2nii命令,命令行如下:

dcm2niix.exe -f "outputfilename" -i y -l y -p y -x y -v y -z y -o "E:\datasets" "c:\DicomDir"

在这里插入图片描述
其中,"E:\datasets"是输入nii文件的目录,"c:\DicomDir"是输入dicom的目录,“outputfilename” 是输出nii.gz的文件名。

在Linux上需要先安装dcm2nii

sudo apt-get install dcm2niix

运行命令

dcm2niix -o /path/to/output_folder /path/to/dicom_folder

-o 用于指定输出文件夹。
/path/to/output_folder 是您希望保存NIfTI文件的文件夹路径。
/path/to/dicom_folder 是包含DICOM文件的文件夹路径。

使用dcm2nii.exe批量转换

1、生成路径txt文件
因为是要批量自动的处理文件,因此必须知道每个样本的路径,这里的路径如果是递归的存放在子文件下面的话,只需要读到第一个就行,比如从ADNI上下载的数据是使用子文件命名的形式存储患者信息,如图,我们只需要读到subjectID(就是ADNI的下一个路径)就行,并不需要读到I249535
在这里插入图片描述

# 当前目录下所有文件夹下的文件名(不带后缀)写入对应txt文件(以文件夹命名)中
import os

# 指定包含所有样本文件夹的根目录
root_folder = r"E:\ADNITest\EMCI\ADNI"  # 修改为你的根目录路径

# 指定保存路径的文本文件
output_txt_file = r"E:\ADNITest\EMCI\EMCI.txt"  # 修改为你希望保存路径的文本文件路径


# 打开文本文件以写入样本路径
with open(output_txt_file, "w") as f:
    # 遍历根目录下的所有样本文件夹
    for subject_folder in os.listdir(root_folder):
        subject_folder_path = os.path.join(root_folder, subject_folder)

        # 确保当前路径是一个目录
        if os.path.isdir(subject_folder_path):
            # 将样本文件夹的路径写入文本文件
            f.write(subject_folder_path + "\n")

2、批处理
在批处理之前,需要将dcm2nii.exe程序放到项目里面

import sys  # 导入sys模块
import os

d2n = 'dcm2niix.exe -f '
para = ' -i y -l y -p y -x y -v y -z y -o '
output_path = "E:\ADNITest\EMCI\EMCI"


# read txt
filepaths = []
for line in open("E:\ADNITest\EMCI\EMCI.txt", "r"):  # 设置文件对象并读取每一行文件
    filepaths.append(line)
# deal with format transform
for filepath in filepaths:
    filepath = filepath[:-1]  # 去掉行位的换行符
    outputname = filepath[22:] # 命名,这里直接从路径里面取,因为我的路径里面包含subjectID,需要根据实际情况调整
    # print(filepath[22:])
    # 运行cmd命令
    cmd = d2n + outputname + para + '\"' + output_path + '\" ' + '\"' + filepath + '\"'  # 其中的双引号不可少
    os.system(cmd)
print("Congratulation, Done!")

参考链接:https://blog.csdn.net/DragonGirI/article/details/104011541

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

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

相关文章

代码更换了目录,没有任何变更,但Idea编辑器却提示所有代码都变更了?

开发环境: springboot 2.4.3idea 2020 问题描述: 1、代码copy到U盘了,今天用idea打开U盘代码,却提示所有代码都被修改了 2、diff 文件看了,其实并没有任何修改,因为就算不小心误改了,也不能全…

36.树与二叉树练习(2)(王道第5章综合练习)

试题1(王道5.3.3节第16题): 设计算法将二叉树的叶结点按从左到右的顺序连成单链表,连接时使用叶结点的右指针域存放单链表指针。 借助遍历算法完成: //根据二叉树层次遍历序列构造单链表 void LevelOrdertoLinkList…

Qt事件传播机制 day8

Qt事件传播机制 day8 事件的接受和忽略 当空间忽略事件时,事件会继续往上传播,这里的传播指传播给父组件QEvent有accept()函数与ignore()函数 accept():本组件处理该事件,这个事件就不会被继续传播给其父组件ignore()&#xff1…

spring boot Rabbit高级教程

消息可靠性 生产者重试机制 首先第一种情况,就是生产者发送消息时,出现了网络故障,导致与MQ的连接中断。 为了解决这个问题,SpringAMQP提供的消息发送时的重试机制。即:当RabbitTemplate与MQ连接超时后,…

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-LSTM-Attention数据分类预测,运行环境Matlab2021b及以…

Marin说PCB之BGA焊盘削焊盘带来的焊接问题和解决办法

每周日上午10点钟都是小编最开心的时间了,这个点是斗破苍穹播出的时间。小编我从萧炎从这个动漫开播到现在都追了好多年了,强烈推荐喜欢这个小说的可以看这个动漫,拍的还不错,只是萧炎的配音不再是张沛老师了,有点可惜…

Python实验三

1:编程统计英文句子中的单词出现的次数。 要求:输出结果为按照单词在句子中出现的次数降序排列。 提示:用split()拆分字符串 # 1:编程统计英文句子中的单词出现的次数。 # 要求:输出结果为按照…

Java 继承与实现

一、继承(extends) 1.1 继承概念 继承是面向对象的基本特征,它允许子类继承父类的特征和行为,以提高代码的复用率和维护性等。下面一张图生动地展示了继承和类之间的关系: 继承图 上图中,“动物”、“食草…

【Vue面试题二十一】、Vue中的过滤器了解吗?过滤器的应用场景有哪些?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:Vue中的过滤器了解吗&am…

成为数据分析师要具备什么能力——功法篇(上)

这篇文章适合做了一段时间数据分析工作,开始思考怎么继续提升自己的分析师、运营或者是实习了一段时间的同学,这时的你也许会想几个问题: 为什么我做出来的分析总觉得没有别人的那么高级? 老板为什么总说我的分析“太浅了”&#…

spyder切换conda环境(成功测试)

今天第一次把这个anaconda中配套的spyder的切换环境尝试成功了,特地记录一下 首先明确一点我使用的最新的anaconda的版本是 spyder已经是版本5了,之前的4版本总是出现各种错误 Step1 切换python interpreter 环境是可以直接识别的,不需要…

2023-2024-1 for循环-1(15-38)

7-15 输出闰年 输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份,即每个年…

华为端到端战略管理体系(DSTE开发战略到执行)的运作日历图/逻辑图及DSTE三大子流程介绍

华为端到端战略管理体系(DSTE开发战略到执行)的运作日历图/逻辑图及DSTE三大子流程介绍 本文作者 | 谢宁,《华为战略管理法:DSTE实战体系》、《智慧研发管理》作者 添加图片注释,不超过 140 字(可选&#…

【VASP】KPOINTS文件介绍

【VASP】KPOINTS文件介绍 一、KPOINTS 的两种结构第一种结构:(非对称)第二种结构:(高对称) 二、关于KPOINTS设置的一些经验三、KPOINTS的选取 前言 一、4个常用的输入文件INCAR、POSCAR、POTCAR、KPOINTS I…

MySQL [基础]] 学习笔记

MySQL 学习 文章目录 MySQL 学习1. 数据库三层结构2. 数据在数据库中的存储方式3. SQL 语句分类3.1 备份恢复数据库的表 4. Mysql 常用数据类型(列类型)4.1 数值型(整数)的基本使用4.2 数值型(bit)的使用4.3 数值型(小数)的基本使用4.4 字符串的基本使用(面试题)4.5 字符串使用…

基于springboot实现心灵治愈心理健康平台系统项目【项目源码+论文说明】

基于springboot实现心灵心理健康平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个心灵治愈交流平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论…

Linux友人帐之编译器gcc/g++的使用

一、程序的翻译过程 在C语言中,我们已经学过程序的编译和链接,在这里将复习一下我们之前所学的内容并引出后续gcc/g的内容。 1.1程序的翻译过程 预处理(头文件展开,去注释,宏替换,条件编译)编…

解决:由于找不到 VCRUNTIME140_.dll,无法继续执行代码。重新安装程序可能会解决此问题

最近我在安装一个软件时,遇到过这样的问题“由于找不到 VCRUNTIME140 1.dll,无法继续执行代码。重新安装程序可能会解决此问题”。 要解决这个问题,你可以按照以下步骤进行操作: 1. 重新安装程序: 尝试重新安装使用…

Java NIO模型(提供代码示例)

目录 一、NIO特点介绍二、NIO代码实现2.1、客户端代码2.2、服务端代码 一、NIO特点介绍 NIO全称 java non-blocking IO。从JDK 1.4开始,java提供了一些列改进的输入/输出(I/O)的新特性,被称为NIO,是同步非阻塞的&…

蓝桥杯 常用STL (C++) 未完待续

动态数组 有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动。 这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。…