直方图均衡化(Histogram equalization)

时间:2022-04-16 21:17:16

综述

直方图均衡化Histogram equalization)常用于增强图片的整体对比度,特别对于那些有用的数据被相似数据所代表的情况。通过直方图均衡化将亮度更好的分布于直方图上,使得低对比度区域有了更高的对比度。该方法对于前景和背景都很暗或都很亮的情况有很好的调节效果。

实现

假设有一个离散的灰度图像 {x} ,对该图像进行直方图均衡化的具体步骤如下:

  1. 原图灰度级概率统计
    ni 代表灰度级 i 出现的次数, Imin,Imax 分别代表图像中最小,最大的灰度级别,L是均衡化后的灰度级数,那么灰度级 i 在该图片中出现的概率 Px(i) 可表示如下:

    Px(i)=P(x=i)=nni,0i<L

    该过程相当于将图像的直方图归一化到 [0,1] ,所以最终的到的直方图也是归一化到 [0,1]

  2. 由累计直方图得到均衡化直方图
    根据下式计算累计直方图:

    cdfx(i)=j=0iPx(j)

    cdfx 的灰度级范围从 [Imin,Imax] 归一化到 [0,L1] ,就得到了目标输出 {y} 的累计直方图 cdfy ,由 cdfy 就可以得到 {y} 的直方图,该直方图就是均衡化的。

    以上叙述都是基于灰度图的,该算法也可以应用于彩色图像,只需要分别处理R、G、B三个通道即可。然而,色彩通道的关系会因为该算法的应用而改变,从而产生戏剧性的变化。

实例

对于如下图所示的 size=8×8 的8位灰度图片进行直方图均衡化处理。
直方图均衡化(Histogram equalization)
该图片的灰度值如下表所示:
直方图均衡化(Histogram equalization)
首先,计算该图像的直方图,结果如下:
直方图均衡化(Histogram equalization)
然后,根据直方图计算原始图像中小于等于每个灰度级的像素的个数(即将累计直方图中的值乘以图片大小: cdfx(i)×size ,这样求得的均衡化直方图就不是归一化到 [0,1] ,而是标准的直方图),结果如下:

原始灰度级 i cdfx(i)×size
52 1
55 4
58 6
59 9
60 10
154 64

根据以下规则将 cdfx 的灰度级范围从 [Imin,Imax] 归一化到 [0,255] ,即 L=256

hi=round(cdfx(i)×sizemin(cdfx(i)×size)sizemin(cdfx(i)×size)×(L1))

以原始灰度级55为例,均衡化后的灰度级 h 为: h(55)=41641×(2561)12 ,由于灰度级为整数,所以将求得的值四舍五入(round),同理可求得均衡化后对应的所有灰度级:

原始灰度级 i cdfx(i)×size 均衡化后灰度级 h
52 1 0
55 4 12
58 6 20
59 9 32
60 10 36
154 64 255

原始图像直方图与均衡化直方图对比:
直方图均衡化(Histogram equalization)直方图均衡化(Histogram equalization)
原始图片与均衡化处理后的图片对比:
直方图均衡化(Histogram equalization)直方图均衡化(Histogram equalization)

结束语

直方图均衡化只能解决整体曝光不足或曝光过度的问题,而对于实际应用中经常出现的光照不均匀问题处理效果不明显。