1、算法经典算法下面以一幅3*2像素的简单图片(图C )为例,来说明灰度直方图均衡化的算法。(图C)图C的直方图:注意看百分位(Percentile)这一项。一般软件的百分位是 当前色阶的像素数量÷总像素数量,而Photoshop 不同,Photoshop显示的是 当前色阶与前面色阶的所有像素数量÷总像素数量。因此图C色阶为100 时的百分位就是(3+2)/6=5/6=83.33%,这个百分位其实就是我们要求的灰度值(范围01) ,把它转换成0255的范围,要再乘255。求出每个色阶的百分位之后,再乘255,就可以求出与其对应的灰度值来。色阶 数量 出现频率 百分位 255*百
2、分位 根据每个色阶的 色阶-255*百分位 的对应关系组成一个灰度映射表,然后根据映射表来修改原来图片每个像素的灰度值。对于图C,用128替换50,用212替换100,用255替换200。这样,灰度直方图的均衡化就完成了。直方图均衡化是灰度变换的一个重要应用,它高效且易于实现,广泛应用于图像增强处理中。图像的像素灰度变化是随机的,直方图的图形高低不齐,直方图均衡化就是用一定的算法使直方图大致平和。均衡化处理后的图象只能是近似均匀分布。均衡化图象的动态范围扩大了,但其本质是扩大了量化间隔,而量化级别反而减少了,因此,原来灰度不同的象素经处理后可能变的相同,形成了一片的相同灰度的区域,各区域之间有
3、明显的边界,从而出现了伪轮廓。如果原始图像对比度本来就很高,如果再均衡化则灰度调和,对比度降低。在泛白缓和的图像中,均衡化会合并一些象素灰度,从而增大对比度。均衡化后的图片如果再对其均衡化,则图像不会有任何变化。灰度直方图均衡化的算法,简单地说,就是把直方图的每个灰度级进行归一化处理,求每种灰度的累积分布,得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图中的每个像素。经典的直方图均衡化算法可能存在以下一些不足:1. 输出图像的实际灰度变化范围很难达到图像格式所允许的最大灰度变化范围。 2. 输出图像的灰度分布直方图虽然接近均匀分布, 但其值与理想值1/n仍有可能存在较大的差异 , 并非
4、是最佳值。 3. 输出图像的灰度级有可能被过多地合并。由于灰度的吞噬也易造成图像信息的丢失。 为此人们提出了许多改进的直方图均衡算法,详细内容请参阅本文末尾提供的参考资料。公式要写论文的同学可能需要用数学的方式来描述,下面我把前面讲的内容概括成公式,以供参考。概率密度函数(PDF)为了计算方便,我们需要将直方图归一化,即把灰度范围由0255变为01 。归一化后的直方图其实就是一个概率密度函数(PDF,probability density function),均衡化就是令概率密度为1。我们用Pr(r)来表示原图像的PDF,用Ps(s)表示均衡化之后的PDF,r、s分别代表均衡化前后的灰度值,r
5、,s 0,1。根据概率论的知识,可得出:公式中,T(rk)来表示原图像的第k 个灰度级的转换函数。 表示总和。nj/N表示0j个灰度级的像素数量总和与像素总数的比值,也就是前面讲过的百分位(当前色阶与前面色阶的所有像素数量÷总像素数量)。Pr(rk)表示第0k的灰度级出现概率累积相加。因为 s是归一化的数值(s0,1) ,要转换为 0255的颜色值,需要再乘上255,即S=Pr(rk)*255。这个转换公式也被称为图像的累积分布函数(CDF,cumulative distribution function)。彩色算法彩色的直方图均衡化其实就是对图像某个或多个颜色通道进行灰度直方图均衡
6、化运算,常见的有以下几种方法:统计所有RGB颜色通道的直方图的数据并做均衡化运算,然后根据均衡化所得的映射表分别替换R、G、B通道颜色值。 分别统计R、G、B 颜色通道的直方图的数据并做均衡化运算,然后根据R、G、B 的映射表分别替换R、G、B通道颜色值。 用亮度公式或求RGB的平均值的方式计算亮度通道,然后统计亮度通道的直方图的数据并做均衡化运算,然后根据映射表分别替换R、G、B通道颜色值。直方图均衡化: 直方图表示数字图像中每一灰度级与其出现频数的的统计关系,用横坐标表示灰度级,纵坐标表示频数。直方图就能给出该图像的概貌性描述,例如图像的灰度范围、每个灰度级的频数和灰度的分布、整幅图像的亮
7、度和平均明暗对比度等,由此可得出进一步处理的重要依据。直方图均衡化的思想是把原图的直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。大多数自然图像由于其灰度值分布集中在较窄的范围之内,引起图像细节不够清楚。采用直方图修正后可使图像的灰度间距拉大或使灰度均匀分布,从而增大了反差,使图像细节清楚,达到增强的目的。其主要实现算法如下: 设256个灰度级出现的概率为: PkNk/N =0,1,,255 式中, Pk表示第k个灰度级出现的概率,Nk为第 k个灰度级出现的频数,N为图像像素总数。累计分布函数 表示为: Qk=P0+P1+P2+.+P255 ,
8、上述计算Qk的公式实质上建立了一个变换,它能将非均匀分布变为均匀分布。在得到变换函数 Q之后,可建立灰度级映射对应关系: K- QK * 255, 直方图规定化: 直方图均衡化的实质是减少图像的灰度等级以换取对比度的扩大。但是,对比度扩大到什么程度是不能进行控制的。给定一幅图像,直方图均衡化后的结果是唯一的:它根据图像灰度信息自动地增强整个图像的对比度。实际中,有时需要变换直方图使之成为某个特定的形状,从而可以有控制地达到预定的目标。 直方图规定化算法可以描述如下:第一,对原始图像进行直方图均衡化;第二,根据给定的256级目标灰度频数进行直方图均衡化;第三,建立映射关系。常用的建立映射方法有单
9、映射规则法和组映射规则法。在本程序中,采用是查表技术,本质上它属于单映射法则。 在实际的操作中,直方图规定化需要采用逆变换。假设原图像中当前像素的灰度为64,经过其自身的直方图均衡化之后为96。进一步对于给定的灰度直方图进行灰度直方图均衡化。对均衡化后的灰度值96,设其自变量值为80,经过灰度直方图规定化后,原图像灰度值为64的像素,其灰度值就变换为80。 但是,存在这样一个困难:对应于96(对图像原始直方图而言),当对规定的灰度直方图进行均衡化后,很有可能找不到一个确定的自变量。由于灰度均衡化算法的累计效果,以原灰度图为自变量,以均衡后的灰度为因变量的函数必然是一个单调递增函数。因此,我们规定了临近优先的查找原则。 建立上述映射关系可以采用快速的临近二分查找算法。由于均采用整数运算,因而这种单映射规则并不存在取整误差。 为了在规定化后有较好的效果,本程序实现的规定化128个灰度级,256个灰度级向其变换映射