图像直方图均衡化的程序设计
目 录
摘要 ............................................................................................................................... 1 1. 概述 .......................................................................................................................... 2 2. 理论知识 .................................................................................................................. 3
2.1直方图处理的基础 . ................................................................................................................ 3 2.2直方图均衡化 . ........................................................................................................................ 4
2.2.1直方图均衡化理论 ................................................................................................................................. 4 2.2.2 直方图均衡化算法 ................................................................................................................................ 6
3. MATLAB实现 ......................................................................................................... 7
3.1实验预备知识 . ........................................................................................................................ 7 3.2 实验代码及结果 .................................................................................................................... 7
4. 结果分析 ................................................................................................................ 11 5. 心得体会 ................................................................................................................ 13 参考文献 ..................................................................................................................... 14
摘要
图像增强作为数字图像处理的重要部分,直方图均衡化又作为图像增强的一种手段。报告书中探讨了直方图的理论基础,直方图均衡化的概念及理论,以MATLAB 为平台,对灰度图像进行直方图均衡化的实验,并给出了具体程序、实验结果图像。实验结果表明,经直方图均衡化后,图像的对比度及亮度提高,直方图均衡化处理能有效改善灰度图像的质量。
关键词:数字图像处理,直方图,均衡化,MATLAB
1. 概述
图像按照色彩分类,可以分为灰度图像和彩色图像。灰度图像在黑色与白色之间还有许多级的颜色深度,灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度。这种精度刚刚能够避免可见的条带失真,并且非常易于编程。本次研究正是基于灰度图像。
灰度级直方图是图像的一种统计表达,它反应了该图中不同灰度级出现的统计概率。由于图像的视觉效果与直方图有对应关系,即直方图的形状和改变对视觉的感知影响很大,因此采用直方图变换的方式可以增强图像。图像增强技术可以改善图像的视觉效果,以便人眼或机器对图像进一步理解。
图像增强与受关注物体特性、观察者的习惯和处理目的有关,因此,图像增强算法的应用是有针对性的,并不存在通用的算法。图像增强的基本方法分为两大类:空间域方法和频域方法。“空间域”一词是指图像平面本身,这类方法是以对图像的像素直接处理为基础的。“频域”处理技术是以修改图像的傅氏变换为基础的。直方图均衡化是空间域的点运算处理技术。直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法,使用累积函数对灰度值进行“调整”以实现对比度的增强。直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
2. 理论知识
2.1直方图处理的基础
灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数。确定图像像元的灰度值范围,以适当的灰度间隔为单位将其划分为若干等级,以横轴表示灰度级,以纵轴表示每一灰度级具有的像元数或该像元数占总像元数的比例值,做出的条形统计图即为灰度直方图。灰度级直方图是图像的一种统计表达,它反应了该图中不同灰度级出现的统计概率。灰度级[0,L-1]范围的数字图像的直方图具有如下离散函数:
h (k )=n k …………………………………… …(2.1)
式中,k 是第k 级灰度,n k 是图像中灰度级为k 的像素个数。进行归一化,则概率:
p r (k )=
n k
……………………………………(2.2) n
式中,n 为图像中像素的总数。
设r 和S 分别表示归一化了的原图像灰度和经直方图修正后的图像灰度。即0≤r ,S ≤1,对[0,1]区间内的任一个r 值都可产生一个S 值,且
S =T(r )………………………………………(2.3)
T (r )为变换函数。T (r )满足下列条件: a. 在 0≤r ≤1 区间内是单值单调增加函数; b. 对于 0≤r ≤1,有0≤T (r )≤1。
条件a 保证灰度级从黑到白的次序,而条件b 确保映射后的像素灰度在允许的范围内。
从S 到r 的反变换关系为
(2.4) r =T -1(S )……………………………………
T -1(S )对r 同样满足上述条件。
由概率论知,若P 和变换函数S =T (r )已知,T -1(S )是单值单调增加函(r r )数,则变换后的概率密度函数P s (S )如公式2.5所示:
⎡P (r )dr ⎤-1
= (2.5) P s (S )= ⎢r (S ) ……………………T ⎥dS ⎣⎦r
直方图修正从本质上说就是从T (r )入手,调整图像的概率密度函数从而改变图像的特征。
一般来说,如果图像的直方图轮廓线越接近正态分布,则说明图像的亮度接近随机分布,适合用统计方法处理,这样的图像一般反差适中;如果直方图峰值位置偏向灰度值大的一边,图像偏亮;如果峰值位置偏向灰度值小的一边,图像偏暗;峰值变化过陡、过窄,则说明图像的灰度值过于集中,后三种情况均存在反差小、质量差的问题。直方图分析是图像分析的基本方法,通过有目的地改变直方图形态可改善图像的质量。
2.2直方图均衡化
为了使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的,通常采用直方图均衡化及直方图规定化两种变换。本文主要介绍直方图均衡化并进行实验。
2.2.1直方图均衡化理论
直方图均衡化(Histogram Equalization)又称直方图平坦化,实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等。这样,原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较平的分段直方图:如果输出数据分段值较小的话,会产生粗略分类的视觉效果。
图像直方图描述图像中个灰度级出现的相对频率。基于直方图的灰度变换,可调整图像直方图到一个预定的形状。例如,一些图像由于其灰度分布集中在较窄的区间,对比度很弱,图像细节看不清。此时,可采用图像灰度直方图均衡化处理,使得图像的灰度分布趋向均匀,图像所占有的像素灰度间距拉开,加大了
图像反差,改善视觉效果,达到增强目的。从人眼视觉特性来考虑,一副图像的直方图如果是均匀分布的,该图像色调给人的感觉比较协调。
假定原始图像灰度级r 归一化在0—1之间,即0≤r ≤1。p r (r )为原始图像灰度分布的概率密度函数,直方图均衡化处理实际上就是寻找一个灰度变换函数
T ,是变换后的灰度值满足s =T (r ),其中,s 归一化为0≤s ≤1,建立r 与s 之
间的映射关系,要求处理后图像灰度分布的概率密度函数p s (s )=1(变换后概率密度为0—1上的均匀分布),期望所有灰度级出现的概率相同,可以描述为: a. 当0≤s ≤1 时,p s (s )=1; b. 当s 为其他时,p s (s )=0。
直方图均衡变换函数如图2.1所示。
图2.1 直方图均衡变换函数
从图2.1中可以看出在灰度变换的dr 和ds 区间内,像素点个数是不变的,因此有:
⎰
r j +dr
r j
p r (r )dr =⎰
s j +ds
s j
p s (s )ds ………………………(2.6)
当dr →0,ds →0,略去小标j ,有:
ds p r (r )………………………………………(2.7) =
dr p s s 由于s =T (r ),p s (s )=1,则灰度变换函数为:
ds dT (r )==p r (r ),最终得到直方图均衡化的dr dr
r
s =T (r )=⎰p r (r )dr ……………………………(2.8)
它是原始图像灰度r 的累积分布函数(Cumulative Density Function,CDF )。
2.2.2 直方图均衡化算法
直方图均衡化算法将原图像的直方图改变为在整个灰度范围内基本均匀地分布的形式,由此扩大了像素灰度的动态范围,从而增强了图像的对比度。直方图均衡化算法步骤为:
1) 给出原始图像的所有灰度级r k (k=0,1,…,L-1) 。 2) 统计原始图像各灰度级的像素数n k 。
3) 根据原图像,计算灰度直方图:
n k ) =(k =0, 1. L -. . ……………………………1) P (r (2.9) k
n
式中, n 为总像素数, n k 为灰度级r k 的像素数。 4) 计算原始图像的累积直方图:
k
n i
t k =T (r k ) =∑=∑P r (r i ) (0≤r k ≤1, k =0,1...L-1)…………(2.10)
i =0n i =0
k
5) 取整计算:
[(-t k 1+) U k =i n t N
k
] ……………………………(2.11) N
6) 确定映射关系:
r k →U k
7) 统计新直方图各灰度级U k 的像素数目n k 。 8) 计算新的直方图:
P (t k ) =
n k
…………………………………(2.12) n
3. MATLAB实现
选择一幅256级的灰度图像(本次实验的灰度图像由RGB 图像转换得到),计算该图像的直方图,得到其直方图图形,根据图像直方图的均衡化原理进行直方图均衡化,保存变换后的图像,并显示均衡化后的直方图。
3.1实验预备知识
MATLAB 中应用函数bar( )可以绘制直方图,这对统计或者数据采集非常直观实用。bar 函数用来绘制二维直方图,调用格式为bar(x,y),其中x 必须为单调递增或递减,y 为n m 矩阵,可视化结果为m 组。
imhist 函数功能:计算和显示图像的色彩直方图,格式:imhist(I,n), 其中,n 为指定的灰度级数目,缺省值为256。
3.2 实验代码及结果
程序代码如下:
I=rgb2gray(imread('1.jpg')); %RGB图像转为灰度图像并读取 figure;
subplot(2,2,1),imshow(I);title('原图');
[m,n]=size(I); %测量图像尺寸参数
GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255
GP(k+1)=length(find(I==k))/(m*n); %计算每级灰度出现的概率,存入GP 中 end
subplot(2,2,2),bar(0:255,GP,'g'); %绘制直方图 title('原图像直方图') xlabel('灰度值') ylabel('出现概率')
S1=zeros(1,256); for i=1:256 for j=1:i
S1(i)=GP(j)+S1(i); end end
S2=round((S1*256)+0.5); for i=1:256
GPeq(i)=sum(GP(find(S2==i))); end
subplot(2,2,3),bar(0:255,GPeq,'b') title('均衡化后的直方图') xlabel('灰度值') ylabel('出现概率') I1=I; for i=0:255
I1(find(I==i))=S2(i+1); end
subplot(2,2,4),imshow(I1) title('均衡化后图像') imwrite(I1,'PicEqual.bmp');
运行之后得到结果图3.1所示。
图3.1 程序结果图(一)
用matlab 库函数对该图像进行直方图均衡化,并显示均衡化后的直方图,程序代码如下:
I=rgb2gray(imread('1.jpg')); figure;
subplot(2,2,1),imshow(I); title(' 原图' );
subplot(2,2,2),imhist(I); title(' 原图像直方图' ); [J,T]=histeq(I,256); subplot(2,2,3),imshow(J); title(' 均衡化后图像' ); subplot(2,2,4),imhist(J);
title(' 均衡化后的直方图' );
运行之后得到结果如图3.2所示。
图3.2 程序结果图(二)
4. 结果分析
由两种不同方法所得到的直方图均衡化的结果图4.1和图4.2所示。
图4.1 结果图一
图4.2 结果图二
由实验结果可知:
(1)变换后直方图趋向平坦,灰度级减少,灰度合并。
(2)原始图像含有像素多的几个灰级间隔被拉大了,压缩的只是像素数少的几个灰度级,实际视觉能接收的信息量大大地增强了。
由原图显示的图像及其直方图可知这幅图像最为突出的特点是较暗且动态范围较低。直方图的宽度相对于整个灰度范围来说非常狭窄,图像质量比较差;在MATLAB 环境下进行直方图的均衡化,对图像的亮度范围进行拉伸,以提高对比度。经过直方图均衡化,图像的对比度及平均亮度明显提高,图像质量提高。将两幅结果图进行对比可发现,用MATLAB 库函数对该图像进行直方图均衡化的效果明显高于用均衡化原理编写的程序对该图像进行直方图均衡化的效果。
直方图均衡化是图像增强技术的基本方法,本次课设分析了这种处理方法的基本理论,并用MATLAB 进行实验,结果表明,直方图均衡化在一定程度上改善了图像的对比度差和灰度动态范围,增强了图像的可读性,是一种行之有效的图像增强算法。
5. 心得体会
通过本次课程设计,我进一步巩固了数字图像处理的相关知识,再次熟悉了MATLAB 的编程过程,学到了很多知识,我感觉受益匪浅。
图像作为人类感知世界的视觉基础,是人类获取信息、表达信息和传递信息的重要手段。数字图像处理技术已经成为信息科学、计算机科学、工程科学、生物科学、地球科学等学科研究的热点。对于一名研究信息处理的学生,我感觉十分有必要学好数字图像处理。本次所研究的直方图均衡化就是数字图像处理下的图像增强技术。图像增强技术可改善图像的视觉效果,是一种以主观感受为导向的技术。MATLAB 可以作为数字图像处理的实验工具,可以方便我们的研究。
本次课程设计总体来说较为简单,属于数字图像处理的基础性实验,但是,尽管实验过程较为顺利,我还是学到了以前没有学到的知识。在实验之前,我仅会直方图均衡化的相关计算,对软件的处理方面较为模糊;实验之后,我不仅掌握了MATLAB 的相关编程,还对MATLAB 的函数调用有了进一步的理解。
能够成功地利用MATLAB 进行图像增强处理,我感觉自己的综合运用能力有了进一步的提升。首先,我觉得要对直方图均衡化的原理及算法要有较为详细的了解,同时,也要熟悉MATLAB 的编程算法,只有全面地分析问题,学会综合运用,才能达到预期的目的。
参考文献
[1]杨杰. 数字图像处理及MATLAB 实现. 北京:电子工业出版社.2009
[2]冈萨雷斯等. 数字图像处理(Matlab 版). 北京:电子工业出版社,2005 [3]周建兴等.MATLAB 从入门到精通. 北京:人民邮电出版社,2009 [4]王慧琴等. 数字图像处理. 北京:北京邮电大学出版社,2006
[5]何东健. 数字图像处理. 西安电子科技大学出版社,2003