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

读取单张与多张分割掩码图像时unique值不匹配问题

问题原因分析:批量与单张读取分割掩码的unique值差异

核心差异来源

1. 灰度转换与像素值归一化

批量处理时,你调用了skimage.io.imread(mask,as_gray="True"):

  • as_gray参数会将图像转为灰度图,同时把原始uint8类型的0/255像素值归一化到[0,1]的float64范围。
  • 单张读取时未设置该参数,图像保留原始uint8格式,像素值维持0和255。

2. 图像resize的插值操作

批量流程中使用了resize(mask,(1024,768)):

  • skimage的resize函数默认采用双线性插值(order=1)调整尺寸,插值过程会对相邻像素加权计算,生成大量介于0和1之间的中间浮点值,彻底破坏了原本的二值掩码特性。
  • 单张读取没有resize步骤,自然保留原始二值结果。

批量处理保留二值掩码的修正方案

如果需要在批量处理中维持二值掩码,可调整代码如下:

import glob
import skimage.io
from skimage.transform import resize
import numpy

mask_names = glob.glob("./drive/MyDrive/ISBI2016_ISIC_Part3B_Training_Data/*.png")
mask_names.sort()
mask_names_subset = mask_names[0:30]
mask_list = []

for mask in mask_names_subset:
    # 读取原始uint8格式图像,跳过灰度归一化
    mask = skimage.io.imread(mask)
    # 使用最近邻插值resize,避免生成中间值
    mask1 = resize(mask, (1024, 768), order=0, preserve_range=True)
    # 阈值化确保转回二值(处理插值可能的微小误差)
    mask1 = (mask1 > 127).astype(numpy.uint8) * 255
    mask_list.append(mask1)
  
mask_dataset = numpy.array(mask_list)
print(numpy.unique(mask_dataset[2]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:45:13