我的小程序:

灰度级范围为[0,L-1]的数字图像的直方图是离散函数:
其中是第k级灰度值(
=k),
是图像中灰度值为
的像素个数。
通常用MN表示的图像像素的总数除它的每个分量来归一化直方图,即:
M和N分别是图像的行和列维数,k = 0,1,...,L-1。归一化直方图的所有分量和为1。
若一幅图像的像素倾向于占据整个可能的灰度级并且均匀分布,则该图像会有高对比度的外观和灰度细节丰富的特点。如下图:
直方图均衡
用变量r表示待处理的图像的灰度,灰度变换函数通常需要满足两个条件:
- (a) T(r)在空间
上为单调递增函数
- (b) 当
时,
当考虑反函数时,条件(a)改为:
- (a') T(r)在空间
上是严格单调递增函数
条件(a)保证输出灰度值不少于相应的输入值,防止灰度反变换时产生人为的缺陷;条件(b)保证输出灰度的范围与输入灰度的范围相同;条件(a')保证从s到r的反映射是单值的,即一对一的,防止出现二义性。如下图:
为了产生均衡的直方图,使用如下的灰度变换函数:
....................................(1)
容易看出,该变换满足条件a和b。
下面解释为什么经过(1)式的灰度变换能产生均衡直方图。
令和
分别表示随机变量r和s的概率密度函数(PDF)。若
和T(r)已知,则变换后的变量s的PDF为:
......................................................(2)
使用(1)式的变换函数,得:
将dr/ds代入(2)式,得:
可知,始终是一个均匀概率密度函数,与
的形式无关。所以,经过(1)式灰度变换的图像能产生均衡直方图。
(1)式的积分形式针对的是连续灰度值,而对于离散值,用求和的形式处理。一幅图像中灰度级出现的概率为:
(1)式中变换的离散形式为:
注:在实际使用中,需要将灰度值取近似为最接近的整数。
直方图匹配(规定化)
直方图匹配或直方图规定化,是指处理后的图像具有规定的直方图形状。
具体说来就是,要找到一个灰度变换函数,使图像在该灰度变换函数的作用下,产生一个我们指定形状的直方图,所谓指定形状的直方图形状,其实就是一个指定的概率密度函数。
假设r和z分别表示输入图像和输出图像的灰度级,是输入图像的概率密度函数,
是我们希望输出图像所具有的指定概率密度函数。
令:
可以看出,这就是直方图均衡中的变换函数。知道,就能得到T(r)。
定义随机变量z:
同样,知道,就能得到G(z),而
就是我们指定的概率密度函数。
可得:
上式就是我们要求的直方图匹配的灰度变换函数。
对于离散形式,类似的我们令:
其中,规定的直方图的第i个值,
是规定的直方图对应的图像的第q级灰度值(
=q),利用反变换找到期望的
:
实践中,并不需要反变换。因为我们处理的灰度级是整数(如8比特图像的灰度级是从0到255),我们常用下面的直方图规定化过程:
- 计算给定图像的
及其直方图均衡变换
,把
四舍五入为范围[0,L-1]内的整数;
- 对q=0,1,2,...,L-1计算
,其中
规定的直方图的值,把G四舍五入为范围[0,L-1]内的整数,将G存在一个表中;
- 对每一个
,k=0,1,2,...,L-1,从步骤2中存储的G值表中寻找
使
最接近
。例如表中第64个
最接近
,则根据
的定义,此时q=63,也就是
=63。当满足给定
的
值多于一个时,按惯例选择最小的值。

参考资料:冈萨雷斯《数字图像处理》