CLAHE算法

限制对比度自适应直方图均衡(Contrast Limited Adaptive Histogram Equalization,CLAHE)

自适应直方图均衡(AHE)算法,对于图像中存在明显比其他区域亮或者暗的地方时,普通的直方图均衡算法就不能将该处的细节信息描述出来。AHE算法通过在当前处理像素周边的一个矩形区域内进行直方图均衡,来达到扩大局部对比度,显示平滑区域细节的作用。
   AHE算法的2个属性:1、AHE算法处理的局部领域,矩形领域小,局部对比度强,矩形领域大,局部对比度弱。2、如果矩形区域内的图像块信息比较平坦,灰度接近,其灰度直方图呈尖状,在直方图均衡的过程中就可能会出现过度放大噪声的情况。

   CLAHE,对比度受限的自适应直方图均衡算法就能够有效的限制噪声放大的情形。下图表示的就是局部矩形领域内的灰度直方图,由于对比度放大的程度与像素点的概率分布直方图的曲线斜度成比例,所以为了限制对比度,将大于一定阈值的部分平均分配到直方图的其他地方,如下图所示,这样的话,通过限制CDF(累积分布函数)的斜率来一定程度限制对比度。
 

插值过程,得到了CDF函数,也就获得了对应的亮度变换函数,在计算变换函数的时候可以通过插值过程来降低计算量。其中红色块(图像角点处)的变换函数是完全按照定义获得的,绿色块(图像边缘)的变换函数是通过旁边两个图像块的变换函数线性插值得到的,蓝色部分图像块的变换函数则是通过双线性插值得到。
 

Matlab和OpenCV中都已经集成了CLAHE函数,在Matlab中,就是函数J = adapthisteq(I);

全局映射算子
每一个像素点将会根据它的全图特征和亮度信息进行映射,不管其空间位置几何。全局算子一个比较典型的例子就是色调曲线。
导致图像色调映射过后看起来很平坦,失去了其局部的细节信息。

局部映射算子
像素点所在的空间位置会被考虑,具有相同亮度值的两个像素点会被映射成不同的值,因为它们的空间位置周边的亮度信息可能不一样。
局部色调映射会很好的保护高亮和阴影部分的局部对比度和细节信息。
https://www.cnblogs.com/whw19818/p/5766005.html

 算法主要分以下三部:
 1.图像分块,以块为单位,先计算直方图,然后修剪直方图,最后均衡;
 

 2.块间线性插值,这里需要遍历、操作各个图像块,处理起来复杂一些;
 

3.与原图做图层滤色混合操作:f(a, b) = 1 - (1 - a)*(1 - b)。
https://blog.youkuaiyun.com/grafx/article/details/53311915
 

<think> 我们被要求介绍CLAHE算法。根据提供的引用信息,我们可以整合出一个清晰的介绍。 CLAHE(Contrast Limited Adaptive Histogram Equalization)即对比度受限的自适应直方图均衡,是一种用于图像增强的算法。它克服了传统直方图均衡化(HE)和自适应直方图均衡化(AHE)的一些缺点,特别是对噪声的放大和过度增强的问题。 以下是CLAHE算法的关键步骤: 1. **图像分块**:将输入图像分割成若干个大小相同的矩形区域(称为tiles)。例如,常见的分块大小是8×8。 2. **计算局部直方图**:对每一个子区域,计算其灰度直方图。 3. **限制直方图(Clip)**:为了避免噪声放大,CLAHE算法对每个子区域的直方图进行裁剪。具体做法是设置一个裁剪限幅(clip limit),该值决定了直方图中每个灰度级允许的最大像素数量。超过该限幅的像素数量被裁剪掉,然后均匀地重新分配到直方图的所有灰度级上。这一步骤是CLAHE的核心,通过限制对比度来防止噪声的过度放大。 4. **直方图均衡化**:对裁剪并重新分配后的直方图进行均衡化,得到该子区域的灰度变换函数(映射表)。 5. **双线性插值**:为了避免子区域边界处产生不连续的现象,CLAHE使用双线性插值来合并相邻子区域的变换结果。具体而言,对于图像中的每个像素,根据其位置与相邻四个子区域中心的距离,进行加权插值得到该像素的最终映射值。 下面简要说明引用中提到的关键点: - 引用[1]和[3]都提到了CLAHE通过限制直方图的峰值来限制对比度增强的程度,从而避免噪声放大。 - 引用[4]说明了CLAHE是AHE的改进,通过分块处理并引入插值来解决块效应问题。 此外,我们可以参考引用[2]中的示例代码,使用OpenCV实现CLAHE算法: 步骤: 1. 读取图像(灰度图像)。 2. 创建CLAHE对象,设置两个参数:clipLimit(对比度限制阈值)和tileGridSize(分块的大小)。 3. 应用CLAHE算法处理图像。 4. 显示原始图像和处理后的图像。 注意:clipLimit的值通常设置为2.0到3.0之间,tileGridSize如(8,8)表示图像被分成8×8的块。 下面我们给出一个更详细的代码示例(基于引用[2]并稍作扩展): </think> ### CLAHE算法介绍 CLAHE(Contrast Limited Adaptive Histogram Equalization)是一种改进的自适应直方图均衡算法,专门用于解决传统直方图均衡化在图像增强中导致的噪声放大和局部过增强问题。以下是其核心原理和实现步骤: #### 1. 算法原理 - **自适应分块**:将图像划分为 $M \times N$ 个子区域(如 $8 \times 8$ 的瓦片),对每个子区域独立进行直方图均衡化处理[^4]。 - **对比度限制**:通过预设的 **clip limit** 阈值限制直方图峰值,避免局部对比度过度增强。超出阈值的像素值被裁剪并均匀分配到其他灰度级,有效抑制噪声放大[^3]。数学表示为: $$ \text{clip}_\text{value} = \frac{\text{超限像素总量}}{\text{灰度级数}} $$ - **双线性插值**:处理子区域边界像素时,通过相邻四个子区域的映射函数进行加权插值,消除块状伪影[^4]。 #### 2. 算法流程 1. **图像分块**:输入图像划分为大小相同的矩形子区域。 2. **直方图裁剪与重分配**: - 计算每个子区域的灰度直方图 - 裁剪超过 clip limit 的像素值 - 将裁剪值均匀分配到所有灰度级 3. **累积分布函数(CDF)映射**:对裁剪后的直方图进行均衡化,生成灰度映射表。 4. **像素值重构**:使用双线性插值合并子区域结果,输出最终增强图像[^1][^4]。 #### 3. 关键参数 | 参数 | 作用 | 典型值 | |------|------|--------| | `clipLimit` | 控制对比度增强强度 | 2.0~3.0 | | `tileGridSize` | 定义子区域大小 | (8,8) | #### 4. 代码实现(OpenCV) ```python import cv2 # 读取灰度图像 image = cv2.imread('input.png', cv2.IMREAD_GRAYSCALE) # 初始化CLAHE对象 clahe = cv2.createCLAHE( clipLimit=2.0, # 对比度限制阈值 tileGridSize=(8,8) # 分块尺寸 ) # 应用CLAHE增强 enhanced_image = clahe.apply(image) # 保存结果 cv2.imwrite('output.png', enhanced_image) ``` #### 5. 效果对比 | 原图 | 传统直方图均衡 | CLAHE结果 | |------|----------------|----------| | 局部细节模糊 | 噪声放大明显 | 细节增强且噪声抑制 | | 低对比度区域 | 过曝光区域增多 | 自适应亮度平衡 | CLAHE在医疗影像(如X光片)、卫星图像增强、人脸识别预处理等领域广泛应用,显著提升图像质量的同时避免引入伪影[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WX Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值