灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中每种灰度出现的频率,如图所示。灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频度,它是图像最基本的统计特征。
即三步:
1.首先需要统计它的灰度级
2.统计各个灰度级想像素个数
3.以图的形式来表示,横坐标灰度级,纵坐标概率或像素个数
横坐标的r代表图像中像素灰度级,作归一化处理后,范围在[0, 1]之间。在灰度级中,r=0代表黑,r=1代表白。对于一幅给定的图像来说,每一个像素取得[0, 1]区间内的灰度级是随机的,也就是说r是一个随机变量。假定对每一瞬间,它们是连续的随机变量,那么就可以用概率密度函数pr ( r )来表示原始图像的灰度分布。如果用直角坐标系的横轴代表灰度级r,用纵轴代表灰度级的概率密度函数pr( r ),这样就可以针对一幅图像在这个坐标系中作出一条曲线来。这条曲线在概率论中就是概率密度曲线,如图所示。
2.性质 灰度直方图表征了图像的一维信息。灰度直方图与图像之间的关系是一对多的映射关系子图直方图之和为整图的直方图即:一个直方图可以对应多幅图像,而一个图像只能对应一副直方图。
需要注意的是直方图并没有反映像素在图中的位置信息。 3.直方图的计算
灰度直方图的计算非常简单,依据定义,在离散形式下,用rk代表离散灰度级,用pr(rk)代表pr( r ),并且有下式成立:
式中:nk为图像中出现rk级灰度的像素数,n是图像像素总数,而nk/n即为频数。在直角坐标系中做出rk与pr(rk)的关系图形,即称为该图像的直方图。
4.重要知识点(1)直方图与图像不是一一对应的:一幅图像对应一个直方图,但直方图并不一定只对应一幅图像。
(2)直方图仅能统计灰度像素出现的概率,反映不出该像素在图像中的位置,即在直方图中,没有体现图像所具有的空间信息。
(3)灰度直方图能够反映灰度图像的对比度。
(4)利用matlab计算图像直方图函数为imhist();具体用法:
imhist( i );直接显示图像i的灰度直方图;
imhist(i,n)n为指定灰度级显示直方图;
[count, x] = imhist( i ) 获取直方图信息,count为每一级灰度像素个数,x为灰度级,x也可以在imhist(i,x)中指定,可以通过stem(x,count)画相应直方图;
(5)所以说直方图不同,大致的能够反映出图像的视觉效果的好坏。
低灰度级集中,则表示比较暗。高灰度级集中,则表示比较亮。中灰度级集中,动态范围不足,对比度比较差。均衡分布的图像,从低到高,像素占据比较均衡。 5.MAITLAB程序1.灰度图
%灰度直方图f=imread('lena.jpg');subplot(121);imshow(f);title('原图');subplot(122);imhist(f);title('灰度直方图');2.柱状直方图
bar(horz,v,width);
v:vertical垂直,向量,包含了将要被绘制的点
horz:horizion水平灰度级间隔,等分成几段来降低分辨率
width:宽度 范围0<=width<=1,默认值0.8
3.杆状图/火柴梗图
stem(horz,v,1,‘color_linestyle_marker’,‘fill’);
v:行向量
horz:水平标度值增量
color_linestyle_marker:线条颜色,线型,标记符号,见下图。
4.拟合曲线图
plot(horz,v,1,‘color_linestyle_marker’);
5.实现灰度直方图的显示
I = imread('beauty.jpg');J=rgb2gray(I);imhist(J);