如何正确转换mask array形状以匹配(288,512,512)3D图像数组
问题原因
直接使用reshape转换形状不会调整维度轴的语义对应关系,只会按内存存储顺序重新切分数组维度,会打散不同序列切片的mask像素,必然出现和原图不匹配的问题。
你的两个数组维度语义对应关系如下:
- 图像数组shape
(288,512,512):维度顺序为[序列索引, 图像高度, 图像宽度] - 原始mask数组shape
(512,512,288):维度顺序为[图像高度, 图像宽度, 序列索引]
你需要做的是调整维度轴的排列顺序,而非直接修改形状。
正确转换方法
以numpy数组为例,使用轴移动/转置操作即可得到正确对齐的mask数组,两种常用写法效果完全一致:
import numpy as np # 方法1:使用moveaxis指定要移动的轴,将位于索引2的序列维度移动到0号位置 correct_mask = np.moveaxis(original_mask, source=2, destination=0) # 方法2:使用transpose直接指定新维度对应的原轴索引,新顺序为[原2号轴, 原0号轴, 原1号轴] correct_mask = original_mask.transpose(2, 0, 1)
转换完成后可以先验证形状:correct_mask.shape会输出(288, 512, 512),此时取任意索引i的correct_mask[i],即可和图像数组对应索引的img_array[i]完全匹配。
错误效果示例

内容的提问来源于stack exchange,提问作者H Andevari
相关产品推荐
相关产品推荐

