一种基于直方图均衡化的图像增强方法 摘要:直方图均衡化就是把一已知灰度概率分布的图像经过一种变换,使之演变成一幅具有均 匀灰度概率分布的新图像。它是以累积分布函数变换法为基础的直方图修正法。本文分析和 总结了灰度直方图的均衡化算法并通过 MATLAB 实验验证了该方法能有效达到图像增强的目 的。 关键词:直方图;均衡化;图像增强 A Method On Histogram Equalization For Image Enhancement Abstract: As is known about the probability distribution of gray scale of an image ,histogram equalization is to make the image got transformed by a kind of transformation, and to make it turned into a new image with the probability of gray scale distributed evenly. It is a method of histogram modification based on the method of transformation on cumulative distribution function. This paper analyzes and summarizes the equalization algorithm of gray histogram and testifies the validity of this algorithm by MATLAB experiment and it shows that this method can effectively achieve the purpose of image enhancement. Keywords: Histogram; Equalization; Iamge Ehancement 1、 引言 在实际应用中,无论采用何种输入装置采集的图像,由于光照、噪声等原因,图像的质 量往往不能令人满意。例如,检测对象物的边缘过于模糊;在比较满意的一幅图像上发现多 了一些不知来源的黑点或白点;图像的失真、变形等等。所以图像往往需要采取一些手段进 行改善以求达到较好的效果。图像增强技术正是在此基础上提出的。图像增强是图像分析与 处理的一个重要的预处理过程,其主要有两个目的:一是运用一系列技术手段改善图像的视 觉效果,提高图像的清晰度; 二是将图像转化成一种更适合于人或计算机进行分析处理的形式。 即改善图像质量是图像增强的根本目的。图像增强的意义一般可以理解为:按需要进行适当 的变换,对图像的某些特征,如边缘、轮廓、对比度进行强调或锐化,突出某些有用的信息, 去除或消弱无用的信息以便于显示、观察或进一步分析和处理。 图像增强处理方法根据图像增强处理所在的空间不同,可分为基于空间域的增强方法和 基于频率域的增强方法两类。空间域处理方法是在图像像素组成的二维空间里直接对每一个 像素的灰度值进行处理,它可以是一幅图像内像素点之间的运算处理,也可以是数幅图像间 的相应像素点之间的运算处理。频率域处理方法是在图形的变换域对图像进行间接处理。其 特点是先将图像进行变换, 在空间域对图像作傅里叶变换得到它的频谱按照某种变化模型 (如 傅里叶变换)变换到频率域,完成图像由空间域变换到频率域,然后在频率域内对图像进行 低通或高通频率域滤波处理。处理完之后,再将其反变换到空间域。 直方图均衡化算法是图像增强空域法中的最常用、最重要的算法之一。它以概率理论作 基础,运用灰度点运算来实现直方图的变换,从而达到图像增强的目的。本文介绍一种基于 累积分布函数变换法为基础的直方图修正法。它可以通过对直方图进行均匀化修正,可使图 像的灰度间距增大或灰度均匀分布、增大反差,是图像的细节变得清晰。 2、 直方图修正技术的基础 一幅给定图像的灰度级经归一化处理后, 分布在 0 ? r ? 1范围内。 这时可以对[0,1]区间内 的任一个 r 值进行如下变换: s ? T (r ) (1) 也就是说,通过上述变换,每个原始图像的像素值 r 都对应产生一个 s 值。变换函数 T ( r ) 应 该满足下列条件: ① 在 0 ? r ? 1区间内, T ( r ) 是单值单调增加; ② 对于 0 ? r ? 1,有 0 ? T (r ) ? 1 这里第一个条件保证了图像的灰度级西欧哪个白到黑的次序不变和反变换函数 T ( s ) 的 存在。第二个条件则保证了映射变化后的像素灰度值在允许的范围内。从 s 到 r 的反变换可用 式(2)表示,同样也满足上述两个条件 ?1 r ? T (s) ?1 (2) 由概率论理论可知,若已知随机变量 ? 的概率密度为 Pr (r ) ,而随机变量? 是 ? 的函数, 即 ? ? T (? ) ,? 的概率密度为 Ps ( s ) ,所以可以由 Pr (r ) 求出 Ps ( s ) 。 ' 因为 s ? T (r ) 是单调增加的,由数学分析可知,它的反函数 r ? T ( s ) 也是单调函数。在 这种情况下,当? ? s ,且仅当 ? ? r 时发生,所以可以求得随即变量? 的分布函数为: ?1 F? ( s ) ? P(? ? s ) ? p[? ? r ] ? ?? ? p ( x)dx r r (3) 对式(3)两边求导,即可得到随即变量? 的分布密度函数 Ps ( s ) 为: Ps ( s) ? Pr (r ) ? dr d dr ? pr (r ) ? [T ?1 ( s)] ? [ pr (r ) ? ]r ?T ?1 ( s ) ? T ?1 ( s) ds ds ds (4) 由式(4)可知,对于连续情况,设 Pr (r ) 和 Ps ( s ) 分别表示原图像和变换后图像的灰度级 概率密度函数。根据概率论的知识,在已知 Pr (r ) 和变换函数 s ? T (r ) 时,反变换函数 r ? T ( s) 也是单调增长,则 Ps ( s ) 可由式(4)求出。 3、直方图的均衡化 对于连续图像,设 r 和 s 分别表示被增强图像和变换后图像的灰度。为了简单,在下面的 讨论中,假定所有像素的灰度已被归一化了,就是说,当 r ? s ? 0 时,表示黑色;当 r ? s ? 1 ?1 时,表示白色;变换函数 T ( r ) 与原图像概率密度函数 Pr (r ) 之间的关系为: s ? T (r ) ? ? pr (r )d (r ) 0 r 0 ? r ?1 (5) 式中:r 为积分变量。式(5)的右边可以看作是 r 的累积分布函数(CDF) ,因为 CDF 是 r 的函数,并单调地从 0 增加到 1,所以这一变换函数满足了前面所述的关于 T ( r ) 在 0 ? r ? 1 内单值单调增加,对于 0 ? r ? 1,有 0 ? T (r ) ? 1 的两个条件。 由于累积分布函数是 r 的函数, 并且单调的从 0 增加到 1, 所以这个变换函数满足对式 (5) 中的 r 求导,则: ds ? Pr (r ) dr 再把结果带入式(4) ,则 (6) ps ( s) ? [ pr (r ) dr d 1 1 ]r ?T ?1 ( s ) ? pr (r ) [ ]r ?T ?1 ( s ) ? [ pr ( r ) ] ?1 ds ds ds / dr pr (r ) (7) 由以上推到可见,变换后的变量 s 的定义域内的概率密度是均匀分布的。由此可见,用 r 累积分布函数作为变换函数可产生一幅灰度级分布具有均匀概率密度的图像。其结果扩展了 像素取值的动态范围。 上面的修正方法是以连续随机变量为基础进行讨论的。为了对图像进行数字处理,必须 引入离散形式的公式。当灰度级是离散值的时候,可用频数近似代替概率值,即: pr (rk ) ? nk N ( 0? rk ? 1 k ? 0,1, 2,…,L-1) (8) 式中,L 是灰度级数; pr (rk ) 是取第 k 级灰度值的概率; nk 是在图像中出现第 k 级灰度 的次数;N 是图像中像素数。 通常把为得到均匀直方图的图像增强技术叫做直方图均衡化处理或直方图线性化处理。 式(5)的直方图均衡化累积分布函数的离散形式可由式(9)表示: sk ? T (rk ) ? ? i ?0 k nj N ? ? pr (rj ) i ?0 k (0 ? rj ? 1 k ? 0,1, 2,…,L-1) (9) (10) 其反变换为 rk ? T ?1 ( sk ) 4、 直方图均衡化的算法步骤 直方图均衡化的算法步骤如下: ? 列出原始图像和变换后图像的灰度级:I,j=0,1,,L-1,其中 L 是灰度级的个数; ? ? 统计原图像各灰度级的像素个数 ni ; 计算原始图像直方图: p(i ) ? ni ,N 为原始图像像素总个数; N ? 计算累积直方图: p j ? ? p (k ) ; k ?0 j ? ? ? 利用灰度变换函数计算变换后的灰度值,并四舍五入: j ? INT [( L ? 1) p j ? 0.5] ; 确定灰度变换关系 i ? j ,据此将原图像的灰度值 f (m, n) ? i 修正为 g (m, n) ? j ; 统计变换后各灰度级的像素个数 n j ; 计算变换后图像的直方图: p( j ) ? ? nj N 5、 实验结果 对一幅拍摄效果较差的图像进行直方图均衡化处理,得到的实验结果如下四幅图所示: 从图像效果方面来看,比较图 1 和图 2,显然经直方图均衡化处理后的图像比原图像清晰 得多,细节也能够很好地分辨出来,如云层,山上的植被等都可以分辨出来了。从直方图方 面来看,图 4 所示是均衡化后的直方图,对比原图像直方图 2,灰度范围有了较大扩展,而且 分布也比原图像更加均衡,层次感明显增强。如能选用灰度范围较窄的图像,实验效果会更 好。 8000 7000 6000 5000 4000 3000 2000 1000 0 原始图像直方图 0 原始图像 50 100 150 200 250 图 1 原始图像图 9000 8000 7000 6000 5000 4000 3000 2000 1000 0 2 原始图像直方图 均衡化后直方图 0 均衡化图像 50 100 150 200 250 图 3 均衡化后图像 图 4 均衡化后直方图 6、 结束语 本文所提出的直方图均衡化算法,简单明了,易于实现,均衡化后的各灰度级更加均衡, 接近理想值。同时对于灰度范围小,直方图分布极不均匀的图像,可人为的适当的扩大灰度 范围,均衡化后能取得较好的层次感,使图像信息变得更清晰。此方法在图像增强方面,有 很大的实用价值。 7、参考文献 [1] 扬帆等.数字图像处理与分析[M].北京:空航天大学出版社,2007 [2] 图象处理与分析.北京:科学出版社,1992 [3] 车国泉,秦军,陈于林.一种基于直方图均衡化改进的图像增强方法[J].四川测绘 2007,30(4) 附录:实验源程序 clc; clear; I=imread('F:\experiment\emeishan.jpg'); I=I(:,:,1); % 像素值取 RGB 中的一层 [m,n]=size(I); %获得原图像 I 的行列数。 pre_mat=zeros(1,256); %为变换前后的直方图分别申 请矩阵。 aft_mat=zeros(1,256); for i=1:m for j=1:n pre_mat(I(i,j)+1)=pre_mat(I(i,j)+1)+1; %统计各灰度级的像素总数。 end end aft_mat(1)=aft_mat(1)/(m*n); for k=2:256 s(k)=pre_mat(k)/(m*n); %计算出灰度的概率。 aft_mat(k)=aft_mat(k-1)+s(k); %累积直方图。 end M=zeros(m,n); %申请 m*n 阶矩阵用于装入处理后的各灰度级概率。 aft_mat=aft_mat*255; for i=1:m for j=1:n M(i,j)=aft_mat(I(i,j)+1); %将处理后的灰度装入新的矩阵。 end end J=uint8(M); %转成 unit8 型。 figure(1); %显示原图像和直方图 imshow(I); xlabel('原始图像'); figure(2); imhist(I); xlabel('原始图像直方图') figure(3); imshow(J); xlabel('均衡化图像'); figure(4); imhist(J); xlabel('均衡化后直方图'); %显示均衡化后的图像和直方图