Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 将numpy数组和restack数组过滤为多维矩阵_Image_Python 3.x_Numpy_Machine Learning_Computer Vision - Fatal编程技术网

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)?想法不错,但通过设计,所有最大值都会出现。