运行U-Net图像分割代码触发数组维度索引错误如何解决?
报错原因
你使用的是灰度X光图像,imread读取单通道灰度图时默认返回2维数组(维度为[高度, 宽度]),没有第三个通道维度,代码中直接用[:,:,:IMG_CHANNELS]索引第三个维度,因此触发索引越界错误。
修复方案
你只需要调整现有代码,不需要额外新增复杂处理步骤,修改点如下:
- 调整第29行的图像读取逻辑,判断数组维度后手动补充通道维度:
# 原第29行代码替换为以下内容 img = imread(path + '/images/' + id_ + '.png') # 2维灰度图手动补充通道维度,变成[高度, 宽度, 1]的3维数组 if len(img.shape) == 2: img = np.expand_dims(img, axis=-1) img = img[:,:,:IMG_CHANNELS]
- 修正代码中的路径笔误:你遍历mask文件时写的路径是
path+'/omasks/',多了一个字母o,会后续触发路径不存在报错,改为:
for mask_file in next(os.walk(path+'/masks/'))[2]:
- 修正
Y_train赋值的缩进错误:目前Y_train[n]= mask写在mask遍历循环内部,会导致每读一个mask就覆盖一次赋值,需要把这行的缩进退一格,放到mask遍历循环的外部,等所有mask合并完成后再赋值。
内容的提问来源于stack exchange,提问作者Eila
相关产品推荐
相关产品推荐

