3.3 直方图均衡化
直方图均衡化是一种借助图像直方图变换实现灰度映射,从而增强图像的方法。
3.3.1 图像直方图
一幅图像的灰度统计直方图是一个1D的离散函数:
其中,fk为图像f(x, y)的第k级灰度值;nk是图像f(x, y)中具有灰度值fk的像素的个数;n是图像像素总数。根据上述定义,可以设置一个含L个元素的数组,通过对具有不同灰度值的像素进行个数统计来获得图像的直方图。因为pf(fk)给出了对各fk出现概率的估计,所以直方图提供了原始图像的灰度值分布情况,也可以说给出了一幅图像中所有像素灰度值的整体描述。
例3-7 不同图像及其对应的直方图
图3-7给出在同一场景中获得的几幅不同图像及其直方图示例。
图3-7 在同一场景中获得的几幅不同图像及其直方图示例
在图3-7中,图3-7(a)对应一幅正常的图像,其直方图基本覆盖整个灰度范围,整幅图像层次分明;图3-7(b)对应一幅动态范围偏小的图像,其直方图集中在灰度范围的中部,由于整幅图像反差小,看起来比较暗淡;图3-7(c)对应一幅动态范围比较大,但其直方图与图3-7(a)中的直方图相比整个向左移动了的图像,由于灰度值相对集中在低灰度一侧,整幅图像偏暗;图3-7(d)对应一幅动态范围比较大,但其直方图与图3-7(a)中的直方图相比整个向右移动了的图像,由于灰度值相对集中在高灰度一侧,整幅图像偏亮,与图3-7(c)正好相反。
由此可以看出,图像的明亮反差等视觉效果与其直方图具有较直接的对应关系。由于直方图能够反映图像的特点,所以可以通过改变直方图的形状来达到改善视觉效果、增强图像的目的。
3.3.2 原理和步骤
直方图均衡化的基本思想是把原始图像的直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围,从而可实现增强图像整体对比度的效果。增强函数需要满足如下2个条件。
(1)它在0≤f≤L-1范围内是一个单值单增函数,这是为了保证原始图像各灰度级在变换后仍保持从黑到白(或从白到黑)的排列次序。
(2)对于0≤f≤L-1,有0≤g≤L-1,这个条件能够保证变换前后灰度值动态范围的一致性。
可以证明,累积分布函数(CDF)满足上述2个条件并能将f的分布转换为g的均匀分布。事实上,图像f(x, y)的CDF就是其累积直方图,可定义为
由式(3-10)可见,根据原始图像的直方图可直接算出直方图均衡化后各像素的灰度值。当然,在实际应用中还要对由此算出的gk值取整以满足数字图像的要求。
例3-8 直方图均衡化计算示例
设有一幅64×64、8bit的灰度图像,其直方图如图3-8(a)所示,直方图均衡化所用的变换函数(累积直方图)如图3-8(b)所示,均衡化后得到的直方图如图3-8(c)所示。需要注意的是,由于不能(或者说没有理由)将同一个灰度值下的各像素变换到不同灰度级中(一个直方条里的像素总在同一个直方条中),所以数字图像直方图均衡化的结果一般只是得到近似均衡的直方图。这里可比较图3-8(d)中的粗折线(实际均衡化结果)与水平直线(理想均衡化结果),图中虚线为原直方图包络。
图3-8 直方图均衡化计算示例
表3-1给出以上直方图均衡化的各运算步骤和结果(其中,“取整”表示取方括号中实数的整数部分,符号“→”代表映射)。
表3-1 直方图均衡化计算列表
由表3-1可见,原始直方图中的一些不同灰度值有可能映射为均衡化直方图中的同一个灰度值,所以均衡化直方图的灰度级数有可能比原始直方图的灰度级数少。
例3-9 直方图均衡化效果示例
图3-9所示为直方图均衡化效果示例。图3-9(a)和图3-9(b)为一幅8 bit原始灰度图像及其直方图。这里原始图像较暗且动态范围较小,反映在直方图上就是其直方图的灰度值范围比较小且集中在低灰度值一侧。图3-9(c)和图3-9(d)为对原始图像进行直方图均衡化的结果及其直方图,现在直方图覆盖了整个图像灰度值所允许的范围。由于直方图均衡化增加了图像灰度动态范围,所以也增加了图像的对比度,反映在图像上就是图像有较大的反差,细节更加清晰。
图3-9 直方图均衡化效果示例