美文网首页
Dice similarity coefficient及代码

Dice similarity coefficient及代码

作者: 一只大南瓜 | 来源:发表于2019-09-29 18:27 被阅读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

    相关文章

      网友评论

          本文标题:Dice similarity coefficient及代码

          本文链接:https://www.haomeiwen.com/subject/cehqpctx.html