def getaveragedicescore2d(moving,fixed,parameter_file): #Calculates the average dice score per slice of registration #between all combinations of moving and fixed images #moving = array with patientnumbers of moving images #fixed = array with patientnumbers of fixed images DCscores = [0]*nrslices n = 0 for i in fixed: for j in moving: if i == j: continue register3d(i,j,parameter_file,runnr=runnr,verbose=False) transform3d(j,runnr,transformmask=True) transformed = findtransformedmask(runnr) fixed = findfixedmask3d(i) for k in range(nrslices): if sum(sum(x) for x in transformed[k])+sum(sum(x) for x in fixed[k]) == 0: DCscores[k] += 1 else: DCscores[k] += medpyDC(transformed[k],fixed[k]) n += 1 for i in range(nrslices): DCscores[i] = DCscores[i]/n output_dir = f'results{runnr}' shutil.rmtree(output_dir) return DCscores
def getaveragedicescore3d(moving,fixed,parameter_file): #Calculates the average dice score of registration #between all combinations of moving and fixed images #moving = array with patientnumbers of moving images #fixed = array with patientnumbers of fixed images DCscore = 0 n = 0 for i in fixed: for j in moving: if i == j: continue register3d(i,j,parameter_file,runnr=runnr,verbose=False) transform3d(j,runnr,transformmask=True) transformed = findtransformedmask(runnr) fixed = findfixedmask3d(i) DCscore += medpyDC(transformed,fixed) n += 1 DCscore /= n output_dir = f'results{runnr}' shutil.rmtree(output_dir) return DCscore
def getfinalmasksMI(atlasset,unknownset,parameter_file,threshold1=0.5,threshold2=0.5,modelnr=None): #if modelnr != None, all transformed masks will be read/written to a transformedmasksmodel folder. if modelnr != None: transformed_dir = f'transformedmasksmodel{modelnr}' if os.path.exists(transformed_dir) is False: os.mkdir(transformed_dir) fixed = unknownset moving = atlasset finalmasks = [] for i in fixed: transformedmasks = [] MIscores = [] for j in moving: if modelnr != None: try: mask_path = os.path.join(transformed_dir,"IM"+str(j)+"IF"+str(i)+"mask.mhd") transformedmask = sitk.ReadImage(mask_path) transformedmask_array = sitk.GetArrayFromImage(transformedmask) transformedmasks.append(transformedmask_array) with open(os.path.join(transformed_dir,"MIscore"+"IM"+str(j)+"IF"+str(i)+".txt"), 'r') as f: MIscores.append(float(f.readlines()[0])) continue except Exception: pass register3d(i,j,parameter_file,runnr=runnr,verbose=False) transform3d(j,runnr,transformmask=True) transformedmasks.append(findtransformedmask(runnr)) MIscores.append(readMI(runnr)) if modelnr != None: mask_path = os.path.join(transformed_dir,"IM"+str(j)+"IF"+str(i)+"mask.mhd") savemask(findtransformedmask(runnr), mask_path, i) with open(os.path.join(transformed_dir,"MIscore"+"IM"+str(j)+"IF"+str(i)+".txt"), 'w') as f: f.writelines(str(readMI(runnr))) finalmasks.append(votingbased_MIweighted_3d_all(transformedmasks, MIscores, threshold1, threshold2)) output_dir = f'results{runnr}' if os.path.exists(output_dir): shutil.rmtree(output_dir) return finalmasks
def getfinalmasks2dDice(atlasset,unknownset,DCscores2D,parameter_file, threshold1=0.5, threshold2=0.5, modelnr=None): #This function performs step 6-8 + 10 of the #plan, using dice scores for each slice in the atlas images. #if modelnr != None, all transformed masks will be read/written to a transformedmasksmodel folder. if modelnr != None: transformed_dir = f'transformedmasksmodel{modelnr}' if os.path.exists(transformed_dir) is False: os.mkdir(transformed_dir) fixed = unknownset moving = atlasset finalmasks = [] for i in fixed: transformedmasks = [] for j in moving: if modelnr != None: try: mask_path = os.path.join(transformed_dir,"IM"+str(j)+"IF"+str(i)+"mask.mhd") transformedmask = sitk.ReadImage(mask_path) transformedmask_array = sitk.GetArrayFromImage(transformedmask) transformedmasks.append(transformedmask_array) continue except Exception: pass register3d(i,j,parameter_file,runnr=runnr,verbose=False) transform3d(j,runnr,transformmask=True) transformedmasks.append(findtransformedmask(runnr)) if modelnr != None: mask_path = os.path.join(transformed_dir,"IM"+str(j)+"IF"+str(i)+"mask.mhd") savemask(findtransformedmask(runnr), mask_path, i) finalmasks.append(votingbased_DCweighted_3d_slice(transformedmasks, DCscores2D, threshold1, threshold2)) output_dir = f'results{runnr}' if os.path.exists(output_dir): shutil.rmtree(output_dir) return finalmasks
#runnr = register2d(fixednr,movingnr,slicenr,parameter_file) runnr = register3d(fixednr, movingnr, parameter_file1) #Before this step: change offset in parameterfile from fixed to moving image! #runnr = 20 #transform command #transform2d(movingnr,slicenr,runnr,transformmask=True) transform3d(movingnr, runnr, transformmask=True) #visualisation commands #visualize2d(fixednr,movingnr,slicenr,runnr) #visualize3d(fixednr,movingnr,slicenr,runnr) fixedmask = findfixedmask(107) transformedmask = findtransformedmask(runnr) print(medpyDC(transformedmask, fixedmask)) print(medpyHD(transformedmask, fixedmask)) fixed_image_path = os.path.join(f"results{runnr}", "result.mhd") moving_image_path = os.path.join(data_path, f"p{movingnr}\mr_bffe.mhd") output_dir = f'results{runnr}' el = elastix.ElastixInterface(elastix_path=elastix_path) #run model el.register(fixed_image=fixed_image_path, moving_image=moving_image_path, parameters=[parameter_file2],