clahe算法基本实现

发布于:2025-05-10 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、背景介绍

        图像算法处理中,经常需要遇到图像对比度调整的情况,CLAHE(Contrast Limited Adaptive Histogram Equalization)则是一种基于直方图,使用非常普遍的图像对比度调整算法。

        关于这个算法的介绍有很多,基本原理这些,我就不做过多讲解了,可以参考如下这些文章:

刘斯宁:Image Enhancement - CLAHE 基本原理讲解

CLAHE的实现和研究-阿里云开发者社区 实现代码讲解

二、实现流程

        1、输入图像进行图像分块,块分得越细,图像对比度调整效果相对越好,但副作用也越明显。

        2、统计每个块的图像直方图信息,并生成均衡化直方图H。

        3、根据设置的限制参数强度,对直方图信息进行重新分配:

                a、设置一个阈值T,将均衡化后直方图,从H[0]到H[255]上依此遍历,把大于阈值T的都全部减去,并统计一共减去了多少像素sub_pixel。

                b、计算mean_pixel = sub_pixel / 256,然后将H[0]到H[255]上,都全部加上mean_pixel的值。

                比如T=3000, H[0]=500,H[128]=20000,计算后mean_pixel=346。

        那个根据调整,第一步时候H[0]保持不变,H[128]被强行截断为3000;第二步时候,H[0]=846, H[128]=3346,通过这种方式将均衡化后直方图进行了重新分配,避免了直方图部分区域聚集的像素值太多,导致最终均衡化后图像对比度特别大和亮度变化特别严重的情况。

        调整前和调整后直方图对比,可以参考如下图所示:

 

        因此容易理解到:阈值T的设置对算法效果影响较大,当T足够小的时候,算法结果和原图一模一样,当T足够大的时候,算法结果和直方图均衡化一模一样。

三、代码实现

1、效果演示

        左边为输入图,右边为结果图像:

 

        从上面图像上也可以看到,Clahe算法也存在很多明显缺陷:

                1、局域块效应(局域块异常亮或者黑,即便使用了插值,依然和周围过度不太自然)

                2、结果图像噪声放大。

                3、结果图像相对于输入,整体亮度出现明显变化等。

        为了改善这些缺陷,也引申出了很多相关的优化算法,比如局域块选择自适应的的阈值T,局域直方图和全局直方图融合,局域直方图和邻域直方图融合等

2、复现代码

        文章:CLAHE的实现和研究-阿里云开发者社区 提供了完整的代码实现的,我这里在他基础上做了点稍微整理,方便归档笔记:ImageQualityEnhancement/ltm/clahe at master · yulinghan/ImageQualityEnhancement · GitHub


网站公告

今日签到

点亮在社区的每一天
去签到