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)

运行结果为:

DICOM (Digital Imaging and Communications in Medicine) 文件通常用于存储医学影像数据,而NIFTI (Neuroimaging Informatics Technology Initiative) 是一种常用的神经影像学文件格式。要将DICOM文件转换为NIFTI文件,你可以使用一些专门的软件工具或编程库,如: 1. **FSL (FMRIB Software Library)** - 这是一个流行的开源软件包,其中包含`fslreorient2std`命令可以处理并转换 DICOM 到 NIFTI 格式。使用它需要先安装FSL,并对命令行操作有一定的了解。 ```sh fslreorient2std input.dcm output.nii.gz ``` 2. **ANTs (Advanced Normalization Tools)** - ANTs也提供了一个名为`antsConvert`的工具,用于转换多种格式,包括DICOM到NIFTI。 ```sh antsConvert input.dcm output.nii.gz ``` 3. **Python 库** - 例如 `nipype` 或 `pydicom` 和 `nibabel` 的结合,可以编写 Python 脚本来自动化这个过程。首先读取 DICOM 文件,然后通过 `nibabel` 将其保存为 NIFTI。 ```python import pydicom import nibabel as nib dcm_data = pydicom.read_file('input.dcm') img_array = dcm_data.pixel_array nifti_img = nib.Nifti1Image(img_array, dcm_data.affine) nib.save(nifti_img, 'output.nii.gz') ``` 记得替换上述命令中的`input.dcm`和`output.nii.gz`为实际的文件路径。如果你需要批量转换大量文件,可能会选择脚本化处理或者使用专门的转换工具。执行前确保你已经获得了必要的权限,因为医疗图像处理通常涉及敏感信息的管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值