Image 将numpy数组和restack数组过滤为多维矩阵
我正在尝试从图像掩码中提取实例,即: 我正在尝试获取每个实例: 每种颜色。颜色是图像矩阵中的不同值,它们都是整数。单个实例应作为三维条目(高度、宽度、实例)重新堆叠到数组中 我得到:Image 将numpy数组和restack数组过滤为多维矩阵,image,python-3.x,numpy,machine-learning,computer-vision,Image,Python 3.x,Numpy,Machine Learning,Computer Vision,我正在尝试从图像掩码中提取实例,即: 我正在尝试获取每个实例: 每种颜色。颜色是图像矩阵中的不同值,它们都是整数。单个实例应作为三维条目(高度、宽度、实例)重新堆叠到数组中 我得到: 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)
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.size
color_masks = np.zeros((colors.shape[0], colors.shape[1], n))
for i, x in np.ndenumerate(colors):
color_masks[:,:,i][mask == x] = x
return color_masks
你确定掩码=np.empty_like(mask)?想法不错,但通过设计,所有最大值都会出现。