一、介绍
1.CLAHE大体原理
CLAHE,是英文Contrast Limited Adaptive Histogram Equalization的缩写,中文翻译过来就是“对比度受限的自适应直方图均衡”。
前面讲过直方图均衡化,直方图均衡化是全局的, 因此图像局部区域存在过亮或者过暗时, 效果不是很好。而且直方图均衡会增强背景噪声,影响效果。因此就有专家提出了新的解决办法,通过对图像分块(分区域)进行直方图均衡化,再增加一个对比度限制的算法,就变成了CLAHE算法。分块(分区域)比较好理解,就是把原始图像分成多个 m * n大小的小区域,然后对这些小区域分别进行直方图均衡化,得到增强后的 m * n 个小区域。然后对比度受限呢,这个好像是在将 m * n 个增强后的小区域拼接成完整图像时进行对比度判断,不好意思,我编不下去了,其实原始函数是怎么写的我也不知道,读者有兴趣可以去OpenCV的源码看看,我还是直接介绍Emgu CV中相关函数怎么用吧。
CLAHE主要作用在于增强图像的对比度同时能够抑制噪声,特别适用于医学、红外图像的处理。
2.CLAHE函数
Emgu CV中官方定义如下:
public static void CLAHE(
IInputArray src, // 输入图像,单通道图像
double clipLimit, // 对比度限制的阈值,一般在2 - 5
Size tileGridSize, // 网格大小,也就是分成的小区域是多大
IOutputArray dst // 输出图像,单通道图像
)
二、代码
C#代码如下:
Mat tempMat = srcMat.Clone();
Mat gray = new Mat();
Mat dstMat = new Mat();
double clipLimit = 2.0;
int width = 10;
int height = 10;
System.Drawing.Size tileGridSize = new System.Drawing.Size(width, height);
CvInvoke.CvtColor(tempMat, gray, ColorConversion.Bgr2Gray);
CvInvoke.CLAHE(gray, clipLimit, tileGridSize, dstMat);
CvInvoke.Imshow("CLAHE sharping image, " + dstMat.Size.ToString(), dstMat);
三、效果举例
原始素材定义为srcMat,如下:
还是这张夜晚天桥的照片,执行上述代码,CLAHE增强后的图像如下:
直接进行直方图均衡化的图像是下面这样的:
两种增强方式一对比,还是很明显的:它们都大幅度地提高了夜间显示效果,但是直方图均衡化后的天桥夜景明亮部分显得有些刺眼,而CLAHE图像增强在提高暗处细节的同时,让明亮部分和黑暗部分的对比更加自然。
原创不易,请勿抄袭。共同进步,相互学习。