CLAHE

CLAHE 使用的一些经验

直方图包含了什么信息

两张我觉得不错的图像

两张我觉得有雾或者曝光不足的图像

单从直方图无法准确判断出一张图质量如何

一张好的图片往往拥有如下特征:

最暗值从0开始,最大值接近或者是255,每一个亮度都有一定分布。

不好的图片往往有如下特征:

某个亮度(0 或者 255)有很多很多像素

0附近亮度空缺,也就是全图缺少暗点

画面主体(人物)或者总画面平均亮度过低,过高

什么是CLAHE

原理

在一定限制下,将输入的直方图尽可能的均衡,让其每个亮度拥有差不多个数的像素。

这个限制是指,不能将映射折线的斜率过大,也就是不能将某个亮度过度放大或者缩小。

实现方式(不考虑分块)

  1. 计算输入图像的直方图

  2. 根据clip- limited 裁剪掉超过 clip-limited * total pixel / 256的像素

  3. 将裁减掉的像素均分给每一个亮度,形成新的直方图

  4. 计算新直方图的累计分布曲线(LUT)

  5. 该曲线就是CLAHE的映射曲线,使用该曲线对原图进行映射

算法本身缺陷

好的直方图不一定是均衡的。尤其是分块之后,小块内直方图不均衡很正常。

由于clip- limited的存在,算法对那种个别亮度拥有过多像素的case不合适

clip- limited选择与图像及其效果

理论上,当图像亮度分布十分均匀,每个亮度都有1/256 * totalpixel的时候,直方图均衡化算法无效,但实际中的图片哪怕曝光,色彩内容都很好很丰富,还是会存在一些不均匀的。

原图\clip limit 0.2 0.4 0.8 1 1.4 1.8 2.5
比较均匀 无改变 逐渐增加 逐渐增加 逐渐增加 逐渐增加 程度相同 程度相同
轻微不匀 逐渐增加 逐渐增加 逐渐增加 逐渐增加 逐渐增加 逐渐增加 程度相同
不均 逐渐增加 程度相同
严重不均 逐渐增加

output_yuv_clahe_04_1_histograms.jpg

output_yuv_clahe_1_1_histograms.jpg

output_yuv_clahe_2_1_histograms.jpg

随着clip limited的增加(0.4 1 2)直方图分布看似越来越均衡,但是画面质量却在下降

直观效果

当图片某段曝光缺失(比如过暗,过亮),那clahe会稍微拉会一些平均亮度

当图片主体还算正常,但是暗部亮度像素相对较少(这种情况很常见,也许原图是好图片),clahe会随着clip limited的增大,更夸张的把中暗部压暗,中亮度提亮,拉伸对比度。

由于映射是离散的,当(a-1)/255 * total < CFD(a) < (a+1)/255 * total时 a不会发生变化;当CFD(a-1) = (a-1)/255 * total , CDF(a) = (a+1)/255 * total 时,也就是a亮度有很多像素,a会被映射到a+1 而a-1还保持a-1,a亮度本身出现像素空缺。