最近由于项目需求,想了解一下直方图均衡相关的算法,顺便写个笔记

  • 首先是最初最简单的histogram equalization(HE)算法,太常见这里就不详细展开了,总之是希望直方图更加趋于平均化分布,求得了亮度值到亮度值的映射,从而调整直方图。HE算法对低动态范围的图片效果比较好,能够拉伸动态范围,但在其他情况下容易使得相邻直方被合并,直方数减少,对比度降低。同时,HE算法的处理结果亮度变化较大且不固定,容易产生过高亮度的饱和值和过低亮度的值。后续有许多改进的直方图均衡算法,在下面一一介绍。
  • brightness preserving bi-histogram equalization (BBHE):思路很简单,统计亮度均值,将直方图划分为两个子直方图分别进行直方图均衡化。
  • 直方图均衡化的增强python 直方图均衡化方法实现_直方图均衡

  • dualistic sub-image histogram equalization(DSIHE) :把BBHE的划分值改为亮度中值即是DSIHE算法
  • Minimum mean brightness error bi-histogram equalization (MMBEBHE):把BBHE的划分值从0到L-1逐个尝试,计算每种划分方案的直方图均衡结果的亮度均值,选择均衡结果亮度均值与原图亮度均值相差最小的划分值
  • recursive mean-separate histogram equalization(RMSHE):以上都是二分直方图,从RMSHE开始思路拓宽,直方图可以分为多个子图。RMSHE先用直方图的亮度均值去划分出左右两个子图,然后计算左右两个子图各自的亮度均值,依次类推可以迭代地划分出2的r次方个子图,对每个子图分别进行HE算法
  • recursive sub-image histogram equalization (RSIHE):把RMSHE的划分值改为中值即为RSIHE
  • Multipeak histogram equalization with brightness preserving (MPHEBP):以直方图的局部最大值作为划分值,有k个局部最大值就有k+1个子图,对k+1个子图分别进行HE
  • dynamic histogram equalization (DHE):到这里又是一个突破,在直方图划分后子图HE的基础上,根据每个直方图的子图的像素个数,对每个子图的分布范围进行重分配。而划分值使用的是局部最小值
  • Brightness preserving dynamic histogram equalization (BPDHE):把DHE的划分值改回局部最大值,并在均衡化后进行归一化,全图乘以一个比例系数,把亮度均值调整为原图的亮度均值。
  • 对了,前面说的算法都可以加一个trick,即平滑化,对均衡前的直方图用一维高斯滤波器进行平滑,然后再均衡化;
  • 除了平滑化的trick,还有一个最大值限制的trick,可以把限制每个直方的最大值,并把多出来的部分均匀分配到每个直方上。
  • 各直方图均衡化方法的效果图如下图所示:
  • 直方图均衡化的增强python 直方图均衡化方法实现_直方图均衡_02

参考资料

H. Ibrahim and N. S. P. Kong, “Brightness preserving dynamic histogram equalization for image contrast enhancement,” TCE, vol. 53, no. 4, pp. 1752–1758, 2007.