rgb - 语义分割的标记图像应该如何?

标签 rgb file-extension grayscale labeling semantic-segmentation

据我从下面的解释中了解到,用于语义分割的图像有两种类型,即输入和掩模。掩码图像是在像素值中包含“标签”的图像,可以是某个整数(0 表示 ROAD,1 表示 TREE 或 (100,100,100) 表示 ROAD (0,255,0) 表示 TREE)

Semantic segmentation describes the process of associating each pixel of an image with a class label, (such as flower, person, road, sky, ocean, or car). https://se.mathworks.com/help/vision/ug/semantic-segmentation-basics.html

根据我的研究,用于语义分割的标记图像有很多种类型。连同不同的扩展名(.png .jpg .gif .bmp ...),其中一些是RGB标记(3 channel )图像,一些是灰色(1 channel ) 图像。下面通过两个例子来更好地解释这种情况。

  1. RGB 带有扩展名“.png”标签

    https://github.com/divamgupta/image-segmentation-keras#user-content-preparing-the-data-for-training

  2. 标有扩展名“.gif”的灰度比例

    https://www.kaggle.com/kmader/vgg16-u-net-on-carvana/#data

如果我的图像已标记为灰色比例,我基本上通过复制此灰色 channel 的每个值作为 3 个 RGB channel 将其设为 RGB。恰恰相反,通过对 RGB channel 进行平均,我可以将标记图像设为灰度。有什么不同?哪一个更适合哪项任务(二进制分割或其他任务)?

就我而言,我有4个类并尝试进行多类语义分割。 I've already labelled about 600 images on DataTurks 。这意味着,我只有对象的多边形,并且我必须自己制作标记图像。目前,我的输入图像和蒙版图像的扩展名分别为“.jpg”和“.png”。我应该如何使用哪个扩展名来标记我的图像?

最佳答案

您可以将蒙版保存为灰度 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] # this will vary based on number of classes present in mask image

关于rgb - 语义分割的标记图像应该如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956111/

相关文章:

java - BufferedImage.getRGB(int, int, int, int, int[], int, int) 如何工作?

colors - 给定灰度值,什么颜色提供最高的视觉对比度?

javascript - 如何使用 JavaScript 获取文件扩展名?

pdf - 用于删除 PDF 文件中的颜色的 Linux 命令行实用程序?

java Swing 。如何将颜色强度从黑色更改为白色?

java - 当alpha已满时,ARGB和ARGB_PRE是否相同?

java - 在 Java 中删除文件扩展名

php - 从php中的文件目录中删除文件扩展名

ffmpeg - 使用 FFMPEG 和 JPEG2000 帧创建 MP4 视频

python - 使用opencv在python中以灰度显示相机供稿