1.数据格式
在MRI数据不同序列下存放着dcm格式的数据,以及单个nii格式的mask文件,所以需要将data和label分离。
2.数据处理
使用 os库进行文件处理,用shutil库进行文件迁移
进行文件夹访问
os.listdir() 进行文件夹内多个文件到列表的转化
os.path.join() 将路径进行拼接,一般用在子文件夹的访问处理中
对于文件复制之前需要在目的位置建立文件夹
一般用 os.path.exists(目的文件夹名)
判断是否存在,如果不存在,使用 os.makedirs() 进行创建
最后 使用 shutil.move 将文件进行剪切,shutil库的copy函数则进行复制,源文件夹中该文件还存在
代码如下:
import os
import shutil
rootDir = r'D:\python\data\weihai\atypical meningioma\data'
root_list = os.listdir(rootDir)
for patient in root_list:
root_and_patName = os.path.join(rootDir,patient)
xulie = os.listdir(root_and_patName)
for xu in xulie:
origin_dir = os.path.join(root_and_patName,xu,xu+'.nii')
if os.path.exists(origin_dir):
target_dir = r'D:\python\data\weihai\atypical meningioma\label'
end_dir = os.path.join(target_dir,patient,xu)
if not os.path.exists(end_dir):
os.makedirs(end_dir)
shutil.move(origin_dir,end_dir)
3.dcm2nii
#coding=utf-8
import SimpleITK as sitk
import os
def dcm2nii(dcms_path, nii_path):
# 1.构建dicom序列文件阅读器,并执行(即将dicom序列文件“打包整合”)
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(dcms_path)
reader.SetFileNames(dicom_names)
image2 = reader.Execute()
# 2.将整合后的数据转为array,并获取dicom文件基本信息
image_array = sitk.GetArrayFromImage(image2) # z, y, x
origin = image2.GetOrigin() # x, y, z
spacing = image2.GetSpacing() # x, y, z
direction = image2.GetDirection() # x, y, z
# 3.将array转为img,并保存为.nii.gz
image3 = sitk.GetImageFromArray(image_array)
image3.SetSpacing(spacing)
image3.SetDirection(direction)
image3.SetOrigin(origin)
sitk.WriteImage(image3, os.path.join(nii_path,))
if __name__ == '__main__':
dcms_root_path = r'D:\python\data\weihai\atypical meningioma\data' # dicom序列文件所在路径
nii_path = r'D:\python\data\weihai\atypical meningioma\niidata' # 所需.nii.gz文件保存路径
patients = os.listdir(dcms_root_path)
for p in patients:
dcm_xulie_path = os.path.join(dcms_root_path,p)
xulie = os.listdir(dcm_xulie_path)
for xu in xulie:
dcm_path = os.path.join(dcm_xulie_path,xu)
save_path = os.path.join(nii_path,p)
if not os.path.exists(save_path):
os.makedirs(save_path)
dcm2nii(dcm_path, save_path+f'/{xu}.nii.gz')