在这一方面,传统的线性对比度拉升以及直方图均衡化是使用的最为广泛的全局图像增强方法。对比度拉升线性的调整了图像的动态范围,而直方图均衡化栖利用累计直方图分布概率重新映射图像的数据。这些方法虽然简单,但是都没有考虑到局部的信息。并且,全局直方图均衡化(GHE)还会产生使得一些噪音过度加强。
在局部对比度增强方面,有两种方式是最为有名的,一种是自适应直方图均衡化(AHE),这个算法可以参考我的博文限制对比度自适应直方图均衡化算法原理、实现及效果。还有一种就是自适应对比度增强(ACE)。AHE算法使用局部的直方图的相关信息对数据进行映射。这改变了图像的对比度,但是需要大量的计算。后来有人利用了双线性差值技术克服了这个问题,首先将图像分块,然后分别计算这些快内部的映射关系。为了增强某一个像素点的值,映射关系通过与这个像素所在块相邻的四个块的映射关系差值获得。在这个算法中,仅仅需要一个块大小的参数(在我的博文中还对参数进行了扩展)。
ACE算法采用了反锐化掩模技术,我们对此过程解释如下:首先图像被分成两个部分。一是低频的反锐化掩模(unsharp mask)部分,可以通过图像的低通滤波(平滑,模糊技术)获得。二是高频成分,可以过原图减去反锐化掩模获取。然后高频部分被放大(放大系数即为对比度增益CG)并加入到反锐化掩模中去,最后得到增强的图像。ACE算法的核心就是如何计算CG,这里将介绍两种简单的CG计算方法。
在谈及CG之前,我们还是需要看看一些基础的工作。首先上面谈到了unsharp mask,他对应于图像的低频成分。对于具体的像素,一般可以通过计算以该像素为中心的局部区域的像素平均值来实现。我们假定x(i,j)是图像中某点的灰度值,局部区域的定义为:以(i,j)为中心,窗口大小为(2n+1)*(2n+1)的区域,其中n为一个整数。当然这个窗口区域也不一定就要是正方形。局部的平均值,也就是低频部分,可以用下式计算:
而局部方差:
则ACE算法可以表示如下:
上式中,D是个常数,这样,CG是空间自适应的,并且和局部均方差成反比,在图像的边缘或者其他变化剧烈的地方,局部均方差比较大,因此CG的值就比较小,这样就不会产生振铃效应。然而,在平滑的区域,局部均方差就会很小,这样CG的值比较大,从而引起了噪音的放大,所以需要对CG的最大值做一定的限制才能获得更好的效果。 D这个常数的取值有些文章介绍说用图像的全局平均值,我编程的时候是用的图像的全局均方差,并且增加一个参数Amount,用来再次控制高频增强的程度。
在平滑区域,仔细观察有着微弱的层次感,如果不对CG进行限制,则由于LSD的值很小,导致CG的值特别大,从而产生像素饱和的现象(即像素的值超过了255)。解决这个问题一种方法就是增加n的值,即增加取样半径,通过取样半径的增加,使得以平滑区域为中心的窗口能够覆盖一些非平滑的区域,从而产生较大的LSD值。