相同的灰度都有哪些颜色?

缘由

前段时间兴致突起,看了个图像处理的教程。处理时,第一步往往转换为灰度图进行处理,转换的方法是取各通道平均值。各种算法大多建立在这个基础上的。这时,我的疑问就是,同样的灰度之间差别是怎样的?有没有一个图片,转换为灰度图以后是同一种颜色?没错,就是在故意为难图像处理者。当然,我只是想试试。

代码

需要安装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格式的图像就行了。

注意

  1. 生成数据时注意格式一定要为uint8,别的格式在写入图像时可能出错。
  2. 图像格式要用无损压缩格式,开始用的jpg,生成图像重新读取后和期望不符,菜鸟的悲剧。。。

生成的图像

所有图像结果保存在了http://ishare.iask.sina.com.cn/f/61153905.html

先来看几个

图1

 

图2

 

 

图3

图1是比较艳丽的,128.bmp,这个正是我最期望的结果。

图2是64.bmp,图3是192.bmp。

整体的变化趋势为由深到浅,由左上角到右下角(好废话啊这句),有效像素数量由少到多再由多到少,对称。

进一步的想法

  1. 可不可以用在验证码上?灰度的问题不能解决,有些算法就弱爆了。。。
  2. 一般性问题:一副图像,如何转化为最相近的同灰度图像(我不知道应该怎么叫,就叫它同灰度了)?自己想了想,没有试验,也没有好的想法。
  3. 相反的方面:如何解开这个问题?先转换为灰度图再处理的所有方法都不太管用了。处理单个通道似乎也不合适,也许有其他得到灰度的方式,,,好像确实有。
posted @ 2013-09-04 00:21  克斯额的支  阅读(2028)  评论(0编辑  收藏  举报