直方图的均衡化
引言 图像增强技术是一大类基本的图像处理技术,其目的是对图像进行加工,以得到视觉效果更好或更有用的图像。可是一般的图像不能直接用计算机处理,需要数字化,也就是把图像分割为象素,每个象素的亮度(灰度值)用一个整数来表示。每个象素的灰度值量化后用一个字节(8bit)来表示如把由黑~白的连续变化的灰度值量化为0~255共256个灰度值。 图像处理有多种方法,最常见的有点处理,它是指根据图像中象素的原值按一定规律(或变换)来确定其新值的一种点对点的算法。下面的直方图的均衡化就是点处理的一种形式。
一、灰度直方图 灰度直方图(histogram)是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图象的最基本的统计特征。 从概率的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数pdf,而概率分布函数就是直方图的累积和,即概率密度函数的积分,如下图所示:
若直接从代表每种灰度的 象素数目的直方图来观察, 常用如下的表示:
直方图的特点 它只反映该图中不图灰度值出现的次数(或频率),未反映某以灰度值象素所处的位置。 一幅图各子区的直方图之和就等于该图全图的直方图。 图像直方图覆盖0~255全部灰度级(即256个灰度级的到了恰当利用)时图像对比度好。但许多图像对应的直方图并未有效利用动态范围(集中在一侧或中间)那么其对比度就较差,由此我们引入了一种图像处理——通过改变原始图像各像素在各灰度级上的概率分布来实现的图像的灰度变换处理方法——直方图的均衡化。
二、直方图的均衡化 直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。 对图像空间域点的增强过程是通过增强函数t=EH(s)来完成的,t、s分别为目标图像和原始图像上的像素点(x,y)处的灰度值。 在进行均衡化处理时,增强函数EH需要满足两个条件: 1)、增强函数EH(s)在0≤s≤L-1的范围内是一个单调递增函数,这个条件保证了在增强处理时没有打乱原始图像的灰度排列次序; 2)、对于0≤s≤L-1应当有0≤EH(s)≤L-1,它保证了变换过程中灰度值的动态范围的一致性。同样的,对于反变换过程s=EH-1(t),在0≤t≤1时也必须满足上述两个条件。
可以证明累积分布函数就是满足上述条件,通过该函数可以完成s到t的均匀分布转换,即使直方图均衡化的灰度变化函数是累积分布函数(概率分部函数)。离散情况下的增强转换方程为: k=0,1,…L-1 公式(2) 根据该方程可以由原图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。 在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布 ,按式 对其取整扩展并得出原灰度 到 的灰度映射关系。重复上述步骤,得到所有的原图像各灰度级到目标图像各灰度级的映射关系,再按照新的映射关系对原图像各点像素进行灰度转换,即可完成对原图的直方图均衡化。下面例题是按照上述算法实现的 。
1.为什么cdf是均衡化的变化函数 设灰度变换 s=f(r) 为斜率有限的非减连续可微函数,它将输入图象A(x,y)转换为输出图象B(x,y),输入图象的直方图为HA(r),输出图象的直方图为HB(s),则它们的关系可由如下过程导出:
三、例题演示 设有1幅64x64,8bit灰度图像,其直方图见图1,所用均衡化变换函数(即累积直方图)见图2,均衡化后的直方图见图3。
直方图均衡化计算列表
注:由于不能将同一个灰度值的各个象素变换到不同灰度级,所以数字图像直方图均衡化的结果一般只是近似均衡的直方图。如图4中的折线是实际均衡化的结果,而理想均衡化是求平均值,图为一条水平直线。
四、直方图均衡化的原理程序(lm2.m) tmhist=zeros(256,1); cdf=zeros(256,1); mm=imread('f:\ljm\mm.bmp'); plane=rgb2gray(mm); [m,n]=size(plane); t=0:255; bar(t,tmhist); %step1:get histogram for i=1:m; for j=1:n; k=plane(i,j); tmhist(k)=tmhist(k)+1; end
四、直方图均衡化的原理程序(lm2.m) %step2:get cdf cdf(1)=tmhist(1); for i=2:256 cdf(i)=cdf(i-1)+tmhist(i); End bar(t,cdf); %step3:run point operation for i=1:m for j=1:n k=plane(i,j); plane_equ(i,j)=cdf(k)*256/(m*n); end
五、用MATLAB实现直方图的均衡化 其实在MATLAB中,用imhist函数求图像直方图,histeq函数可以实现直方图均衡化操作(histogram equalization)。 程序为:(lm1.m) t0=imread(‘f:\ljm\plane1.gif’); %打开一个图像 Imshow(t0) ; % 显示图像 Imhist(t0,256) ; %求直方图 t1=histeq(t0,256); %求均衡化 Imshow(t1); %显示均衡化后的图像 Imhist(t1,256); %显示均衡化后的直方图
原图及其直方图,可以看到它的直方图没有布满允许的范围,低灰度一边比较窄且集中。
均衡化后的图像及其直方图,它的直方图占据了整个灰度值允许的范围,图像的对比度也增强了。
总结 从实现算法上也可以看出其优点主要在于能自动增强整幅图像的对比度,但具体的增强效果也因此不易控制,只能得到全局均衡化处理的直方图。 直方图均衡法虽能扩大视觉的动态范围但是以牺牲图像细节为代价。 新的直方图均衡法:是将改进后的直方图均衡算法和局部对比度增强法结合起来。前者使图像外貌较好, 后者能增强图像细节。