)

  • 在讨论clahe(限制对比度自适应直方图均衡化),需要先了解关于直方图均衡化概念,观前提示很长。
    代码实现

直方图均衡化(HE)

直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。

数学原理:

考虑一个离散的灰度图像 { x },令n i为灰度i的出现次数。图像中出现第i级像素的概率为

L是图像中灰度的总数(通常为256),n是图像中像素的总数,并且 实际上是像素值i的图像直方图,已标准化为[0,1]。
定义累积分布函数对应p X为

这也是图像的累积归一化直方图。
我们想创建一个形式为y = T(x)的转换,以生成具有平坦直方图的新图像{ y }。这样的图像将在整个值范围内具有线性化的累积分布函数(CDF),即

对于某一常数ķ。CDF的属性允许我们执行这样的变换(请参阅逆分布函数);它被定义为

其中k在[0,L]范围内)。注意,由于我们使用归一化的直方图{x},因此T将级别映射到[0,1]范围内。为了将值映射回到其原始范围,需要对结果应用以下简单转换:

通俗地说就是遍历图像的像素统计出灰度值并把计算出累积分布函数(对比度限制重点),并映射到0255范围(也可其他范围,例如0128)灰度即均衡化。这里所操作的对应灰度图即单通道图,而彩色空间在维基有介绍到单独的直方化操作,或者我认为可以根据公式
Y= = 0.2126 R + 0.7152 G + 0.0722 B把RGB彩图灰度化再直方均衡化。当然,这也不符合我们要用彩图图片做增强的初衷。

对于单通道图,我们假设所示的8位灰度图像具有以下值:

下表中显示了该图像的直方图。为了简洁起见,将计数为零的像素值排除在外。

所述累积分布函数(CDF)如下所示。再次,为简洁起见,排除了不会增加cdf的像素值。

再通过此cdf显示子图像中的最小值为52,最大值为154。值154的cdf为64,与图像中的像素数一致。CDF必须标准化为[0,255]。直方图的一般均衡公式为:

其中cdf min是累积分布函数的最小非零值(在本例中为1),M×N给出图像的像素数(例如,在64以上的示例中,M为宽度,N为高度),L为使用的灰度级数(在大多数情况下为256)。请注意,要在原始数据中将大于0的值缩放到1到L-1(包括1和L-1)的范围,则上述公式将改为:

其中cdf(v)>0。从1缩放到255保留最小值的非零值。示例比例数据从0到255(包括0和255)的均衡公式为:

例如,78的cdf为46。(第7列的下一行使用78的值。)标准化后的值变为

而这就是普通的直方图均衡化的实现。从实际效果图中可以看出这是在全局进行直方图均衡化,而全局直方均衡有时会降低图片细节,而我们有时候是希望能在局部增强对比度,提升图片细节识别效果。于是有了AHE(自适应直方图均衡)提出。

AHE(自适应直方图均衡)

自适应直方图均衡(AHE)是一种计算机图像处理技术,用于改善图像的对比度。它与普通的直方图均衡化的不同之处在于,自适应方法会计算多个直方图,每个直方图对应于图像的不同部分,然后使用它们来重新分配图像的亮度值。因此,它适合于改善局部对比度并增强图像每个区域中边缘的清晰度。

实现原理:

将图片分割成多个块(例如8×8的块,无法整除可以补零),或者比喻成8*8个的小图像,然后遍历计算各个块的像素的累积分布函数,进行直方图均衡化。

可是该操作倾向于在图像的相对均匀的区域中容易过度放大噪声。
这与AHE两个属性有关:
1、 AHE算法处理的局部领域,矩形邻域小,局部领域大,局部对比度弱。
2、 如果矩形区域内的图像块信息比较平坦,灰度接近,其灰度直方图呈尖状,在直方图均衡的过程中就可能会出现过度放大噪声的情况。

而自适应直方图均衡的一种变体称为对比受限自适应直方图均衡(CLAHE),它可通过限制放大来防止这种情况。

CLAHE( 限制对比度自适应直方图均衡化)

普通的AHE往往会放大图像近恒定区域中的对比度,因为此类区域中的直方图高度集中。结果,AHE可能导致噪声在近恒定区域中被放大。对比度受限AHE(CLAHE)是自适应直方图均衡的一种变体,其中对比度放大受到限制,从而减少了这种噪声放大问题。

在CLAHE中,给定像素值附近的对比度放大由变换函数的斜率给出。这与邻域累积分布函数(CDF)的斜率成比例,因此与该像素值处的直方图的值成比例。CLAHE通过在计算CDF之前将直方图裁剪为预定值来限制放大。这限制了CDF的斜率,从而限制了转换函数的斜率。直方图被裁剪的值,即所谓的裁剪极限,取决于直方图的规格化,并因此取决于邻域的大小。公用值将结果放大率限制在3到4之间。有利的是,不丢弃直方图超出裁剪限制的部分,而是在所有直方图块中平均分配它.

原理:

原理与AHE差不多,但他跟AHE不同是在分块之后统计累积分布函数后会进行裁剪,即在选定的直方图bins(例如(0~255内)CDF的值进行限制,改变CDF的梯度,再局部均衡化。

CLAHE具体实现主要包括6个步骤。

步骤1:分块。将输入图像划分为大小相等的不重叠子块,每个子块含有的像素数为M。参考示例为8×8块。

步骤2:计算子块直方图。

步骤3:计算剪切阈值clipLimit(可以展开讨论)

步骤4:像素点重分配。对每个子块,使用步骤三中多余的像素重新分配。

步骤5:直方图均衡。

步骤6:像素点灰度值重构。(源码中采用了双线性插值)

补充

而在阅读CLAHE原始论文的作者之一Karel ZuiderveldCLAHE的示例实现时,我发现一点就是作者通过增加双线性插值减少代码时间复杂度,而在找资料我也了解到不含双线性插值的部分,发现插值运算及高斯平滑可以降低噪声产生。
CLAHE的几个重要算法参数:

①窗口大小,即分割的块大小

②块数,即裁剪的数量

③CDF斜率限制强度传递函数中的对比度拉伸

④直方图bins个数(即0~255之间范围选取)

通过上述参数对累积分布函数修整,都可以改变CLAHE的效果。

::: tip 相关参考链接

https://zhuanlan.zhihu.com/p/44918476
https://www.cnblogs.com/RyanXing/p/9463041.html
https://en.wikipedia.org/wiki/Histogram_equalization
https://blog.csdn.net/u013066730/article/details/83000004
https://blog.csdn.net/abcd1992719g/article/details/25483395
https://blog.csdn.net/xiajun07061225/article/details/6910129
https://blog.csdn.net/u013066730/article/details/82970380
https://blog.csdn.net/kl1411/article/details/89100740
https://blog.csdn.net/jhy10202008/article/details/84583162
https://web.archive.org/web/20120425224736/http://fiji.sc/wiki/index.php/Enhance_Local_Contrast_(CLAHE)
http://www.cs.utah.edu/~ssingla/IP/P2/CLAHE.html
https://blog.csdn.net/qq_38784098/article/details/82010823
https://web.archive.org/web/20120201205217/http://radonc.ucsf.edu/research_group/jpouliot/Tutorial/HU/Lesson7.htm

:::

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐