dicom格式转成nii.gz文件

该代码段展示了一个Python脚本,它利用Monai库将DICOM格式的口腔图像数据转换为NII格式。脚本首先检查指定目录下是否存在DCM文件,然后应用一系列图像处理变换,包括加载、重新定向和添加通道,最后保存为NII格式,并将文件移动到目标目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*-coding:utf-8-*-
import glob
import os
import shutil
from tqdm import tqdm

import monai
from monai.transforms import LoadImage, Compose, LoadImaged, Orientationd, EnsureChannelFirstd, SaveImage, AddChanneld, \
    AddChannel

data_dir = r'D:\Caiyimin\Dicom_data\Oral_image_root\KaWaAndSenTianOrg'
nii_save_path = r'D:\Caiyimin\Dicom_data\Oral_image_root\NiiFormat'


def has_dcm_files(path):
    for _, _, files in os.walk(path):
        if len(files) == 0:
            return False
        else:
            return True


transform = Compose(
    LoadImaged(keys=['image'], meta_keys='info'),
    Orientationd(keys=["image"], axcodes='LPS'),
)


def convert2nii():
    for root, dirs, _ in os.walk(data_dir):
        for (i, dir) in enumerate(tqdm(dirs)):
            abs_dir = os.path.join(root, dir)
            key = {"image": abs_dir}
            info = transform(key)
            img = info['image']
            img = AddChannel()(img)
            saver = SaveImage(output_dir=nii_save_path, mode='bilinear', output_postfix='')
            meta_data = info['info']
            saver(img, meta_data=meta_data)

            # 将保存文件移到上一个目录中
            nii_files = glob.glob(os.path.join(nii_save_path, dir, '*.nii.gz'))
            for file in nii_files:
                file_name = file.split('\\')[-1]
                shutil.move(file, os.path.join(nii_save_path, file_name))
                shutil.rmtree(os.path.join(nii_save_path, dir))


convert2nii()

### 将 DICOM 文件换为 NIfTI (.nii.gz) 的方法 #### 使用 dicom2nifti 工具 `dicom2nifti` 是一种专门用于将 DICOM 数据换为 NIfTI 格式的工具。它支持命令行操作以及 Python API 接口。通过该工具可以轻松实现从 DICOM 到压缩的 `.nii.gz` 文件换。 以下是基于 `dicom2nifti` 命令行工具的操作方式: ```bash dicom2nifti /path/to/dicom_directory /path/to/output_nifti_file.nii.gz ``` 上述命令会读取指定路径下的所有 DICOM 文件并将其保存为目标 NIfTI 文件,同时自动应用 gzip 压缩[^1]。 如果希望通过 Python 编程完成此过程,则可按照如下代码执行: ```python import os import dicom2nifti # 定义输入和输出路径 input_dicom_dir = "/path/to/dicom_directory" output_nifti_file = "/path/to/output_nifti_file.nii.gz" # 执行dicom2nifti.convert_directory(input_dicom_dir, output_nifti_file) ``` 这段脚本利用了 `dicom2nifti` 提供的 Python 函数接口来处理数据换任务。 #### 使用 PyDicom 和 NiBabel 库组合 另一种常见的方式是结合使用 `PyDicom` 和 `NiBabel` 这两个库来进行更灵活的数据预处理与格式换工作。这种方法允许开发者自定义更多细节参数设置。 下面是一个简单的例子展示如何加载多个切片并将它们存储成单个 nii.gz 文件形式: ```python import pydicom from nibabel.nifti1 import Nifti1Image import numpy as np import nibabel as nib import os def load_scan(path): slices = [] for s in os.listdir(path): if s.endswith(".dcm"): slices.append(pydicom.read_file(os.path.join(path, s))) slices.sort(key=lambda x: float(x.ImagePositionPatient[2])) return slices def get_pixels_hu(scans): image = np.stack([s.pixel_array for s in scans]) intercept = scans[0].RescaleIntercept slope = scans[0].RescaleSlope if slope != 1: image = slope * image.astype(np.float64) image = image.astype(np.int16) image += np.int16(intercept) return np.array(image, dtype=np.int16) if __name__ == "__main__": input_path = '/path/to/dicom_directory' dcm_files = load_scan(input_path) hu_images = get_pixels_hu(dcm_files) affine_matrix = [[0,-1,0,dcm_files[0].ImagePositionPatient[0]], [1,0,0,dcm_files[0].ImagePositionPatient[1]], [0,0,-1,dcm_files[0].ImagePositionPatient[2]], [0,0,0,1]] img = Nifti1Image(hu_images, np.linalg.inv(affine_matrix)) nib.save(img,'/path/to/save_as.nii.gz') ``` 以上程序片段展示了如何手动解析一系列 DICOM 图像,并构建相应的三维矩阵结构再导出至标准 NIfTI 格式文件中去[^2]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值