当前位置: 首页 > news >正文

医疗图像分割指标

医疗图像其中两种图像格式:MRI(Magnetic Resonance Imaging,磁共振成像)、CT(Computed Tomography,计算机断层),常存成 .nii.gz 格式。都是 3D 的 H × W × L H \times W \times L H×W×L,但不是 RGB,而是类似 grey-scale 图只有一个 channel,如 CT 的值可能是 Hu 值,取值范围可从负几千到正几千,参考 [1]。segmentation label 也相应是 3D 的。
med-planes
这里记录几种分割指标,参考 [2,3],可调 medpy 的包,其文档也有指标列表。记有 C + 1 个类,0 固定是 background,(某个数据的)prediction 和 label Y ^ , Y ∈ { 0 , … , C } H × W × L \hat{Y},Y\in \{0, \dots, C\}^{H \times W \times L} Y^,Y{0,,C}H×W×L,只留下第 c 类的 binary prediction 和 label 为 B ^ c , B c ∈ { 0 , 1 } H × W × L \hat{B}^c,B^c \in \{0, 1\}^{H \times W \times L} B^c,Bc{0,1}H×W×L ∣ ⋅ ∣ |\cdot| 表示非零元素个数, B ^ c , B c \hat{B}^c,B^c B^c,Bc 的 surface / boundray 记为 S ^ c , S c \hat{S}^c, S^c S^c,Sc,是其表面 voxels 的三维索引向量(下标)的集合。

Dice Coefficient

即 F1-scoure[2]。第 c 类的 dice 系数: D C c = 2 ∣ B ^ c ∩ B c ∣ ∣ B ^ c ∣ + ∣ B c ∣ DC_c=\frac{2|\hat{B}^c \cap B^c|}{|\hat{B}^c| + |B^c|} DCc=B^c+Bc2∣B^cBc 调包:medpy.metric.binary.dc。

IoU

即 Jaccard 系数[2]。第 c 类的 IoU: I o U c = ∣ B ^ c ∩ B c ∣ ∣ B ^ c ∪ B c ∣ IoU_c = \frac{|\hat{B}^c \cap B^c|}{|\hat{B}^c \cup B^c|} IoUc=B^cBcB^cBc 调包:medpy.metric.binary.jc。由 [3],IoU 与 dice 系数有确定的转换关系,即等价,所以两者应该用其中一种就行。C 类的 IoU 取平均就是 mIoU: m I o U = ∑ c = 1 C I o U c C mIoU=\frac{\sum_{c=1}^{C}IoU_c}{C} mIoU=Cc=1CIoUc(2023.9.28:不确定算 mIOU 时要不要加上 background)

Sensitivity

即 recall,也叫 TPR(True Positive Rate),非对称。第 c 类的 sensitivity: R c = ∣ B ^ c ∩ B c ∣ ∣ B c ∣ R_c=\frac{|\hat{B}^c \cap B^c|}{|B^c|} Rc=BcB^cBc 调包:medpy.metric.binary.sensitivity 或 medpy.metric.binary.recall。

Specificity

也叫 selectivity、TNR(True Negative Rate),是 sensitivity 的补。第 c 类的 specifity: S P c = ∣ ( 1 − B ^ c ) ∩ ( 1 − B c ) ∣ ∣ ( 1 − B c ) ∣ SP_c = \frac{|(1-\hat{B}^c) \cap (1-B^c)|}{|(1-B^c)|} SPc=(1Bc)(1B^c)(1Bc) 调包:medpy.metric.binary.specificity。

Average (Symmetric) Surface Distance

由 [4],第 c 类的 average surface distance: A S D ( S ^ c , S c ) = ∑ p ∈ S ^ p c d s ( p , S c ) / ∣ S ^ c ∣ ASD(\hat{S}^c, S^c) = \sum_{p \in \hat{S}^c_p} d_s(p,S^c) \big/ |\hat{S}^c| ASD(S^c,Sc)=pS^pcds(p,Sc)/S^c 其中 d s ( ⋅ , ⋅ ) d_s(\cdot,\cdot) ds(,) 是点到点集(此处是表面 S)距离: d s ( p , S ) = min ⁡ q ∈ S d ( p , q ) d_s(p,S)=\min_{q \in S} d(p,q) ds(p,S)=qSmind(p,q) p , q ∈ { 1 , … , W } × { 1 , … , H } × { 1 , … , L } p,q \in \{1,\dots,W\} \times \{1,\dots,H\} \times \{1,\dots,L\} p,q{1,,W}×{1,,H}×{1,,L} 是三维索引向量(下标), d ( ⋅ , ⋅ ) d(\cdot,\cdot) d(,) 是欧氏距离。就是对 S ^ \hat{S} S^ 中属于此 object 表面的每一个 voxel,都算一下它到 S 的距离,然后取平均。调包:medpy.metric.binary.asd。

ASD 不对称,一般会用 ASSD: A S S D ( S ^ c , S c ) = A S D ( S ^ c , S c ) + A S D ( S c , S ^ c ) 2 ASSD(\hat{S}^c, S^c) = \frac{ASD(\hat{S}^c, S^c) + ASD(S^c, \hat{S}^c)}{2} ASSD(S^c,Sc)=2ASD(S^c,Sc)+ASD(Sc,S^c) 调包:medpy.metric.binary.assd。有些文章也会将 ASSD 简叫成 ASD,感觉可以无脑只用 ASSD。

Hausdorff Distance

由 [2,4],第 c 类的 Hausdorff 距离: H D ( S ^ c , S c ) = max ⁡ { sup ⁡ p ∈ S ^ c d s ( p , S c ) , sup ⁡ p ∈ S c d s ( p , S ^ c ) } HD(\hat{S}^c,S^c)=\max\left\{ \sup_{p \in \hat{S}^c} d_s(p, S^c), \sup_{p \in S^c} d_s(p, \hat{S}^c) \right\} HD(S^c,Sc)=max{pS^csupds(p,Sc),pScsupds(p,S^c)} 调包:medpy.metric.binary.hd。

Code

  • 分割模型应该一般 predict 的都是 (C+1)-way softmax prediction,即 Y ^ \hat{Y} Y^
from collections import defaultdict
import numpy as np
from medpy.metric.binary import dc, jc, hd, assd, sensitivity, specificitydef evaluate(Y_pred, Y_true, n_classes):""""medical segmentation evaluationInput:Y_pred, Y_true: [H, W, L], in {0, ..., n_classes - 1}n_classes: intOutput:res: {<metric_name>: [<class_0>, ..., class_nc-1]}"""metric_names = ("dice", "sensitivity", "specificity", "assd", "hd")#, "iou")metric_fn    = (dc, sensitivity, specificity, assd, hd)#, jc)res = defaultdict(list)for c in range(n_classes):B_pred_c = (Y_pred == c).astype(np.uint8)B_c      = (Y_true == c).astype(np.uint8)for metr, fn in zip(metric_names, metric_fn):res[metr].append(fn(B_pred_c, B_c))return res

References

  1. 亨氏单位
  2. 常用的医学图像分割评价指标
  3. 医学图像分割常用指标及代码(pytorch)
  4. (MIA 2022) Rethinking adversarial domain adaptation: Orthogonal decomposition for unsupervised domain adaptation in medical image segmentation - paper, github
http://www.lryc.cn/news/178610.html

相关文章:

  • 零代码编程:用ChatGPT批量修改文件夹名称中的大小写
  • webpack:详解cache模块常用配置
  • 云原生Kubernetes:Pod控制器
  • 数据库基础与MySQL入门
  • 探索Java爬虫框架:解锁网络数据之门
  • 智慧燃气平台的总体架构到底应怎样设计?
  • MonkeyRunner测试步骤
  • Konva基本处理流程和相关架构设计
  • 人工智能AI知多少?
  • leetcode1610. 可见点的最大数目(java)
  • Apache Flume
  • 【切片】基础不扎实引发的问题
  • CVE-2023-5129 libwebp堆缓冲区溢出漏洞影响分析
  • leetcode做题笔记155. 最小栈
  • 蓝海彤翔亮相2023新疆网络文化节重点项目“新疆动漫节”
  • 【AI视野·今日NLP 自然语言处理论文速览 第四十四期】Fri, 29 Sep 2023
  • 【VsCode】vscode创建文件夹有小图标显示和配置
  • celery分布式异步任务队列-4.4.7
  • 解决M2苹果芯片Mac无法安装python=3.7的虚拟环境
  • Sound/播放提示音, Haptics/触觉反馈, LocalNotification/本地通知 的使用
  • Oracle实现主键字段自增
  • 【C++数据结构】二叉树搜索树【完整版】
  • TouchGFX之字体缓存
  • windows系统关闭软件开机自启的常用两种方法
  • 巧用@Conditional注解根据配置文件注入不同的bean对象
  • 论文笔记(整理):轨迹相似度顶会论文中使用的数据集
  • Python实现单例模式
  • spark相关网站
  • ThreeJS-3D教学四-光源
  • Linux 回收内存到底怎么计算anon/file回收比例,只是swappiness这么简单?