算法介绍
256色转灰度图是数字图像处理经典算法中最简单的算法之一
1、彩色数字图像中的颜色有红、绿、蓝三种颜色混合而成,对应的像素颜色通道就是RGB(R,G,B),R、G、B数值共有256个数值,也称为256阶,即0—255,计算机通过读取每一个通道的数值而确定显示的颜色。
2、灰度图像只有一个灰度色阶通道,我们可以标记为Gray,或者RGB(Gray、Gray、Gray),Gray共有256阶,即0—255,计算机通过读取该通道的值确定显示的颜色。
那么将彩色图像转换为灰色图像的思路就是将RGB数值转化为Gray数值。共有5种转化方式:
(1)浮点算法 :Gray=R * 0.3+G * 0.59+B * 0.11
(2)整数算法:Gray=(R * 30+G * 59+B * 11)/100
(3)移位算法:Gray =(R28+G151+B*77)>>8
(4)平均值法:Gray=(R+G+B)/3
(5)仅取绿色:Gray=G
下面我将使用Python语言分别实现上述5种方法并查看效果,操作的图像如下所示:
代码实现
在介绍实现代码之前先介绍我们代码中借助的一个类库Matplotlib,它提供了将图像转化为数组的方法array,我们得到图像数组后可以使用坐标得到图像的颜色元组,里面有我们需要的颜色数值信息。
(1)浮点算法 :Gray=R * 0.3+G * 0.59+B * 0.11
代码如下:
from PIL import Image
from pylab import *im = array(Image.open('flower.jpg'))
im[:,:,0] = im[:,:,1] = im[:,:,2] = (im[:,:,0] * 0.3 + im[:,:,1] * 0.59 + im[:,:,2] * 0.11)
imshow(im)
show()
效果如下:
代码讲解:
1、array(Image.open(‘flower.jpg’))可以将一个图像打开并且转化为数组类型,数据类型为元组,里面包含RGB数值信息
2、im[x,y,t]表示(x,y)坐标像素的t通道的数值,不明白 :的话建议复习Python,im[:,:,0] = im[:,:,1] = im[:,:,2] = (im[:,:,0] * 0.3 + im[:,:,1] * 0.59 + im[:,:,2] * 0.11)就将所有像素的所有通道值都改为重新计算后的值,也就是我们的浮点算法
3、最后是显示图像。
(4)平均值法:Gray=(R+G+B)/3
代码如下:
from PIL import Image
from pylab import *im = array(Image.open('flower.jpg'))
im[:,:,0] = im[:,:,1] = im[:,:,2] = (im[:,:,0] + im[:,:,1] + im[:,:,2])/3
imshow(im)
show()
效果如下:
代码讲解:
其实和上一个大体一样,只是算法不一样
(5)仅取绿色:Gray=G
代码如下:
from PIL import Image
from pylab import *im = array(Image.open('flower.jpg'))
im[:,:,0] = im[:,:,1] = im[:,:,2] = im[:,:,2]
imshow(im)
show()
效果如下: