现在的位置: 首页 > 综合 > 正文

数字图像处理:1.直方图均衡化

2013年03月26日 ⁄ 综合 ⁄ 共 2259字 ⁄ 字号 评论关闭

1.灰度直方图

灰度直方图(histogram)是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。如下图所示,灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图象的最基本的统计特征。

  

 从概率的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数pdf(probability density function),而概率分布函数就是直方图的累积和,即概率密度函数的积分,如下图所示:



 


若直接从代表每种灰度的象素数目的直方图来观察,常用如下的表示:



 


灰度直方图的计算是很简单的,依据定义,若图象具有L(通常L=256,即8位灰度级)级灰度,则大小为MxN的灰度图象f(x,y)的灰度直方图hist[0…L-1]可用如下计算获得:

1.    初始化 hist[k]=0 ; k=0,…,L-1

2.    统计 hist[f(x,y)]++ ; xy =0,…,M-1, 0,…,N-1

3.    标准化 hist[f(x,y)]/=M*N

2.直方图均衡化

 直方图均衡化是通过灰度变换将一幅图象转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。

设灰度变换 s=f(r) 为斜率有限的非减连续可微函数,它将输入图象A(x,y)转换为输出图象B(x,y),输入图象的直方图为HA(r),输出图象的直方图为HB(s),则它们的关系可由如下过程导出:



 



 

例如,下图是直方图均衡化后的飞机图片及其直方图,可见其直方图与原图的直方图相比是很均衡的,但必须说明的是,离散情况下不可能作到绝对的一致。

  

 

3.直方图规范化

直方图规范化是指将一幅图象通过灰度变换后,使其具有特定的直方图形式,如使图象与某一标准图象具有相同的直方图,或使图象具有某一特定函数形式的直方图。

如下图所示,希望将图象A(x,y)变换为具有特定直方图H3(D)的图象C(x,y)。首先利用直方图均衡化将图象A(x,y)变换为具有平坦直方图的图象B(x,y),再利用第二个灰度变换将B(x,y)变换为C(x,y):

  

 



 


4.色彩直方图

 色彩直方图是高维直方图的特例,它统计色彩的出现频率,即色彩的概率分布信息。通常这需要一定的量化过程,将色彩分成若干互不重叠的种类。一般不直接在RGB色彩空间中统计,而是在将亮度分离出来后,对代表色彩部分的信息进行统计,如在HSI空间的HS子空间、YUV空间的UV子空间,以及其它反映人类视觉特点的彩色空间表示中进行。例如,下图是统计肤色分布情况的例子。

 

以上出处:From

以下扩展:From

经典算法


下面以一幅3*2像素的简单图片(图C)为例,来说明灰度直方图均衡化的算法。


 (图C)


图C的直方图:



注意看百分位(Percentile)这一项。一般软件的百分位是 当前色阶的像素数量÷总像素数量,而Photoshop不同,Photoshop显示的是 当前色阶与前面色阶的所有像素数量÷总像素数量。因此图C色阶为100时的百分位就是(3+2)/6=5/6=83.33%,这个百分位其实就是我们要求的灰度值(范围0~1),把它转换成0~255的范围,要再乘255。



求出每个色阶的百分位之后,再乘255,就可以求出与其对应的灰度值来。


色阶 数量 出现频率 百分位 255*百分位



根据每个色阶的 色阶->255*百分位 的对应关系组成一个灰度映射表,然后根据映射表来修改原来图片每个像素的灰度值。对于图C,用128替换50,用212替换100,用255替换200。这样,灰度直方图的均衡化就完成了。



Photoshop的算法


经过经典算法均衡化的图片,最亮的像素值总是255,因为最后一级色阶(255)的百分位一定是100%。而最暗的是由色阶0的数量决定的,像素值不一定是0。


Photoshop通过对比度拉伸的方法使最暗的像素值变为0,其它像素也相应变暗,最亮的像素保持255不变。对比度拉伸后的效果可能会比经典算法稍显偏暗。


对比度拉伸的算法,类似于使用色阶调整命令把黑场设成Min时的效果,Min是指像素数量不为0的第一个色阶。



对比度拉伸的公式:C = (Level - Min) * Scale = (Level - Min) * 255 / (255-Min)


图C均衡化之后的灰度值分别是128、212、255,为了精确,我们使用保留2位小数的形式(127.50、212.42、255.00)来进行对比度拉伸的计算。


Min = 127.50 '均衡化之后的最小值

Scale = 255/(255-Min) = 2


(127.50-Min)*Scale = 0*2 = 0

(212.42-Min)*Scale = 84.92*2 = 170

(255.00-Min)*Scale = 127.5*2 = 255


'新的映射表:

50  -> 0

100 -> 170

200 -> 255


经典算法和Photoshop算法的直方图比较。



彩色算法


彩色的直方图均衡化其实就是对图像某个或多个颜色通道进行灰度直方图均衡化运算,常见的有以下几种方法:



  1. 统计所有RGB颜色通道的直方图的数据并做均衡化运算,然后根据均衡化所得的映射表分别替换R、G、B通道颜色值。 
  2. 分别统计R、G、B颜色通道的直方图的数据并做均衡化运算,然后根据R、G、B的映射表分别替换R、G、B通道颜色值。 
  3. 用亮度公式或求RGB的平均值的方式计算亮度通道,然后统计亮度通道的直方图的数据并做均衡化运算,然后根据映射表分别替换R、G、B通道颜色值。


Photoshop用的是第一种方法

配套代码实现

Matlab代码示例

抱歉!评论已关闭.