如何将Dicom系列转换为一个Nifti文件(Python)

简介

在医学成像中,我们通常使用两种类型的图像,DicomNifti。但这两种类型的图像(或者说文件)之间是有区别的,因为它们比普通图像有更多的信息。这些信息存储在同一个文件中,Dicom 或是Nifti,我们可以使用称为标签的东西来调用它们,因此我们使用这些标签来返回我们想要的信息,例如患者 ID、姓名等。从这些信息中有一个名为pixel_data 数组的组件,它是一个包含我们可以可视化的像素值的数组,像素的尺寸(以防你想计算身体某个部分的面积,例如,肿瘤),像素的深度…

Dicom图像(或文件)是一个2D图像,尽管它有一个体积,但实际上,它是一个2D图像,因为它只是MRI、CT、TEP等图像的一个切片。

Nifti 文件包含一组 Dicom 图像。给你一个简单的例子,一个视频是一组帧,所以当我们把所有的帧放在一起并在每帧之间有一个延迟时,我们就会得到视频,所以在这里我们可以这样说Dicom 图像是帧,当我们将它们放在一起时,我们得到了 Nifti。

实现过程

要完成这项工作,你只需要使用python和名为“dicom2nifti”的库编写两行代码。

因此,在开始编写代码之前,我们需要使用pip安装程序安装库。pip install dicom2nifti

安装库之后,我们将编写两行代码,第一行是导入库,第二行是使用一个函数来完成所有的工作。

import dicom2nifti
path_one_patient = "patient01_0"
path_out_data = "TrainLabels"
dicom2nifti.dicom_series_to_nifti(path_one_patient, os.path.join(path_out_data, path_to_save_nifti_file))

通过使用这两行,您将得到一个卷文件。

注意:对于path_to_save_nifti_file,扩展名为".nii"的文件名。如果你想要一个压缩文件,然后你可以添加“.gz”。

转换多个Dicoms序列

因此,如果你有一个以上的病人(Dicom系列),那么你可以创建一个循环,在所有的病人中循环。它可以是这样的:

import dicom2nifti
import os
path_2_all_patients = "E:/all_patients"
patients_folders = os.listdir(path_2_all_patients)
path_out_data = "TrainLabels"

for i, patient in enumerate(patients_folder):
	dicom2nifti.dicom_series_to_nifti(os.path.join(path_2_all_patients, patient), os.path.join(path_out_data, str(i)+"_"+path_to_save_nifti_file))

解释说明

第一步是列出您拥有的所有患者,然后在循环中,我们将通过在每个步骤中更改患者的名称来调用相同的函数“dicom_series_to_nifti”。
恭喜!你会得到每个病人的nifti文件,你可以用它来训练一个深度学习模型或一些需要卷文件的东西。
要可视化创建的文件,你可以使用免费软件,如“ITK snap”或“Slicer 3D”。

参考目录

https://pycad.co/how-to-convert-a-dicom-series-into-one-nifti-file-python/

你可能感兴趣的:(医学图像,必备知识)