灰度直方图统计实际上是一个一维的离散函数,即有:H(k)=nk/N k=0,j,2,~,L-1
上式中k代表图像的特征取值,L是特征可取值的个数,nk是图像中具有特征值为k的像素个数,N是图像像素的总数。
此方法较简单,计算量小,可以粗略地得到颜色的分布特征。然而,该方法有两个缺点:一是只基于灰度,并不能很好的表达出图像的真实颜色信息;二是灰度直方图并不能表达出图片灰度的空间分布。这种表示法虽然简单但是跟人类的视觉感知存在差距。
matlab 代码实现如下:
%%%灰度图象的直方图数据%%%
clc
clear all
fn='rice.png';
I=imread(fn);
J=I;
%计算灰度图象的直方图数据
L=256;%灰度级
Ps=zeros(L,1)
%统计直方图结果数据
nk=zeros(L,1);
[row,col]=size(I);
n=row*col;%总像素个数
for i=1:row
for j=1:col
num=double(I(i,j))+1;%获取像素点灰度级
nk(num)=nk(num)+1;%统计nk
end
end
%计算直方图概率估计 for i=1:L Ps(i)=nk(i)/n; end figure;
subplot(2,1,1);imshow(J),title('原图');
subplot(2,1,2),plot(nk),title('直方图(nk)');
% 下面几段代码效果和上面的一样。
p=imhist(I);%生成直方图函数,返回灰度图象直方图数据
figure
subplot(2,1,1);imshow(J),title('原图');
subplot(2,1,2),plot(p),title('直方图(p)');
效果如下: