返回

直方图均衡化

Histogram Equalization — 基于 CDF 的灰度级重新分布
第二章 / 图像预处理
参数面板

左侧切换不同示例图;悬停或点击原图直方图后,只追踪当前灰度的计数、CDF 和映射后新灰度。

概念说明

为什么要做直方图均衡化

低对比图像经过直方图均衡化后,灰度层次被重新拉开。图源:scikit-image equalize 示例
任务

当照片整体偏暗、偏亮或灰度层次挤在一起时,原本该有的细节会糊成一片。任务是把集中在一起的灰度拉开,让暗部和亮部都能重新显出层次。

思路

常用的处理办法是:先统计每个灰度级出现的次数,画出;再计算,建立旧灰度到新灰度的映射表;然后按这个映射表把原图像素逐点替换。原本出现很多的灰度被拉开,出现很少的灰度被合并,图像的自然增强。

观察

切换不同示例图,比较原图、原直方图、CDF 映射曲线和均衡化后的结果;拖动阈值观察灰度分布被拉开的过程,注意当原图灰度集中在一侧时,均衡化效果最明显,但噪声也可能被一起放大。

原图12×12
12×12 原图
均衡化
结果12×12
12×12 均衡化
直方图对比悬停预览,点击锁定;左右方向键移动锁定位置
原图直方图
直方图显示 0 到 255 灰度级的像素数量分布。064128192255
均衡后直方图
直方图显示 0 到 255 灰度级的像素数量分布。064128192255
直方图均衡化公式
Sk = 255 i=0 k nin

Sk: 原灰度级 k 经均衡化后映射到的新灰度值

ni: 原图中灰度级 i 的像素个数

n: 图像总像素数(= 144

i=0kni/n: 累积分布函数(CDF)

* k 为输入灰度级索引;映射函数是单调递增的,保证输出图像保持灰度级的相对顺序。

累积分布函数(Cumulative Distribution Function)

CDF 从灰度 0 开始累加每个灰度级的像素占比:

CDF[k]=n0+n1++nkn

均衡化将 CDF 值线性放大到 0-255 范围,使输出图像的直方图尽可能平坦, 从而增强图像的全局对比度。

* 离散灰度级下只能逼近均匀分布,实际输出不会完全平坦。

均衡化的效果

增强对比度:原直方图集中的区域被“拉伸”到更宽的灰度范围。

直方图趋平:均衡化后的直方图尽可能接近均匀分布,但受限于离散灰度级和像素数量, 实际输出不会完全平坦。

全局操作:均衡化使用整张图像的全局直方图,不依赖局部邻域信息。 这意味着相同灰度级的所有像素会被映射到同一输出值。

调整参数面板中的“示例图”类型,观察不同图像均衡化前后的直方图变化。