dcm2niix批量将dicom文件转换为nii文件(Python)

部署运行你感兴趣的模型镜像

SPM 中 fMRI 的数据处理只接受多个单独的nii文件,但不知道为什么我的 SPM 中的 DICOM import 无法实现fMRI数据的转换(报错 No "Image Plane" information)。

dcm2niix 只支持多个 dicom 文件转换为一个 nii 文件(也可能是我没找到方法)。

后来发现如果将每个 dicom 文件分别放入单独的文件夹,再使用 dcm2niix 进行转换,就能实现每个 dicom 单独转换为 nii。于是写了 Python 代码实现这一过程。

文件目录如下所示:

data
├─function
│  ├─sub1
│  │  ├─dicom
│  │  └─output
│  └─sub2
└─func_out
    ├─sub1
    └─sub2

data 为保存所有数据的文件夹,function 为原始数据存放的文件夹,其中 dicom 存放待转换的dicom 数据,output 文件夹、func_out 文件夹目前为空。

第一个 Python 代码的目标是将放在同一个文件夹 dicom 下的多个dicom数据分别移入 output 文件夹中的子文件夹。其中 'files_dir', 'new_folders_dir', 'dcm_total' 需要根据存放的位置与dicom的总数修改。'file_name'需要根据自己 dicom 文件的命名规则更改。

import os

files_dir = 'D:\\MRI_data\\DATA_fMRI\\data\\function\\sub2\\dicom' # 原始数据的位置
new_folders_dir = 'D:\\MRI_data\\DATA_fMRI\\data\\function\\sub2\\output' # 输出的位置

# 创建新文件夹
os.makedirs(new_folders_dir, exist_ok=True)
dcm_total = 640 # files_dir中dcm文件的个数


for i in range(1, dcm_total + 1):
    # 创建新文件夹
    folder_name = os.path.join(new_folders_dir, str(i))
    os.makedirs(folder_name, exist_ok=True)
    
    # 移动文件
    file_name = str(i).zfill(8) + '.dcm'
    src = os.path.join(files_dir, file_name)
    dst = os.path.join(folder_name, file_name)
    
    if os.path.exists(src):
        os.rename(src, dst)
    else:
        print(f"文件 {file_name} 不存在")

print("文件移动完成")

运行的结果为:dicom文件夹为空,output文件夹如下:

其中每个文件夹内是移入的dicom文件。

以上代码运行成功后,可以运行第二个代码。

import os

d2n = 'D:\\Tools\\MRIcron\\Resources\\dcm2niix.exe -f ' # dcm2niix.exe 所在的位置
para = ' -i y -l y -p y -x y -v y -z n -o ' # 参数设置

output_path = "D:\\MRI_data\\DATA_fMRI\\data\\func_out\\sub2" 
filerootpath = 'D:\\MRI_data\\DATA_fMRI\\data\\function\\sub2\\output' # 上一段代码中的new_folders_dir变量
dcm_total = 640 # files_dir中dcm文件的个数


for i in range(1, dcm_total + 1):
	outputname = str(i).zfill(8)
	filepath = filerootpath + '\\' + str(i) + '\\' + str(i).zfill(8) + '.dcm'
	cmd = d2n + outputname + para +'\"'+ output_path +'\" ' + '\"'+ filepath +'\"' #其中的双引号不可少
	# print(cmd)
	os.system(cmd)

运行结果为:

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值