并试图获取每个实例:
对于每种颜色。颜色在图像矩阵中是不同的整数值。各个实例应重新堆叠到一个数组中,作为三维中的条目,即(高度,宽度,实例)。
我得到了:
maxi = mask.max() mask = np.empty_like(mask) for x in range(maxi+1): m = np.where(mask == x, mask, -1) mask = np.dstack((mask,m)) mask = mask[:,:,1:] return mask
这个方法虽然有效,但操作繁琐且速度慢,同时也不够节省内存。有没有建议?
已编辑 – 可能的改进:
def get_instances(mask): instance_masks = [] for inst_id in np.unique(mask): instance_mask = (mask==inst_id) instance_masks.append(instance_mask) mask = np.stack(instance_masks, axis=2) return mask
回答:
与其循环遍历所有可能的值直到mask.max()
并检查每个值是否存在,不如只循环遍历掩码中的唯一值:
colors = np.unique(mask)n = colors.sizecolor_masks = np.zeros((colors.shape[0], colors.shape[1], n))for i, x in np.ndenumerate(colors): color_masks[:,:,i][mask == x] = xreturn color_masks