作者:陈洪瀚 /洪瀚笔记知乎专栏
摘要:介绍了PSACAL VOC分割标签的索引格式,用图表详细展示索引值和对应的颜色和类别;然后使用python程序分别调用opencv和pillow库如何快速读取索引表,并对索引图像(实际应用中是网络输出的类别标号)着色。(相比其他程序利用列表手工定义调色板的方法,本文通过读取标签图片获取调色板,更加便捷。)
一. 准备实验数据
- 下载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个类+背景+边界。
四. 程序
- 采用opencv库完成,由于opencv读图像函数没有读调色板信息功能,这里用pypng库来完成。调色板着色采用opencv的cv2.applyColorMap()函数完成。
# With OpenCV
2. 采用pillow库完成,这里用getpalette()库来读取图片的调色板信息。着色采用getpalette()函数完成。
from