(1)基本概念
如果将图像中的像素灰度等级考虑为一个伴随变量(在概率论中学到的伴随变量对于后续直方图的均匀化是极其重要的),则可以用PDF )来描绘,即灰度直方图(histogram ) 这表示图像中具有某一灰度级的像素的数量,反映了各个灰度级出现的频率。 直方图的横轴为灰度,纵轴为该灰度的像素数(出现频率),是图像的基本统计特性。
从基本概念可知,直方图是图像中各像素的灰度值的出现次数的统计结果,仅反映该图像中不同灰度值的出现次数(或者度数),不反映该灰度值的像素所在的位置。 也就是说,直方图中只包含该图像中某灰度值的像素出现的概率,该位置信息丢失了。
)2)编码的实现
MATLAB的“图像工具箱”提供了imhist函数,用于显示图像的灰度直方图。 语法为以下:
imhist(I;
imhist(I,n );
计数,x]=imhist(…;
其中,I是计算出的灰度直方图的图像。 参数n是指定的灰度数,对于灰度图像,默认情况下n为256,即0到255。 2值图像时,n为2,也就是0~1的2级灰度。 如果指定参数n,所有灰度将均匀分布在n个单元格之间,而不是展开。 返回值counts和x是直方图的数据矢量和对应的灰度区间矢量,理解为直方图的纵轴矢量和横轴矢量。
虽然调用现成的函数很方便,但是会屏蔽内部实现机制和算法,以后移植也不方便,所以今后的学习尽量自己写函数。 虽然不太会做matlab编程,但是我觉得掌握起来并不困难。 接下来,为了制作灰度直方图,自己开始编程。
I=RGB 2格雷(即时读取(2. jpg ) ); 获取并转换%灰度图像[m,n]=size(I ); %取得图像尺寸,m为行数,n为列数k=m*n; %总像素数y=Zeros(1,256 ); 用于存储%灰度统计结果数据的矢量forI=1:mforj=1:ny(I(I,j )1)=y ) I ) I,j )1) 1; %灰阶为0~255,向量y的下标为1~256 endend subplot (1,2,1 )、imhist(I )、title ) ‘ originalhistogram ‘; subplot (1,2,2 ),bar ),title ) ) ‘我的历史记录); clear )。
从像素灰度的分布来说,可以看出两图大致相同,但仍有小的缺陷:
1 .两个直方图的纵轴刻度不同,差了一个等级,所以乍一看看起来不太一样。
2.bar(y )函数的这种使用方法默认的横坐标的刻度范围为1(length ) y ),在本程序中为1 ) 256,这是与灰度级的范围0 ) 255的偏差,是亮度分布、对比度等的偏差
针对上述两个缺陷,改进的代码如下。
I=RGB 2格雷(即时读取(2. jpg ) ); 获取并转换%灰度图像[m,n]=size(I ); %取得图像尺寸,m为行数,n为列数k=m*n; %总像素数y=Zeros(1,256 ); 用于存储%灰度统计结果数据的矢量forI=1:mforj=1:ny(I(I,j )1)=y ) I ) I,j )1) 1; %灰阶为0~255,向量y的下标为1~256 endend subplot (1,2,1 )、imhist(I )、title ) ‘ originalhistogram ‘; x=0:255; subplot (1,2,2 ),bar ) x,y ),axis ) [ 0,255,0,140000 ],标题) ‘我的历史记录’; clear )。