Dice similarity coefficient及代码

2019-09-29  本文已影响0人  一只大南瓜

针对2分类的一个混淆矩阵,及对应的各种指标表示。其中:


true condition:列表示真实类别;predicted condition:行表示预测的类别;
真实正类=true positive+false negative;真实负类=false positive+true negative;
预测的正类=true positive+false positive; 预测的负类=false negative+true negative。

1. 不同指标的含义

F measure&&G measure

传统的F measure(balanced F score,F1 score) 就是关于precision和recall的Harmonic均值(就是一种均值)其计算公式如下:



其中:
当F score为0的时候最差:即precision和recall中某个值或者都接近0,则该模型越差;
当F score为1的时候最好:即precision和recall同时越接近1则该模型越好。

ps:F1 score同样也被称为Sørensen–Dice coefficient或者说叫Dice similarity coefficient (DSC).

将上述式子表示成更通用的形式如下图:



其中F2,F0.5是相对F1两个常用的F measure:
当β=2,则表示recall的影响要大于precision;
当β=0.5,则表示precision的影响要大于recall.

G measure

相对于F measure 是一种Harmonic均值,G measure是一种geometric mean,同时也被称为 Fowlkes–Mallows index

SimpleITK计算dice系数及Hausdorff距离(python代码)

python中用SimpleITK自带函数实现这一功能呢,代码如下:

 
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)

参考:
https://www.cnblogs.com/shouhuxianjian/p/7877911.html
https://blog.csdn.net/weixin_41783077/article/details/82990200

上一篇下一篇

猜你喜欢

热点阅读