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
Пример #5
0
#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],