如何堆叠多个二进制掩码以创建用于多类分割的单个掩码?

Posted

技术标签:

【中文标题】如何堆叠多个二进制掩码以创建用于多类分割的单个掩码?【英文标题】:How to stack multiple binary masks to create a single mask for multiclass segmentation? 【发布时间】:2021-08-16 20:10:15 【问题描述】:

所以我有 5 个用于分割的类(不包括背景),所有掩码都是不同文件夹中的二进制掩码。如何组合二进制掩码为所有类创建单个掩码以进行多类分割?

我尝试在不同颜色通道中使用 2 个类,但由于只有 3 个颜色通道,我只能将背景和 2 个类合并到一个蒙版中。

python 代码:

new_img = np.zeros((height, width,3))

new_img[:,:,0] = new_img[:,:,0] + class1[:,:,0]

new_img[:,:,1] = new_img[:,:,1] + class2[:,:,0]

还有其他方法可以做到这一点吗? 我可以使用二进制掩码进行多类分割而不合并它们吗?

谢谢

【问题讨论】:

您可以简单地制作一个具有 6 个通道的蒙版。 感谢您的回答。但如何才能可视化呢? 然后将每个类映射到不同的颜色 【参考方案1】:

您可以通过制作具有 6 个通道的蒙版来组合蒙版:

mask = np.stack([mask0, mask1, mask2, mask3, mask4, mask5], axis=-1)

假设0..5i 的每个maski 是一个二维数组。

如果要可视化图像,则必须将每个类映射到一种颜色。例如:

@np.vectorize(signature='(6)->(3)')
def mapcolors(x):
    i = np.argmax(x)
    if i == 0:
        return [0.,0.,0.]
    elif i == 1:
        return [0.,0.,1.]
    elif i == 2:
        return [0.,1.,0.]
    elif i == 3:
        return [1.,0.,0.]
    elif i == 4:
        return [0.,1.,1.]
    else:
        return [1.,1.,0.]

image = mapcolors(mask)

【讨论】:

非常感谢您的回答! 我收到一个值错误:0 维参数没有足够的维度用于上述代码的所有核心维度('6',)。

以上是关于如何堆叠多个二进制掩码以创建用于多类分割的单个掩码?的主要内容,如果未能解决你的问题,请参考以下文章

何创建文本框掩码以仅允许 Office Access 表单上的文本

具有多个掩码的 U-Net 图像分割

更改其子类中的 QPushButton 区域掩码以创建 RoundButton

如何正确使用位掩码以正确使用数字io端口(USB-AD14f)

如何实现多类语义分割?

如何调整图像分割蒙版的大小?