Bootstrap

bmp调色板颜色信息重复_PASCAL VOC数据集-分割标签索引颜色对照及程序

23330dc8f38e54f2c07a2f502b87515c.png

作者:陈洪瀚 /洪瀚笔记知乎专栏

摘要:介绍了PSACAL VOC分割标签的索引格式,用图表详细展示索引值和对应的颜色和类别;然后使用python程序分别调用opencv和pillow库如何快速读取索引表,并对索引图像(实际应用中是网络输出的类别标号)着色。(相比其他程序利用列表手工定义调色板的方法,本文通过读取标签图片获取调色,更加便捷。)

一. 准备实验数据

  1. 下载PASCAL VOC 2012数据集(训练和验证集)。Download the training/validation data (2GB tar file) 下载地址http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html

二. 运行环境

Numpy, pillow, pypng, opencv-python 通过pip install 安装

三. 图片格式

PASCAL VOC分割任务中,共有20个类别的对象,其他内容作为背景类。图1 是PASCAL VOC的原图片,图2是针对图1分割的标注,其中红色代表飞机类,黑色是背景,飞机边界部分用米黄色(看着像白色)线条描绘,表示分割模糊区。其中,分割标签都是png格式的图像,该图像其实是单通道的颜色索引图像,即每个像素的值为0~255的整数,对于VOC的标签图像而言,0代表背景,255代表边界,其他1~20为20个类别。具体见图3 所示。该图像除了有一个单通道和图像大小一样的索引图像外,还存储了256个颜色值列表(调色板),每一个索引值对应调色板里一个RGB颜色值,因此,一个单通道的索引图+调色板就能表示彩色图。

程序完成的内容主要包括读取分割标签图像,并获取图像的调色板信息。对于分割后的标签图像用调色板进行着色。这里用一个长条状矩阵索引图像(numpy生成)模拟分割模型得到的图像,32x704(32x22)个像素。即22个32x32个色块拼接而成,每个色块代表一类颜色。20个类+背景+边界。

ce2464551b10ef790111da2a470c8d4f.png
图1 原图

59cfdc308b351d575ff9a06b56db9bf8.png
图2 分割标签

e7dd422cb0da5fa30501d6161b562952.png
图3 图像类别-索引值-调色板对应关系

四. 程序

  1. 采用opencv库完成,由于opencv读图像函数没有读调色板信息功能,这里用pypng库来完成。调色板着色采用opencv的cv2.applyColorMap()函数完成。
# With OpenCV

2. 采用pillow库完成,这里用getpalette()库来读取图片的调色板信息。着色采用getpalette()函数完成。

from 

ffd3177bcfc81a38aba1d1b591852006.png
图4 生成的图像
;