在生活中,我们经常遇见RGB(红色、绿色和蓝色)组成的色彩空间内的图像,然而我们想要进一步对其进行处理时,往往需要先将其转换为灰度图像,那么什么是灰度图像呢?
一、灰度图像
灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。
因此,可以这样理解灰度图像,灰度图像即为一张单通道颜色组成的图像,每个像素可以拥有不同的颜色深度。
二、灰度值的计算
根据不同的计算方法,我们就可以得到不同的灰度值大小,如下所示。
1、加权平均值
由于人眼对绿色较为敏感,所以我们往往在计算灰度值时赋予绿色通道较大的权重,例如,matlab中内嵌的rgb2gray函数就是采用了如下公式进行计算:
2、算数平均
算数平均采用如下公式:
3、几何平均
几何平均采用如下公式:
4、调和平均
调和平均采用如下公式:
5、最小值
公式如下:
6、最大值
公式如下:
7、最大最小值均值
公式如下:
8、中值
公式如下:
三、代码实现
上述各种灰度值计算的代码如下所示:
% Matlab
% Read Image
A = imread('ngc6543a.jpg');
% rgb2gray (weighted mean)
A_rg = rgb2gray(A);
subplot(2,4,1)
image(A_rg)
title('weighted mean')
% Arithmetic mean
A_am = mean(A,3);
subplot(2,4,2)
image(A_am)
title('arithmetic mean')
% Geometric mean
A_gm = prod(A,3).^(1/3);
subplot(2,4,3)
image(A_gm)
title('geometric mean')
% Harmonic mean
A_hm = 3./sum(1/A,3);
subplot(2,4,4)
image(A_hm)
title('harmonic mean')
% min
A_min = min(A,[],3);
subplot(2,4,5)
image(A_min)
title('min')
% max
A_max = max(A,[],3);
subplot(2,4,6)
image(A_max)
title('max')
% (min+max)/2
A_maxmin = (max(A,[],3)+min(A,[],3))/2;
subplot(2,4,7)
image(A_maxmin)
title('(min+max)/2')
% median
A_median = median(A,3);
subplot(2,4,8)
image(A_median)
title('median')
% Histogram
figure
subplot(2,4,1)
histogram(A_rg,256)
title('weighted mean')
subplot(2,4,2)
histogram(A_am,256)
title('arithmetic mean')
subplot(2,4,3)
histogram(A_gm,256)
title('geometric mean')
subplot(2,4,4)
histogram(A_hm,256)
title('harmonic mean')
subplot(2,4,5)
histogram(A_min,256)
title('min')
subplot(2,4,6)
histogram(A_max,256)
title('max')
subplot(2,4,7)
histogram(A_maxmin,256)
title('(min+max)/2')
subplot(2,4,8)
histogram(A_median,256)
title('median')
效果如下:
从图中可以发现,使用rgb2gray函数的效果较佳,其余几种计算方法都不能较好的区分色彩信息。