VOC Segmentation GT图像颜色表生成分析

原创 2016年08月11日 19:55:12


本系列文章由 @yhl_leo 出品,转载请注明出处。
文章链接: http://blog.csdn.net/yhl_leo/article/details/52185581


PASCAL VOC图像分割数据集中,图像中各个类别以不同的颜色进行区分,即Ground Truth中,每种颜色都对应着相应的类别:

color map

可以看出这个颜色表既好看又容易区分开。下面来看,这个color map是如何产生的。

先附上Matlab版本的代码:

% VOCLABELCOLORMAP Creates a label color map such that adjacent indices have different
% colors.  Useful for reading and writing index images which contain large indices,
% by encoding them as RGB images.
%
% CMAP = VOCLABELCOLORMAP(N) creates a label color map with N entries.
function cmap = labelcolormap(N)

if nargin==0
    N=256
end
cmap = zeros(N,3);
for i=1:N
    id = i-1; r=0;g=0;b=0;
    for j=0:7
        r = bitor(r, bitshift(bitget(id,1),7 - j));
        g = bitor(g, bitshift(bitget(id,2),7 - j));
        b = bitor(b, bitshift(bitget(id,3),7 - j));
        id = bitshift(id,-3);
    end
    cmap(i,1)=r; cmap(i,2)=g; cmap(i,3)=b;
end
cmap = cmap / 255;

其中,N就是类别数,而bitor()bitshift()bitget()这些位运算的函数,可以在Matlab中查询其功能,很容易理解(源码就不做分析了)。

对于VOC 20类的分割问题,我们调用:labelcolormap(21),可以得到如下输出(这里把结果乘以255,使用整数表示):

     0     0     0
   128     0     0
     0   128     0
   128   128     0
     0     0   128
   128     0   128
     0   128   128
   128   128   128
    64     0     0
   192     0     0
    64   128     0
   192   128     0
    64     0   128
   192     0   128
    64   128   128
   192   128   128
     0    64     0
   128    64     0
     0   192     0
   128   192     0
     0    64   128
索引值
颜色值
颜色
0 (0,0,0)
1 (128,0,0)
2 (0,128,0)
3 (128,128,0)
4 (0,0,128)
5 (128,0,128)
6 (0,128,128)
7 (128,128,128)
8 (64,0,0)
9 (192,0,0)
10 (64,128,0)
11 (192,128,0)
12 (64,0,128)
13 (192,0,128)
14 (64,128,128)
15 (192,128,128)
16 (0,64,0)
17 (128,64,0)
18 (0,192,0)
19 (128,192,0)
20 (0,64,128)

我将Matlab代码转为python版本:

def uint82bin(n, count=8):
    """returns the binary of integer n, count refers to amount of bits"""
    return ''.join([str((n >> y) & 1) for y in range(count-1, -1, -1)])

def labelcolormap(N):
    cmap = np.zeros((N, 3), dtype = np.uint8)
    for i in range(N):
        r = 0
        g = 0
        b = 0
        id = i
        for j in range(7):
            str_id = uint82bin(id)
            r = r ^ ( np.uint8(str_id[-1]) << (7-j))
            g = g ^ ( np.uint8(str_id[-2]) << (7-j))
            b = b ^ ( np.uint8(str_id[-3]) << (7-j))
            id = id >> 3
        cmap[i, 0] = r
        cmap[i, 1] = g
        cmap[i, 2] = b
    return cmap

这里,我并没有将cmap保存成float型,而是无符号整型,不过这是小事。执行labelcolormap(21)后,得到输出如下:

[[  0   0   0]
 [128   0   0]
 [  0 128   0]
 [128 128   0]
 [  0   0 128]
 [128   0 128]
 [  0 128 128]
 [128 128 128]
 [ 64   0   0]
 [192   0   0]
 [ 64 128   0]
 [192 128   0]
 [ 64   0 128]
 [192   0 128]
 [ 64 128 128]
 [192 128 128]
 [  0  64   0]
 [128  64   0]
 [  0 192   0]
 [128 192   0]
 [  0  64 128]]

与Matlab版本的结果一致。

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用FCN做图像语义分割(实践篇)

FCN原理原理我已经在上篇博客说过,大家可以参考FCN原理篇代码FCN有官方的代码,具体地址是FCN官方代码 不过我用的不是这个代码,我用的是别人修改官方的版本的代码,使用Chainer框架实现的,...
  • Gavin__Zhou
  • Gavin__Zhou
  • 2016年08月07日 15:25
  • 24978

Pascal VOC 数据集介绍

介绍Pascal VOC数据集: Challenge and tasks, 只介绍Detection与Segmentation相关内容。 数据格式 衡量方式 voc2007, voc2012 Chal...
  • weixin_35653315
  • weixin_35653315
  • 2017年04月30日 20:10
  • 10197

VOC数据集具体格式

现在深度学习很多框架都在使用VOC数据集,来研究一下voc数据集的具体内容 一般voc解压出来后都包括Annotations,ImageSets,JPEFImages,SegmentationClas...
  • yogyliu
  • yogyliu
  • 2016年07月08日 11:13
  • 7260

PASCAL VOC数据集分析

PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge。 本文主要分析PASCAL V...
  • zhangjunbob
  • zhangjunbob
  • 2016年10月09日 18:29
  • 27955

关于FCN的数据集着色说明

前方我们讲解了《 FCN-数据篇》。里面包含了如何制作类似pascal voc的label。很大篇幅在谈如何着色,如何转化为索引图像。 由于一些内容参考网上的资料,所以对里面的一些操作含义也有些糊涂。...
  • xiamentingtao
  • xiamentingtao
  • 2017年12月04日 17:29
  • 171

Pascal VOC 数据集介绍

介绍Pascal VOC数据集: Challenge and tasks, 只介绍Detection与Segmentation相关内容。 数据格式 衡量方式 voc2007, voc2012 Chal...
  • weixin_35653315
  • weixin_35653315
  • 2017年04月30日 20:10
  • 10197

利用matlab将自己的数据制作为标准VOC数据集格式

在使用各种深度网络的时候,需要根据自己的需求,自己的数据fine-tuning自己的模型,首要的一部就是讲自己的数据制作成标准VOC数据集,本文记录自己利用matlab制作标准VOC数据集的方法。...
  • kunyXu
  • kunyXu
  • 2016年12月17日 17:27
  • 1981

VOC数据提取自己需要的类生成XML标签

公开数据集VOC里面有20类,若小伙伴需要提取特定的类别供深度学习训练的话,可以参考博主的这篇博客,如有不正,欢迎指出。 注意:此python程序经测试VOC2007有效,其他年份的数据只需对程序稍作...
  • samylee
  • samylee
  • 2017年03月13日 16:00
  • 1196

PASCAL VOC数据集分析

PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge。 本文主要分析PASCAL V...
  • zhangjunbob
  • zhangjunbob
  • 2016年10月09日 18:29
  • 27955

将数据集做成VOC2007格式用于Faster-RCNN训练

0.文件夹名 首先,确定你的数据集所放的文件夹名字,例如我的叫logos。(因为后面做xml会用到这个文件夹名字) 1.图片命名 虽然说图片名对训练没什么影响,但建议还是按VOC2007那样,如“00...
  • sinat_30071459
  • sinat_30071459
  • 2016年02月23日 15:35
  • 62967
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VOC Segmentation GT图像颜色表生成分析
举报原因:
原因补充:

(最多只允许输入30个字)