科研作图-常用的图像分割指标 (Dice, Iou, Hausdorff) 及其计算
1. 简介
本节内容主要是介绍图像分割中常用指标的定义、公式和代码。常用的指标有Dice、Jaccard、Hausdorff Distance、IOU以及科研作图-Accuracy,F1,Precision,Sensitive中已经介绍的像素准确率等指标。在每个指标介绍时,会使用编写相关代码,以及使用MedPy这个Python库进行代码的调用。
2.常用指标介绍
2.1 Dice
Dice系数是一种集合相似度度量函数,通常用来计算两个样本的相似度,它的直观图形表示如下图所示。
根据图像,可得出Dice的计算公式为:
其中A与B分表代表着预测标签和真实标签的集合,Dice的范围也在0到1。而对于分割训练中的Dice Loss常用1-Dice来表示。
常用Dice与Dice Loss代码:
def dice_coeff(pred, target): smooth = 1e-7 num = pred.size(0) A= pred.view(num, -1) # Flatten B= target.view(num, -1) # Flatten intersection = (A * B).sum() return (2. * intersection + smooth) / (A.sum() + B.sum() + smooth) # smooth防止除数为0
直接调用MedPy包
from medpy.metric.binary import dcimport numpy as np# 定义预测结果和真实标记数组predict=np.random.randint(0,4,size=(2,3))ground_truth=np.random.randint(0,4,size=(2,3))# 计算Dice相似系数dice1=dc(predict,ground_truth)print("Dice相似系数为{}".format(dice1))
2.2 Jaccard(Iou)
Jaccard index,又称为交并比(Intersection over Union),是用于比较样本集的相似性与多样性的统计量。Jaccard index能够量度有限样本集合的相似度,其定义为两个集合交集大小与并集大小之间的比例,图形表示为:
Jaccard的计算公式如下所示:
这里的计算代码为:
def Iou_coeff(pred, target): smooth = 1e-7 num = pred.size(0) A= pred.view(num, -1) # Flatten B= target.view(num, -1) # Flatten intersection = (A * B).sum() return (intersection + smooth) / (A.sum() + B.sum() - intersection + smooth) # smooth防止除数为0
直接调用MedPy代码为:
from medpy.metric.binary import jcimport numpy as np# 定义预测结果和真实标记数组predict=np.random.randint(0,4,size=(2,3))ground_truth=np.random.randint(0,4,size=(2,3))# 直接计算Jaccard相似系数jaccard=jc(predict,ground_truth)print("Jaccard相似系数为{}".format(jaccard))
2.3 Hausdorff Distance
表示预测分割区域边界与真实区域边界之间的最大距离,其值越小代表预测边界分割误差越小、质量越好。设 X 和 Y 是度量空间( M, d )的两个非空子集,则定义他们的Hausdorff distance为:
计算绿色曲线 X 和蓝色曲线 Y 之间的豪斯多夫距离的分量过程如下图所示,图像来自于维基百科。首先,对点集X中的每一个点x计算其到点集Y中的每一个点y的距离,保留最短距离,然后找出保留的最短距离中的最大距离记为Dxy。然后,对点集Y中的每一个点y计算其到点集X中的每一个点x的距离,保留最短距离,然后找出保留最短距离中的最大距离记为Dyx。最后,取Dxy和Dyx最大值作为点集X和Y之间的豪斯多夫距离。
95% 豪斯多夫距离(95% Hausdorff distance,HD95)
为了排除一些离群点造成的不合理距离,保持整体数值稳定性,一般选择从小到大排名前 95%的距离作为实际豪斯多夫距离,称之为 95% 豪斯多夫距离。
这里直接调用MedPy库函数进行计算HD
from medpy.metric.binary import hd,hd95# 定义预测结果和真实标记数组predict=np.random.randint(0,4,size=(30,30))ground_truth=np.random.randint(0,4,size=(30,30))# 计算豪斯多夫距离hausdorff_distance=hd(predict,ground_truth)print("豪斯多夫距离为{}".format(hausdorff_distance))# 计算95%豪斯多夫距离hausdorff_distance95=hd95(predict,ground_truth)print("95%豪斯多夫距离为{}".format(hausdorff_distance95))
3. 总结
本文总结了图像分割常用的指标Dice, Iou, Hausdorff以及指标实现的代码。
4. 参考链接
- https://blog.csdn.net/m0_46223009/article/details/128204724
- http://loli.github.io/medpy/
- https://en.wikipedia.org/wiki/Hausdorff_distance
来源地址:https://blog.csdn.net/kksimida/article/details/129643885
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341