如何使用Python将.nii文件批量转换为.dcm格式?
时间: 2024-10-25 21:17:37 浏览: 95
在Python中,我们可以使用`nibabel`库读取`.nii`文件,并结合`pydicom`库将数据转换为`.dcm`格式。这里有一个简单的步骤指南:
1. 首先,安装所需的库:
```
pip install nibabel pydicom
```
2. 定义一个函数来处理单个`.nii`文件:
```python
def convert_nii_to_dcm(nii_path, output_path):
import nibabel as nib
import pydicom
# 读取nii文件
nifti_img = nib.load(nii_path)
# 获取数据和元数据
data = nifti_img.get_fdata()
affine = nifti_img.affine
metadata = nifti_img.header.copy()
# 创建一个新的DICOM Dataset对象
dcm_dataset = pydicom.Dataset()
for key in metadata.keys():
if key.startswith(('intent_code', 'intent_name')):
continue # DICOM不需要这部分信息
dcm_dataset[key] = metadata[key]
# 设置基本的DICOM属性
dcm_dataset.ImagePositionPatient = [metadata['pixdim'][1], metadata['pixdim'][2], metadata['pixdim'][3]]
dcm_dataset.SliceLocation = 0
dcm_dataset.Rows = data.shape[0]
dcm_dataset.Columns = data.shape[1]
dcm_dataset.PhotometricInterpretation = "MONOCHROME2"
# 将数据添加到DICOM Dataset中
dcm_dataset.PixelData = data.tobytes()
# 写入.dcm文件
with open(output_path, 'wb') as f:
dcm_dataset.save_as(f)
```
3. 批量转换文件,假设`input_dir`是`.nii`文件所在的目录,而`output_dir`是你想保存`.dcm`文件的地方:
```python
input_dir = 'path/to/nii/files'
output_dir = 'path/to/output/dcm/files'
import os
from glob import iglob
# 检查输出目录是否存在并创建它,如果不存在的话
os.makedirs(output_dir, exist_ok=True)
# 列出.nii文件
nii_files = iglob(os.path.join(input_dir, '*.nii'))
for nii_file in nii_files:
base_name = os.path.basename(nii_file)
dcm_output_path = os.path.join(output_dir, os.path.splitext(base_name)[0] + '.dcm')
convert_nii_to_dcm(nii_file, dcm_output_path)
```
阅读全文