You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何计算分割图像的Dice系数时结果大于1?

Dice系数计算结果大于1的原因及解决方法

你的Dice系数计算公式本身是正确的,结果大于1的问题出在输入数据上,核心原因是输入的分割图像X、Y不是二值化的0/1数组,具体情况包括:

  • 图像像素值是0-255的灰度值(比如用255表示前景),而非0和1。此时X.sum()和Y.sum()是像素值的总和,而(X*Y).sum()是像素乘积的总和,两者的比例会远大于1。比如全255的前景图,计算出来的Dice值会达到255,完全超出0-1的正常范围。
  • 图像是多分类标签图,像素值是类别编号(比如1、2、3...),没有针对单个类别提取二值掩码。这种情况下,sum的计算会把不同类别的数值累加,导致比例失衡。

解决办法

  1. 将输入图像二值化:把分割图像转换为仅包含0(背景)和1(前景)的数组,示例代码如下:
    # 把非0像素转为1,0保持不变
    X_bin = (X > 0).astype(float)
    Y_bin = (Y > 0).astype(float)
    # 使用二值化后的数组计算Dice
    result = dice(X_bin, Y_bin)
    
  2. 多分类任务需按类别处理:如果是多分割任务,要针对每个类别单独生成二值掩码(比如类别k的掩码是X中等于k的位置设为1,其余为0),再分别计算每个类别的Dice系数。

内容的提问来源于stack exchange,提问作者a__ys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:10:53