一般我会用simpleitk来读取dicom文件,主要是为了将dicom文件转换为numpy矩阵,便于输入神经网络,读取dicom文件可分为两种状况,一.单独的dicom文件 二.一系列dicom文件,前者只是一张切片,一般是X光片,后者是不少张切片,合在一块儿一般表明CT图像。网络
一.spa
读取dicom文件code
file = sitk.ReadImage(filepath)
获取基本信息,大小,像素间距,坐标原点,方向blog
file.GetSize() file.GetOrigin() file.GetSpacing() file.GetDirection()
输出信息相似下面这样索引
还能够获取不少其它信息,这些信息以字典的形式存储,称为元数据ci
上面是字典的键,具体为何是这种形式,还不太清楚it
字典的值形式以下io
上面输出的只是一小部分信息,利用microDicom软件打开一个dicom文件,能够看到详细的元信息class
固然,最最重要的仍是像素矩阵,这是咱们用来训练模型的原料啊bfc
pixel_array = sitk.GetArrayFromImage(file)#这个file是以前读取出来的文件
二.
读取dicom序列
reader = sitk.ImageSeriesReader() reader.MetaDataDictionaryArrayUpdateOn()#这一步是加载公开的元信息 reader.LoadPrivateTagsOn()#这一步是加载私有的元信息 series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(directorypath)#根据文件夹获取序列ID,一个文件夹里面一般是一个病人的全部切片,会分为好几个序列 dicom_names = reader.GetGDCMSeriesFileNames( directorypath,series_ID)#选取其中一个序列ID,得到该序列的若干文件名 reader.SetFileNames(dicom_names)#设置文件名 image3D = reader.Execute()#读取dicom序列
image3D是一个三维矩阵,也就是说是一个三维的立体的数据,能够像读取一张切片同样,读取它的原点,像素间隔,方向,等基本信息
可是元信息的读取,不能经过image3D自己,要经过reader
reader.GetMetaDataKeys(slice_index) reader.GetMetaData(slice_index,key)
经过切片的索引来读取属于该切片的键,而后经过切片索引与键获取相应的值,这里的键值对与单张切片的形式同样