如何以正确的顺序获取分段掩码中的通道?

Posted

技术标签:

【中文标题】如何以正确的顺序获取分段掩码中的通道?【英文标题】:How to get channels in a segmentation mask in proper order? 【发布时间】:2021-10-25 10:56:36 【问题描述】:

我正在尝试解决 Covid-19 CT 扫描分割问题,并尝试使用免费的 MedSeg 浏览器内工具 (https://www.medseg.ai/) 为自己分割图像。我想这样做来增加我现在有 4 个类别的数据集:毛玻璃、巩固、肺其他和背景。我发现一个数据集只包含带有毛玻璃标签的面具。我想在其中手动分割肺其他和背景。但是,这些手动分割的蒙版的通道顺序与我的其他图像不同:

手动分割掩码:

0 - 背景 1 - 毛玻璃 2 - 合并 3 - 肺其他

正确的掩码:

0 - 毛玻璃 1 - 合并 2 - 肺其他 3 - 背景

当我下载准备好的手动分段蒙版时,它的形状是 (41, 512, 512)。下载后我最后添加了一个维度,所以它变成了 (41, 512, 512, 1)。比我用这个调色板应用这个函数 = [[0], [1], [2], [3]] (它适用于我的旧数据集掩码):

def mask_to_onehot(mask, palette):
"""
Converts a segmentation mask (H, W, C) to (H, W, K) where the last dim is a one
hot encoding vector, C is usually 1 or 3, and K is the number of class.
"""
semantic_map = []
for colour in palette:
    #print('colour',colour)
    equality = np.equal(mask, colour)
    #print('equality',equality)
    class_map = np.all(equality, axis=-1)
    semantic_map.append(class_map)
semantic_map = np.stack(semantic_map, axis=-1).astype(np.float32)
return torch.from_numpy(semantic_map)

之后,新面具与旧面具不同。有人可以请教一些东西吗?我做错了什么?提前致谢。

【问题讨论】:

【参考方案1】:

您可以在 MedSeg 中打开设置菜单(已使用掩码打开数据)并使用“将掩码值从...更改为...”。以下顺序应该适合您:0 到 5,然后 1 到 0,然后 2 到 1,然后 3 到 2,然后 5 到 3。

类似的事情当然也可以在 python 中自动完成,例如 mask[mask==0]=5, mask[mask==1]=0 等等。

【讨论】:

以上是关于如何以正确的顺序获取分段掩码中的通道?的主要内容,如果未能解决你的问题,请参考以下文章

获取 web3 元掩码中的注册资产

如何在 jquery 掩码中删除空格

如何使用文本掩码中的 angular2 createNumberMask 用小数格式化百分比

选择位掩码中与选择器位图中的 1 位重叠的设置位范围

位掩码 - C中的按位运算

从 CALayer 掩码中清除?