SimpleITK는 dice 계수 및 Hausdorff 거리 계산(python 코드)

1452 단어 코드
의학적 이미지 분할을 하려면 분할 결과에 대한 평가가 필요하다. 주로 dice 계수와 Hausdorff 거리 등이 있는데 어떻게python에서SimpleITK 자체 함수로 이 기능을 실현할 수 있는지 코드는 다음과 같다.
# -*- coding: utf-8 -*-

import numpy as np
import os
import SimpleITK as sitk

def file_name(file_dir):   
   L=[]   
   path_list = os.listdir(file_dir)
   path_list.sort() #          
   for filename in path_list:
       if 'nii' in filename:
        	L.append(os.path.join(filename))   
   return L 

def computeQualityMeasures(lP,lT):
    quality=dict()
    labelPred=sitk.GetImageFromArray(lP, isVector=False)
    labelTrue=sitk.GetImageFromArray(lT, isVector=False)
    hausdorffcomputer=sitk.HausdorffDistanceImageFilter()
    hausdorffcomputer.Execute(labelTrue>0.5,labelPred>0.5)
    quality["avgHausdorff"]=hausdorffcomputer.GetAverageHausdorffDistance()
    quality["Hausdorff"]=hausdorffcomputer.GetHausdorffDistance()

    dicecomputer=sitk.LabelOverlapMeasuresImageFilter()
    dicecomputer.Execute(labelTrue>0.5,labelPred>0.5)
    quality["dice"]=dicecomputer.GetDiceCoefficient()

    return quality

gtpath = ''
predpath = ''

gtnames = file_name(gtpath)
prednames = file_name(predpath)

labels_num = np.zeros(len(prednames))
NUM=[]
P=[]



for i in range(len(gtnames)):

    gt = sitk.ReadImage(gtpath + gtnames[i])
    pred = sitk.ReadImage(predpath + gtnames[i])    
    quality = computeQualityMeasures(pred,gt)
    

좋은 웹페이지 즐겨찾기