def crop_ROI_data_by_label(imgs, labs, outputdir, lab_id,zscore=False): # 裁剪数据 crop_img_dir=outputdir+"/crop/img" mkdir_if_not_exist(crop_img_dir) crop_lab_dir=outputdir+"/crop/lab" mkdir_if_not_exist(crop_lab_dir) crop_img_lab(imgs, labs, crop_img_dir, crop_lab_dir, lab_id) #rot数据 imgs=sort_glob(crop_img_dir+"/*.nii.gz") labs=sort_glob(crop_lab_dir+"/*.nii.gz") rot_img_dir=outputdir+"/rot/img/" mkdir_if_not_exist(rot_img_dir) rot_lab_dir=outputdir+"/rot/lab/" mkdir_if_not_exist(rot_lab_dir) rotate_img_to_same_direction(imgs,labs,rot_img_dir,rot_lab_dir) #resize数据 imgs=sort_glob(rot_img_dir+"/*.nii.gz") labs=sort_glob(rot_lab_dir+"/*.nii.gz") rez_img_dir=outputdir+"/rez/img/" mkdir_if_not_exist(rez_img_dir) rez_lab_dir=outputdir+"/rez/lab/" mkdir_if_not_exist(rez_lab_dir) resize_img_lab(imgs,labs,rez_img_dir,rez_lab_dir,zscore)
def prepare_unsupervised_reg_data(args): if not os.path.exists(args.dataset_dir): mk_or_cleardir(args.dataset_dir) types=parse_arg_list(args.mode) for t in types: imgs=sort_glob("../../dataset/%s/%s-image/*.nii.gz" % (args.task,t)) labs=sort_glob("../../dataset/%s/%s-label/*.nii.gz" % (args.task,t)) crop_ROI_data_by_label(imgs, labs, args.dataset_dir + "/%s/"%(t), args.component)
def prepare_crossvalidation_reg_data(args): if not os.path.exists(args.dataset_dir): mk_or_cleardir(args.dataset_dir) imgs=sort_glob("../../dataset/%s/%s-image/*.nii.gz" % (args.task,args.Tatlas)) labs=sort_glob("../../dataset/%s/%s-label/*.nii.gz" % (args.task,args.Tatlas)) crop_ROI_data_by_label(imgs, labs, args.dataset_dir + "/atlas/", args.component) ##### imgs=sort_glob("../../dataset/%s/%s-image/*.nii.gz" % (args.task,args.Ttarget)) labs=sort_glob("../../dataset/%s/%s-label/*.nii.gz" % (args.task,args.Ttarget)) crop_ROI_data_by_label(imgs, labs, args.dataset_dir + "/target/", args.component)
def get_file(self): if self.is_train==False: sample_dir=self.data_samples[self.index] self.index=(self.index+1)%self.len else: sample_dir = self.data_samples[np.random.randint(len(self.data_samples))] atlases_imgs=(sort_glob(sample_dir + "/*mv_img*.nii.gz")) atlases_labs=(sort_glob(sample_dir + "/*mv_lab*.nii.gz")) fix_imgs=(sort_glob(sample_dir + "/*fix_img*.nii.gz")) fix_labs=(sort_glob(sample_dir + "/*fix_lab*.nii.gz")) return fix_imgs,fix_labs,atlases_imgs,atlases_labs
def __init__(self,args,type): self.args = args if type=='train': self.data_samples = sort_glob(self.args.dataset_dir + "/train_fusion_atlas_target/*/") self.is_train=True elif type=='validate': self.data_samples = sort_glob(self.args.dataset_dir + "/atlas_target/*/") self.is_train=False # elif type == 'test': # self.data_samples = sort_glob(self.args.dataset_dir + "/test/*/") # self.is_train = False else: print('unsupport type') exit('-999') self.index=0 self.len=len(self.data_samples)
def post_process(args): base_ref_dir = args.dataset_dir + "/test_target/" # target_dir=args.test_dir #测试 # target_dir=args.dataset_dir+"/test_target/rez/lab/" target_dirs = sort_glob(args.test_dir + "/atlas_wise/*") for target_dir in target_dirs: paste_lab_to_ori_space(args, base_ref_dir, target_dir)
def generator_ROI_data(args,type='MMWHS'): #### imgs=sort_glob("../../dataset/%s/%s-image/*.nii.gz" % (type,args.Tatlas)) labs=sort_glob("../../dataset/%s/%s-label/*.nii.gz" % (type,args.Tatlas)) crop_ROI_data_by_label(imgs[:20], labs[:20], args.dataset_dir + "/train_atlas/", args.component) # imgs=sort_glob("../../dataset/MMWHS/" + "/%s-image/*.nii.gz" % (args.Tatlas)) # labs=sort_glob("../../dataset/MMWHS/" + "/%s-label/*.nii.gz" % (args.Tatlas)) # prepare_data(imgs[12:16],labs[12:16],args.dataset_dir+"/train_fuse_atlas/",args.component) # imgs=sort_glob("../../dataset/MMWHS/" + "/%s-image/*.nii.gz" % (args.Tatlas)) # labs=sort_glob("../../dataset/MMWHS/" + "/%s-label/*.nii.gz" % (args.Tatlas)) # prepare_data(imgs[16:],labs[16:],args.dataset_dir+"/test_fuse_atlas/",args.component) ##### imgs=sort_glob("../../dataset/%s/%s-image/*.nii.gz" % (type,args.Ttarget)) labs=sort_glob("../../dataset/%s/%s-label/*.nii.gz" % (type,args.Ttarget)) crop_ROI_data_by_label(imgs[:20], labs[:20], args.dataset_dir + "/train_target/", args.component)
def __init__(self, args, is_train): self.args = args self.is_train = is_train self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/lab')) self.img_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/test_target/rez/img')) self.lab_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/test_target/rez/lab')) if len(self.img_mv) != len(self.lab_mv): print("error,number of image and lab not equal") exit(-900) self.num = len(self.img_mv) self.nb_pairs = len(self.img_fix) * len(self.img_mv) self.index = 0 self.len_mv = len(self.img_mv) self.len_fix = len(self.img_fix)
def generator_ROI_mask(args): labs=sort_glob("../../dataset/MMWHS/" + "/%s-test-label/*.nii.gz" % (args.Ttarget)) for p_lab in labs: lab = sitk.ReadImage(p_lab) bbox = get_bounding_box_by_id(sitk.GetArrayFromImage(lab), padding=10,id=None) # sitk.RegionOfInterest(lab,) # crop_lab = crop_by_bbox(lab, bbox) array_lab=sitk.GetArrayFromImage(lab) array_lab[0:,0:,0:]=0 array_lab[bbox[0].start:bbox[0].stop + 1, bbox[1].start:bbox[1].stop + 1,bbox[2].start:bbox[2].stop + 1 ]=1 sitk_write_lab(array_lab,parameter_img=lab,dir='../../dataset/MMWHS'+"/%s-label-test_ROI/"%(args.Ttarget),name=get_name_wo_suffix(p_lab))
def __init__(self, args, type): self.args = args validation_size=5 mode=parse_arg_list(args.mode) if type == 'train': self.is_train = True self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/img'%(mode[0]))) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/lab'%(mode[0]))) # 所有的数据 self.img_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/img'%(mode[1]))) self.lab_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/lab'%(mode[1]))) if len(self.img_fix) > 0: del self.img_fix[(args.fold - 1) * validation_size:(args.fold - 1) * validation_size + validation_size] del self.lab_fix[(args.fold - 1) * validation_size:(args.fold - 1) * validation_size + validation_size] if len(self.img_mv) > 0: del self.img_mv[(args.fold - 1) * validation_size:(args.fold - 1) * validation_size + validation_size] del self.lab_mv[(args.fold - 1) * validation_size:(args.fold - 1) * validation_size + validation_size] elif type == 'validate': self.is_train = False self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/img'%(mode[0]))) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/lab'%(mode[0]))) self.img_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/img'%(mode[1]))) self.lab_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/%s/rez/lab'%(mode[1]))) if len(self.img_fix)>0: self.img_fix=[self.img_fix[i] for i in range((args.fold-1)*validation_size,(args.fold-1)*validation_size+validation_size)] self.lab_fix=[self.lab_fix[i] for i in range((args.fold-1)*validation_size,(args.fold-1)*validation_size+validation_size)] if len(self.img_mv)>0: self.img_mv=[self.img_mv[i] for i in range((args.fold-1)*validation_size,(args.fold-1)*validation_size+validation_size)] self.lab_mv=[self.lab_mv[i] for i in range((args.fold-1)*validation_size,(args.fold-1)*validation_size+validation_size)] else: print("not support gen sampler type") exit(-900) if len(self.img_mv)!=len(self.lab_mv): print("error,number of image and lab not equal") exit(-900) self.num=len(self.img_mv) self.nb_pairs=len(self.img_fix)*len(self.img_mv) self.len_fix=len(self.img_fix) self.len_mv=len(self.img_mv) self.index=0
def generator_ROI_data_for_3DUnet(args): imgs=sort_glob("../../dataset/MMWHS/" + "/%s-image/*.nii.gz" % (args.Ttarget)) labs=sort_glob("../../dataset/MMWHS/" + "/%s-label/*.nii.gz" % (args.Ttarget)) crop_ROI_data_by_label(imgs[:12], labs[:12], args.dataset_dir + "/train_target/", args.component) imgs=sort_glob("../../dataset/MMWHS/" + "/%s-image/*.nii.gz" % (args.Ttarget)) labs=sort_glob("../../dataset/MMWHS/" + "/%s-label/*.nii.gz" % (args.Ttarget)) crop_ROI_data_by_label(imgs[16:], labs[16:], args.dataset_dir + "/validate_target/", args.component) imgs=sort_glob("../../dataset/MMWHS/" + "/%s-test-image/*.nii.gz" % (args.Ttarget)) labs=sort_glob("../../dataset/MMWHS/" + "/%s-test-label/*.nii.gz" % (args.Ttarget)) crop_ROI_data_by_label(imgs, labs, args.dataset_dir + "/test_target/", args.component)
def paste_lab_to_ori_space(args, base_ref_dir, target_dir): print("processing:" + os.path.dirname(target_dir)) base_dir = (target_dir) refs = sort_glob(base_ref_dir + "/rot/img/*.nii.gz") tgts = sort_glob(target_dir + "/*label.nii.gz") output_dir_de_rez = base_dir + "_deRez" de_resize(refs, tgts, output_dir_de_rez) refs = sort_glob(base_ref_dir + "/crop/img/*.nii.gz") tgts = sort_glob(output_dir_de_rez + "/*.nii.gz") output_dir_de_rot = base_dir + "_deRot" de_rotate(refs, tgts, output_dir_de_rot) refs = sort_glob("../../dataset/MMWHS/%s-test-image" % (args.Ttarget) + "/*.nii.gz") tgts = sort_glob(output_dir_de_rot + "/*.nii.gz") output_dir_de_crop = base_dir + "_deCrop" de_crop(refs, tgts, output_dir_de_crop, args.component)
def __init__(self,args,type): self.args=args if type=='train': self.is_train=True self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir +'/train_atlas/rez/lab' )) #所有的数据 self.img_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/img')) self.lab_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/lab')) del self.img_mv[(args.fold-1)*5:(args.fold-1)*5+5] del self.lab_mv[(args.fold-1)*5:(args.fold-1)*5+5] del self.img_fix[(args.fold-1)*5:(args.fold-1)*5+5] del self.lab_fix[(args.fold-1)*5:(args.fold-1)*5+5] #for similarity del self.img_mv[-4:] del self.lab_mv[-4:] del self.img_fix[-4:] del self.lab_fix[-4:] elif type == 'validate': self.is_train = False self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir +'/train_atlas/rez/lab' )) #所有的数据 self.img_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/img')) self.lab_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/lab')) #validation del self.img_mv[(args.fold-1)*5:(args.fold-1)*5+5] del self.lab_mv[(args.fold-1)*5:(args.fold-1)*5+5] del self.img_mv[-4:] del self.lab_mv[-4:] self.img_fix = [self.img_fix[i] for i in range((args.fold - 1) * 5, (args.fold - 1) * 5 + 5)] self.lab_fix = [self.lab_fix[i] for i in range((args.fold - 1) * 5, (args.fold - 1) * 5 + 5)] elif type == 'gen_fusion_train': self.is_train = True self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir +'/train_atlas/rez/lab' )) #所有的数据 self.img_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/img')) self.lab_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/lab')) del self.img_mv[(args.fold-1)*5:(args.fold-1)*5+5] del self.lab_mv[(args.fold-1)*5:(args.fold-1)*5+5] del self.img_fix[(args.fold-1)*5:(args.fold-1)*5+5] del self.lab_fix[(args.fold-1)*5:(args.fold-1)*5+5] else: print("not support gen sampler type") exit(-900) if len(self.img_mv)!=len(self.lab_mv): print("error,number of image and lab not equal") exit(-900) self.num=len(self.img_mv) self.nb_pairs=len(self.img_fix)*len(self.img_mv) self.len_fix=len(self.img_fix) self.len_mv=len(self.img_mv) self.index=0
image_array = cv2.cvtColor(image_array, cv2.COLOR_GRAY2BGR) contours, hierarchy = cv2.findContours(gt_array, cv2.RETR_TREE, cv2.CHAIN_APPROX_TC89_L1) contours2, hierarchy2 = cv2.findContours(pred_array, cv2.RETR_TREE, cv2.CHAIN_APPROX_TC89_L1) cv2.drawContours(image_array, contours, -1, (0, 0, 255), 1) cv2.drawContours(image_array, contours2, -1, (255, 0, 0), 1) image_array = np.flip(image_array, 0) # image_array=cv2.resize(image_array,(256,256),cv2.INTER_LANCZOS4) cv2.imshow("liver_contour", image_array) cv2.waitKey() out_path = os.path.join( os.path.dirname(pred_label), "%s-%d.png" % (os.path.basename(pred_label), slice)) cv2.imwrite(out_path, image_array) ''' ''' if __name__ == '__main__': pred_labels = sort_glob( r'E:\homework\cmmas-tmi\img\registration\ct-mr-1\*' + "\*label*.nii.gz") target_label = r"E:\homework\cmmas-tmi\img\registration\ct-mr-1\8_mr_target_label.nii.gz" target_img = r"E:\homework\cmmas-tmi\img\registration\ct-mr-1\8_mr_target_image.nii.gz" for lab in pred_labels: drawContour(target_img, target_label, lab)
def __init__(self, args, type='train_sim'): self.args = args if type == 'train_sim': self.is_train = False self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/lab')) self.img_fix = sort_glob( '{}/*.*'.format(args.dataset_dir + '/train_fuse_target/rez/img')) self.lab_fix = sort_glob( '{}/*.*'.format(args.dataset_dir + '/train_fuse_target/rez/lab')) elif type == 'fusion': self.is_train = True self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/lab')) self.img_fix = sort_glob( '{}/*.*'.format(args.dataset_dir + '/train_fuse_target/rez/img')) self.lab_fix = sort_glob( '{}/*.*'.format(args.dataset_dir + '/train_fuse_target/rez/lab')) #训练融合的代码的时候,把fuse和train_target一起放入进去 # self.img_fix_add = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/img')) # self.lab_fix_add = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_target/rez/lab')) # self.img_fix=self.img_fix+self.img_fix_add # self.lab_fix=self.lab_fix+self.lab_fix_add elif type == 'test': self.is_train = False self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/lab')) self.img_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/test_target/rez/img')) self.lab_fix = sort_glob('{}/*.*'.format(args.dataset_dir + '/test_target/rez/lab')) elif type == 'validate': self.is_train = False self.img_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/img')) self.lab_mv = sort_glob('{}/*.*'.format(args.dataset_dir + '/train_atlas/rez/lab')) self.img_fix = sort_glob( '{}/*.*'.format(args.dataset_dir + '/validate_target/rez/img')) self.lab_fix = sort_glob( '{}/*.*'.format(args.dataset_dir + '/validate_target/rez/lab')) else: print("not support gen sampler type") exit(-900) if len(self.img_mv) != len(self.lab_mv): print("error,number of image and lab not equal") exit(-900) self.num = len(self.img_mv) self.nb_pairs = len(self.img_fix) * len(self.img_mv) self.index = 0 self.len_mv = len(self.img_mv) self.len_fix = len(self.img_fix)
for img_dir, lab_dir in zip(image_dirs, lab_dirs): # files=sort_glob(img_dir+"\\*") img = sitk_read_dico_series(img_dir) lab = read_png_seriesV2(lab_dir) sitk_write_image(img, dir=output + "//%s-image//" % (type), name=img_dir.split('\\')[-2] + "_%s_image" % (type)) sitk_write_lab(lab, parameter_img=img, dir=output + "//%s-label//" % (type), name=lab_dir.split('\\')[-2] + "_%s_label" % (type)) if __name__ == "__main__": image_dirs = sort_glob( 'E:\\consistent_workspace\\dataset\\Ori_CHOAS\\CHAOS_Train_Sets\\Train_Sets\\CT\\*\\DICOM_anon' ) lab_dirs = sort_glob( 'E:\\consistent_workspace\\dataset\\Ori_CHOAS\\CHAOS_Train_Sets\\Train_Sets\\CT\\*\\Ground' ) generate_3dCT(image_dirs, lab_dirs, 'ct') image_dirs = sort_glob( 'E:\\consistent_workspace\\dataset\\Ori_CHOAS\\CHAOS_Train_Sets\\Train_Sets\\MR\\*\\T1DUAL\\DICOM_anon\\InPhase' ) lab_dirs = sort_glob( 'E:\\consistent_workspace\\dataset\\Ori_CHOAS\\CHAOS_Train_Sets\\Train_Sets\\MR\\*\\T1DUAL\\Ground' ) generate_3dMR(image_dirs, lab_dirs, 't1_in_DUAL_mr') image_dirs = sort_glob(