医学图像Dicom(.dcm)转换为NIFTI(.nii)格式
⽂章⽬录
前⾔
NIfTI 中的图像原始数据⼀般被存储成了三维图像,⽽dicom存储为⼆维图层,所以相对于DICOM⽂件,NIFTI⽂件更加易⽤于机器学习,因为NIfTI 是三维图像,处理⼀个单独的NIfTI ⽂件要⽐处理成百上千个DICOM⽂件更加容易⼀些。
医学图像格式
DICOM 和 NIFTI 是最常⽤的格式,下⾯对其进⾏简单介绍。
DICOM
DICOM 代表的是医疗数字成像和通信。DICOM 是由美国国家电⽓制造商协会(NEMA)制定的标准。它定义了医疗成像领域中关于信息处理、存储、打印以及传输的标准,这些都是你在扫描仪或者某家医院的图⽚归档和通信系统(PACS)能够⽴即得到的⽂件格式。
它包括了⽂件格式和能够接收图像以及 DICOM 格式的病⼈数据的实体之间使⽤ TCP/IP 进⾏通信的协议。
⼀个 DICOM ⽂件包含⽂件头部和同⽂件名的*.dcm 图像数据。⽂件头部的⼤⼩取决于它所提供的信息的多少。⽂件头包含以下信息:病⼈的 ID,病⼈的姓名,图像的模态以及其他信息。它定义了帧的数量以及图像的精度。这些信息会被图像浏览器在显⽰图像时⽤到。对于⼀个图像采样,会有很多个 DICOM ⽂件。
NIFTI
Nifti 格式最初是为神经影像学发明的。神经影像信息学技术计划(NIFTI)将 NIfTI 格式预设为 ANALYZE7.5 格式的替代品。它最初的应⽤领域是神经影像,但是也被⽤在其他领域。这种格式的主要特点就是它包含两个能够将每个体素的索引(i,j,k)和它的空间位置(x,y,z)关联起来的仿射坐标。
python代码
import numpy as np
import nibabel as nib
getsavefilenameimport os
import pandas as pd
import SimpleITK as sitk
import matplotlib.pyplot as plt
def dcm2nii_sitk(path_read, path_save):
reader = sitk.ImageSeriesReader()
seriesIDs = reader.GetGDCMSeriesIDs(path_read)
N =len(seriesIDs)
lens = np.zeros([N])
for i in range(N):
dicom_names = reader.GetGDCMSeriesFileNames(path_read, seriesIDs[i])
lens[i]=len(dicom_names)
N_MAX = np.argmax(lens)
dicom_names = reader.GetGDCMSeriesFileNames(path_read, seriesIDs[N_MAX]) reader.SetFileNames(dicom_names)
image = reader.Execute()
if not ists(path_save):
os.mkdir(path_save)
sitk.WriteImage(image, path_save+'/')
DICOMpath = r"F:\Dicomdataset"//dicom⽂件夹路径
Midpath = r"F:\middataset"//处理中间数据路径
Resultpath = r"F:\result"//保存路径
cases = os.listdir(DICOMpath)//获取dicom⽂件夹路径⼦⽂件夹名
for c in cases://遍历dicom⽂件夹路径⼦⽂件
path_mid =join(DICOMpath , c)//获取dicom⽂件夹下每⼀套数据的路径
dcm2nii_sitk(path_mid , Midpath )//将dicom转换为nii,并保存在Midpath中
//重新对保存后的nii⽂件名进⾏命名,并复制到Resultpath下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论