相同的灰度都有哪些颜色?
缘由
前段时间兴致突起,看了个图像处理的教程。处理时,第一步往往转换为灰度图进行处理,转换的方法是取各通道平均值。各种算法大多建立在这个基础上的。这时,我的疑问就是,同样的灰度之间差别是怎样的?有没有一个图片,转换为灰度图以后是同一种颜色?没错,就是在故意为难图像处理者。当然,我只是想试试。
代码
需要安装PIL、numpy
代码如下
#!python #-*- coding: utf-8 -*- from PIL import Image import numpy as np def get_data(gray): def _get_data(i, j): k = 3 * gray - i - j return [i, j, k] if check(i, j, k) else [255, 255, 255] return [[_get_data(i, j) for i in range(256)] for j in range(256)] def check(r, g, b): return all([0<=it<256 for it in [r, g, b]]) if __name__ == '__main__': for k in range(256): data = np.array(get_data(k), dtype='uint8') # important im = Image.fromarray(data) im.save('images_2/%d.bmp' % k) print 'NO.%d done..' % k
思路
0-255的灰度各一张255*255的图片,第n个(0<=n<256)图片的第(i, j)位置设置颜色为(i, j, 3*n-i-j),当然,需要对颜色的RGB值先做检查,不合格的用白色(255, 255, 255)代替。
最后将得到的数据保存为bmp格式的图像就行了。
注意
- 生成数据时注意格式一定要为uint8,别的格式在写入图像时可能出错。
- 图像格式要用无损压缩格式,开始用的jpg,生成图像重新读取后和期望不符,菜鸟的悲剧。。。
生成的图像
所有图像结果保存在了http://ishare.iask.sina.com.cn/f/61153905.html
先来看几个
图1
图2
图3
图1是比较艳丽的,128.bmp,这个正是我最期望的结果。
图2是64.bmp,图3是192.bmp。
整体的变化趋势为由深到浅,由左上角到右下角(好废话啊这句),有效像素数量由少到多再由多到少,对称。
进一步的想法
- 可不可以用在验证码上?灰度的问题不能解决,有些算法就弱爆了。。。
- 一般性问题:一副图像,如何转化为最相近的同灰度图像(我不知道应该怎么叫,就叫它同灰度了)?自己想了想,没有试验,也没有好的想法。
- 相反的方面:如何解开这个问题?先转换为灰度图再处理的所有方法都不太管用了。处理单个通道似乎也不合适,也许有其他得到灰度的方式,,,好像确实有。