我的编程空间,编程开发者的网络收藏夹
学习永远不晚

科研作图-常用的图像分割指标 (Dice, Iou, Hausdorff) 及其计算

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

科研作图-常用的图像分割指标 (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. 参考链接

  1. https://blog.csdn.net/m0_46223009/article/details/128204724
  2. http://loli.github.io/medpy/
  3. https://en.wikipedia.org/wiki/Hausdorff_distance

来源地址:https://blog.csdn.net/kksimida/article/details/129643885

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

科研作图-常用的图像分割指标 (Dice, Iou, Hausdorff) 及其计算

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录