相比其他只是复制粘贴的,我只想说,为什么没有人说这可以直接比较图片而是都去比较array。
其实是可以直接比较两张图片直接的dice,distance的,只要能被sitk.ReadImage读取进来。不需要sitk.GetImageFromArray或者hausdorffcomputer.Execute(labelTrue>0.5,labelPred>0.5)的额外处理。这两个步骤只是用来把array回复成image,并做灰度处理得到两分图片。如果你的原始输入数据就是二分图片,就不需要,只要读取进来即可。
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 17 09:50:56 2020
@author: bpk1036
"""
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() # sort the read path
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)
# labelPred=sitk.GetArrayFromImage(lP)
# labelTrue=sitk.GetArrayFromImage(lT)
labelTrue = lP
labelPred = lT
hausdorffcomputer=sitk.HausdorffDistanceImageFilter()
hausdorffcomputer.Execute(labelTrue,labelPred)
quality["avgHausdorff"]=hausdorffcomputer.GetAverageHausdorffDistance()
quality["Hausdorff"]=hausdorffcomputer.GetHausdorffDistance()
dicecomputer=sitk.LabelOverlapMeasuresImageFilter()
dicecomputer.Execute(labelTrue,labelPred)
quality["dice"]=dicecomputer.GetDiceCoefficient()
return quality
gtpath = 'C:/research/image analysis/gtpath'
predpath = 'C:/research/image analysis/predpath'
gtnames = file_name(gtpath)
prednames = file_name(predpath)
for i in range(len(gtnames)):
gt = sitk.ReadImage(gtpath +'/'+ gtnames[i])
pred = sitk.ReadImage(predpath +'/'+ prednames[i])
quality = computeQualityMeasures(pred,gt)