图片中存在着色版的概念,二维矩阵的每个元素的值指定了一种颜色,因此可以显示出彩色。

迁移调色板

下述python代码将VOC数据集中的某个语义分割的图片的调色板直接应用在一个二维矩阵代表的图像上

#label_im is a numpy array of 1 x height x width
#return an Image object,call its' save('out.png') functioin to save as image file
def palette( label_im):
import copy
from PIL import Image
palette_im = Image.open('2008_000144.png')
palette = palette_im.palette
'''
Transfer the VOC color palette to an output mask for visualization.
'''
if label_im.ndim == 3:
label_im = label_im[0]
label = Image.fromarray(label_im, mode='P')
label.palette = copy.copy(palette)
return label

应用color map

#直接转成含RGB信息的三维矩阵
#示例代码中应用了gist_earth的color map
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.gist_earth(label)*255))

自定义color map

下面的代码用于生成一个color map(由VOC数据集中的代码VOCdevkit/VOCcode/VOClabelcolormap.m转换而来)

import numpy as np
# bitget bitshift bitor zeros is all in matlab internal function
def bitget(num,i):
ar=np.array([[num]], dtype=np.uint8)
bits=np.unpackbits(ar, axis=1)[0]
idx=bits.size - 1 - i
return bits[idx] def bitshift(num,i): #left shift,if i <0 ,then same as left_shift(num,-i)
return np.right_shift(num,i) def bitor(x,y):
return np.bitwise_or(x,y)
#N.B. np.zeros default data type is float and usally color map element is float number that less than 1 [(0~255)/255]
def getColorMap(N):
#default N is 256
if N==None:
N=256 cmap=np.zeros(N*3, dtype=np.uint8).reshape(N,3)
for i in range(N):
idx=i
r=0;g=0;b=0
for j in range(8):
r = bitor(r, bitshift(bitget(idx,0),7 - j));
g = bitor(g, bitshift(bitget(idx,1),7 - j));
b = bitor(b, bitshift(bitget(idx,2),7 - j));
idx = bitshift(idx,-3);
cmap[i,0]=r; cmap[i,1]=g; cmap[i,2]=b;
#cmap = cmap / 255
return cmap
#ar is 2-dim np.ndarray
def toRGBarray(ar,classes):
cmap=getColorMap(classes)
rows=ar.shape[0]
cols=ar.shape[1]
r=np.zeros(ar.size*3, dtype=np.uint8).reshape(rows,cols,3)
for i in range(rows):
for j in range(cols):
r[i,j]=cmap[ar[i,j]] return r
if __name__ == '__main__':
cmap=getColorMap(21)
print cmap

调用方式:

pic_arr=voccm.toRGBarray(label,21)
im = Image.fromarray(pic_arr,mode='RGB')
im.save('out.png')

小结

除了用作常规的图片存储外,通过给二维数组不同元素赋予颜色的方式可以使我们对数据的空间布局分布有感官的认识,类似于热力图可视化的方式。

Python为8bit深度图像应用color map的更多相关文章

  1. Matlab下imwrite,Uint16的深度图像

    Matlab下imwrite,Uint16的深度图像 1. 在Matlab命令窗口输入命令: help imwrite 会有如下解释: If the input array is of class u ...

  2. 深度图像配准(Registration)原理

    机器视觉中,3D相机产生的深度图像(depth image)通常需要配准(registration),以生成配准深度图像(registed depth image).实际上配准的目的就是想让深度图和彩 ...

  3. Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤

    Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤 一.在ubuntu下尝试 1. 在虚拟机VWware Workstation 12. ...

  4. RGB-D(深度图像) & 图像深度

    RGB-D(深度图像)   深度图像 = 普通的RGB三通道彩色图像 + Depth Map   在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像或图 ...

  5. Color Map的生成方法

    /* Return a RGB colour value given a scalar v in the range [vmin,vmax] In this case each colour comp ...

  6. Python 2.7 学习笔记 字典(map)的使用

    python中的字典,就是通常说的map,即 key/value集合的数据结构. 本文来介绍下在python下如何使用字典. 对于map这种数据结构能干什么,我们就不说了,这是一个常见的数据结构,我们 ...

  7. python 字节转换成图像

    python 字节转换成图像 使用base64 1.图片转成字节使用:  base64.b64encode() 2.字节转成图片: base64.b64decode() 图片字节串: iVBORw0K ...

  8. 关于python最大递归深度 - 998

    今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...

  9. PCL深度图像(1)

    目前深度图像的获取方法有激光雷达深度成像法,计算机立体视觉成像,坐标测量机法,莫尔条纹法,结构光法等等,针对深度图像的研究重点主要集中在以下几个方面,深度图像的分割技术 ,深度图像的边缘检测技术 ,基 ...

随机推荐

  1. JS阻止事件冒泡

    在使用JS事件的时候,外层元素事件有可能被里层元素的事件触发,例如点击里层元素外层也触发了点击,这种现象称为事件冒泡.(李昌辉) <div id="wai"> < ...

  2. 理解Java对象的交互:时钟显示程序

    实现: 结构: 对象:时钟  - 对象:小时                 - 对象:分钟 小时和分钟具有相同属性(值,上限),可以用一个类Display来定义这两个对象: 但是两者之间又具有联系( ...

  3. 使用cmd打开java文件,报错:“错误,编码GBK的不可映射字符”

    今天使用EditPlus写了一个小程序,用cmd运行时报错--"错误,编码GBK的不可映射字符". 处理办法是用EditPlus另存为时,把编码格式由UTF-8改为ANSI. 然后 ...

  4. eclipse启动tomcat无法访问

    eclipse启动tomcat无法访问 症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能 ...

  5. 自己实现一个简易web服务器

    一个web服务器是网络应用中最基础的环节. 构建需要理解三个内容: 1.http协议 2.socket类 3.服务端实现原理 1.1 HTTP http请求 一般一个http请求包括以下三个部分: 1 ...

  6. O365(世纪互联)SharePoint 之使用列表库发布新闻

    前言 上一篇文章,我们简单介绍了如何个性化O365的SharePoint站点,本文我们演示一下如何使用SharePoint自带的列表应用程序,定制一个公司新闻的栏目. 其间,用到的主要工具是Share ...

  7. 9套Android实战经典项目资料分享给大家

    通过项目学习收获更大. 1.基于Android平台实战爱短信项目 下载地址:http://pan.baidu.com/s/1hr8CEry 2.Android平台实战CRM客户关系管理(AChartE ...

  8. Appfuse:记录操作日志

    appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...

  9. Oracle 外网访问

    环境:centos7+oracle 11gr2 公网:固定IP 症状:1521端口正常,netmanager配置测试正常,plsql连接提示ORA-12514: TNS:listener does n ...

  10. SE Springer小组之《Spring音乐播放器》可行性研究报告三、四

    3 对现有系统的分析 由于本次可行性分析主要是建立在团队自行实现一个音乐软件的目标上,并不是在一个现有系统的基础上开发改进的新系统.因此这里将分析一款市面上已经存在的音乐软件(以下称为W音乐),并为之 ...