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

How to get channels in a segmentation mask in proper order?

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

手动分割蒙版:

合适的口罩:

当我下载准备好的手动分割蒙版时,它的形状是 (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)

然后新面具变得与旧面具不同。有人可以请建议吗?我做错了什么?提前致谢。

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

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