从下面的解释中可以理解,用于语义分割的图像有两种类型,即输入和掩码。遮罩图像是包含'label'像素值的图像,该值可以是一些整数(ROAD为0,TREE为1或ROAD为(100,100,100),TREE为(0,255,0)的整数)。< / p>
语义分割描述了将图像的每个像素与类别标签(例如花朵,人物,道路,天空,海洋或汽车)相关联的过程。 https://se.mathworks.com/help/vision/ug/semantic-segmentation-basics.html
根据我的研究,用于语义分割的标记图像类型很多。连同不同的扩展名(.png .jpg .gif .bmp ...),其中一些是 RGB标记(3通道)图像,有些是 GRAY(1通道) 图片。下面有两个示例可以更好地解释这种情况。
带有扩展名'.png'的RGB
https://github.com/divamgupta/image-segmentation-keras#user-content-preparing-the-data-for-training
GRAY标度,带有扩展名“ .gif”
如果我的图像已标记为GREY标度,则基本上可以通过将此GREY通道的每个值复制到3个RGB通道来使其变为RGB。相反,通过平均RGB通道,我可以使标记的图像成为GREY比例。有什么区别?哪个更适合哪个任务(二进制分段或其他)?
以我为例,我有 4个类,并尝试进行多类语义分割。 I've already labelled about 600 images on DataTurks。这就是说,我只有对象的多边形,而且我必须自己制作标记的图像。现在,输入图像的扩展名和遮罩图像的扩展名分别为'.jpg'和'.png'。我应如何标记图像以及扩展名?
答案 0 :(得分:0)
您可以将蒙版另存为灰度png图像,其值在与像素值的类(树,灌木等)相对应的每个位置为0、1、2、3(因为有4个类)之一在输入图像中。
执行此操作可以验证是否正确生成了遮罩图像。
import cv2
import numpy as np
lbl_img = '<path_to_mask_image>'
mask = cv2.imread(lbl_img, 0)
print(np.unique(mask))
[0 1 2 3]#这将根据蒙版图像中存在的类的数量而变化