彩色图像与灰度图像之间的转换
一.彩色图像简介
在RGB色彩空间,图像深度与色彩的映射关系主要有真彩色、伪彩色和调配色。
真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色,是真实的原图彩色。
伪彩色图像的每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT中某一项的入口地址,根据该地址可查找出包含实际R,G,B的强度值。这种用查找映射的方法产生的色彩称为伪彩色。色彩查找表CLUT是一个事先做好的表,表项入口地址也称为索引号。彩色图像本身的像素数值和色彩查找表的索引号有一种变换关系,这种关系可以是系统定义的,也可以是用户自己定义的变换关系。使用查找得到的数值显示的彩色是真的,可又不是图像本身的颜色,因为其没有完全反映原图的彩色,所以称其为伪彩色。
调配色的获取是通过每个像素点的R,G,B分量分别作为单独的索引值进行变换,经相应的色彩查找表找出各自的基色强度,用变换后的R,G,B强度值产生色彩。
二.灰度图像简介
灰度是描述灰度图像内容的最直接的视觉特征。它指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图像也称灰度图像。灰度图像矩阵元素的取值通常为[0,255],因此其数据类型一般为8位无符号整数,这就是人们通常所说的256级灰度。
三.彩色图像转化为灰度图像
彩色图像转换为灰度图像时,需要计算图像中每个像素有效的亮度值,其计算公式为:
Y = 0.3R + 0.59G + 0.11B
代码如下:
clear all; close all; I = imread('lenna.png'); [M N H] = size(I); I2 = zeros(M, N); for x = 1 : M for y = 1 : N A = double([I(x, y, 1) I(x, y, 2) I(x, y, 3)]); B = [0.3; 0.59; 0.11]; [gray] = A * B; % 计算灰度值 I2(x, y) = gray; end end imshow(uint8(I2));
四.灰度图像转换为彩色图像
将灰度图像转换为彩色图像,称为灰度图像的伪彩色处理。
伪彩色处理技术的实现方式有很多,如:灰度分割法、灰度级-彩色变换法、滤波法等等。以下采用的是灰度级-彩色变换法,这是将来自传感器的灰度图像送入三个不同特征的R、G、B变换器,然后将三种变换器的不同输出分别送到彩色显示器进行显示的技术。
映射关系如下,其中R(x,y)、G(x,y)、B(x,y)分别表示R、G、B通道的颜色值,f(x,y)表示特定点灰度图像的灰度值,f是所选灰度图像的灰度值。
代码如下:
clear all; close all; I = imread('lenna.jpg'); [M N] = size(I); I2 = zeros(M, N, 3); for x = 1 : M for y = 1 : N if I(x, y) <= 127 % R I2(x, y, 1) = 0; elseif I(x, y) <= 191 I2(x, y, 1) = 4 * I(x, y) - 510; else I2(x, y, 1) = 255; end if I(x, y) <= 63 % G I2(x, y, 2) = 254 - 4 * I(x, y); elseif I(x, y) <= 127 I2(x, y, 2) = 4 * I(x, y) - 254; elseif I(x, y) <= 191 I2(x, y, 2) = 255; else I2(x, y, 2) = 1022 - 4 * I(x, y); end if I(x, y) <= 63 % B I2(x, y, 3) = 255; elseif I(x, y) <= 127 I2(x, y, 3) = 510 - 4 * I(x, y); else I2(x, y, 3) = 0; end end end imshow(uint8(I2));