如何以正确的顺序获取分段掩码中的通道?
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 等等。
【讨论】:
以上是关于如何以正确的顺序获取分段掩码中的通道?的主要内容,如果未能解决你的问题,请参考以下文章