system: [SYSTEM]

user: 2. 本课题采用的方法 图像对比度增强的方法可以分为两类：一类是直接对比度增强方法；另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整，从而“扩大”前景和背景灰度的差别，以达到增强对比度的目的，这种方法可以利用线性或非线性的方法来实现；直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。 2.1. 灰度变换 灰度变换可使图像动态范围增大，对比度得到扩展，使图像清晰、特征明显，是图像增强的重要手段之一。它主要利用了点运算来修正像素灰度，由输入像素点的灰度值确定相应输出点的灰度值，是一种基于图像变换的操作。灰度变换不改变图像内的空间关系，除了灰度级的改变是根据某种特定的灰度变换函数进行以外，可以看作是“从像素到像素”的复制操作。基于点运算的灰度变换可表示为 [ 2 ]： g ( x ， y ) = T [ f ( x ， y ) ] (2.1.1) 其中T被称为灰度变换函数，它描述了输入灰度值和输出灰度值之间的转换关系。一旦灰度变换函数确定，该灰度变换就被完全确定下来。 灰度变换包含的方法很多，如逆反处理、阈值变换、灰度拉伸、灰度切分、灰度级修正、动态范围调整等。虽然它们对图像的处理效果不同，但处理过程中都运用了点运算，通常可分为线性变换、分段线性变换、非线性变换。 为了突出图像中感兴趣的目标或灰度区间，相对抑制那些不感兴趣的灰度区间，可采用分段线性变化，把0~255整个灰度值区间分为若干线段，每一个直线段都对应一个局部的线性变换关系，常用的是三段线性变换方法，如图1所示。 其中 f ( x ， y ) ， g ( x ， y ) 分别为原图像和变换后的图像的灰度级，max f、max g分别为原图像和变换后的图像的最大灰度级。灰度区间[a，b]为要增强的目标所对应的灰度范围，变换后灰度范围扩展至[c，d]。变换时对[a，b]进行了线性拉伸，而[0，a]和[b，max]则被压缩，这两部分对应的细节信息损失了。若这两部分对应的像素数较少，则损失的信息也相应较少。其数学表达式如式(2.1) [ 3 ] 所示。 图1. 三段线性变换 g ( x ， y ) = { c a × f ( x ， y )                                                                   0 ≤ f ( x ， y ) ≤ b d − c b − a × [ f ( x ， y ) − a ] + c                                 a ≤ f ( x ， y ) ≤ b max g − d max f − b × [ f ( x ， y ) − b ] + d               b < f ( x ， y ) ≤ max f (2.1.2) 分段线性变换可以根据用户的需要，拉伸特征物体的灰度细节，虽然其他灰度区间对应的细节信息有所损失，这对于识别目标来说没有什么影响。 MATLAB软件中，imadjust函数可以实现图像的灰度变换，通过直方图变换调整图像的对比度。 J = imadjust ( I ， [ low   high ] ， [ bottom   top ] ， gamma ) (2.1.3) 其中，gamma为校正量r，[low high]为原图像中要变换的灰度范围，[bottom top]指定了变换后的灰度范围。 2.2. 直方图均衡化 直方图的基本数学原理： 直方图均衡化方法可以产生一幅灰度级分布概率均匀的图像。以概率论中的概率密度和分布函数为基础，在这里我们举例来理解直方图的概念。 比如有如图2所示矩阵数据： 图2. 图像矩阵数据 代表着数值为4的个数有5个，数值为6的个数有6个，数值为8的个数有4个，数值为10的个数有5个，则直方图如图3所示： 图3. 直方图 真实的直方图灰度级是从0~255的，上图应该将灰度级为0的也标注出来才是正确的。 f ( x ) = x k n ，   k = 0 ， 1 ， 2 ， ⋯ ， 10 f ( 4 ) = 5 20 = 0.25 ， f ( 6 ) = 6 20 = 0.3 F ( 6 ) = f ( 0 ) + f ( 1 ) + f ( 2 ) + f ( 3 ) + f ( 4 ) + f ( 5 ) + f ( 6 ) = 0.55 原图中，灰度级为6的大小为6，直方图均衡化之后，灰度级为6的大小为20 × (0.25 + 0.55) = 14。 通过上述原理，我们不难发现，概率密度表示对应的某一灰度级数在图片中出现的概率，某一灰度级数的分布函数值则表示小于等于该灰度级数的所有灰度值在图片中所占概率。正如前文所述，直方图均衡化作用在于将原始直方图变为更均匀分布的图片。因此，基于上述数学原理，我们便可在此基础上推出直方图均衡化的实现原理：用分布函数代替概率密度函数，实现熵最大化 [ 4 ]。 综上所述，直方图均衡化方法是图像增强中最常用、最重要的方法之一。直方图均衡化是把原图像的直方图通过灰度变换函数修正为灰度均匀分布的直方图，然后按均衡直方图修正原图像。它以概率论为基础，运用灰度点运算来实现，从而达到增强的目的。它的变换函数取决于图像灰度直方图的累积分布函数。概括的说，就是把一已知灰度概率分布的图像，经过一种变换，使之演变成一幅具有均匀概率分布的新图像。有些图像在低值灰度区间上频率较大，使得图像中较暗区域中的细节看不清楚。这时可以将图像的灰度范围分开，并且让灰度频率较小的灰度级变大。当图像的直方图为一均匀分布时，图像的信息熵最大，此时图像包含的信息量最大，图像看起来就显得清晰 [ 5 ]。 直方图均衡化变换函数如图4所示，设r，s分别表示原图像和增强后图像的灰度。为了简单，假定所有像素的灰度已被归一化。当 r = s = 0 时，表示黑色；当 r = s = 1 时，表示白色；当r，s在[0，1]之间时，表示像素灰度在黑白之间变化。灰度变换函数为： s = T ( r ) 。 图4. 直方图均衡化变换函数 实际上，由于直方图是近似的概率密度函数，用离散灰度级作变换时很少能够得到完全平坦的结果，而且，变换后往往会出现灰度级减少的现象，这种现象被称为“简并”现象。这是像素灰度有限的必然结果。由于上述原因，数字图像的直方图只能是近似的。直方图均衡化处理可大大改善图像灰度的动态范围。减少简并现象通常可采用两种方法：一种简单的方法是增加像素的比特数。 直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸，重新分配图像像素值，使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布 [ 6 ]。 直方图均衡化过程如下： 1) 计算原图像的灰度直方图 P r ( r k ) ； 2) 计算原图像的灰度累积分布函数S k ，进一步求出灰度变换表； 3) 根据灰度变换表，将原图像各灰度级映射为新的灰度级。 在MATLAB中，histeq函数可以实现直方图均衡化。函数调用方法为： J = histeq ( I ， N ) (2.2.1) 该命令对灰度图像I进行变换，返回有N级灰度的图像J，J中的每个灰度级具有大致相同的像素点，所以图像J的直方图较为平坦，当N小于I中灰度级数时，J的直方图更为平坦，缺省的N值为64。 2.3. 自适应直方图均衡化 1) 简述 自适应直方图均衡化(AHE)用来提升图像的对比度的一种计算机图像处理技术。和普通的直方图均衡算法不同，AHE算法通过计算图像的局部直方图，然后重新分布亮度来来改变图像对比度。因此，该算法更适合于改进图像的局部对比度以及获得更多的图像细节。 2) 算法的解释 普通的直方图均衡算法对于整幅图像的像素使用相同的直方图变换，对于那些像素值分布比较均衡的图像来说，算法的效果很好。然后，如果图像中包括明显比图像其它区域暗或者亮的部分，在这些部分的对比度将得不到有效的增强。 AHE算法通过对局部区域执行响应的直方图均衡来改变上述问题。该算法首先被开发出来适用于改进航天器驾驶舱的显示效果。其最简单的形式，就是每个像素通过其周边一个矩形范围内的像素的直方图进行均衡化。均衡的方式则完全同普通的均衡化算法：变换函数同像素周边的累积直方图函数(CDF)成比例。 图像边缘的像素需要特殊处理，因为边缘像素的领域不完全在图像内部。这个通过镜像图像边缘的行像素或列像素来解决。直接复制边缘的像素进行扩充是不合适的。因为这会导致带有剑锋的领域直方图。 3) AHE的属性 邻域的大小是该方法的一个参数。邻域小，对比度得到增强，邻域大，则对比度降低。当某个区域包含的像素值非常相似，其直方图就会尖状化，此时直方图的变换函数会将一个很窄范围内的像素映射到整个像素范围。这将使得某些平坦区域中的少量噪音经AHE处理后过度放大。 2.4. 对比度受限的自适应直方图均衡化 1) 简述 CLAHE同普通的自适应直方图均衡不同的地方主要是其对比度限幅。这个特性也可以应用到全局直方图均衡化中，即构成所谓的限制对比度直方图均衡(CLHE)，但这在实际中很少使用。在CLAHE中，对于每个小区域都必须使用对比度限幅。CLAHE主要是用来克服AHE的过度放大噪音的问题。 这主要是通过限制AHE算法的对比提高程度来达到的。在指定的像素值周边的对比度放大主要是由变换函数的斜度决定的。这个斜度和领域的累积直方图的斜度成比例。CLAHE通过在计算CDF前用预先定义的阈值来裁剪直方图以达到限制放大幅度的目的。这限制了CDF的斜度因此，也限制了变换函数的斜度。直方图被裁剪的值，也就是所谓的裁剪限幅，取决于直方图的分布因此也取决于领域大小的取值。 通常，直接忽略掉那些超出直方图裁剪限幅的部分是不好的，而应该将这些裁剪掉的部分均匀的分布到直方图的其他部分。如下图5所示。 图5. 均匀分布示意图 这个重分布的过程可能会导致那些倍裁剪掉的部分由重新超过了裁剪值(如上图的绿色部分所示)。如果这不是所希望的，可以不带使用重复的过程指导这个超出的部分已经变得微不足道了。 2) 通过插值加快计算速度 如上所述的直接的自适应直方图，不管是否带有对比度限制，都需要对图像中的每个像素计算器领域直方图以及对应的变换函数，这使得算法及其耗时。而插值使得上述算法效率上有极大的提升，并且质量上没有下降。首先，将图像均匀分成等份矩形大小，如下图6的右侧部分所示(8行8列64个块是常用的选择)。然后计算个块的直方图、CDF以及对应的变换函数。这个变换函数对于块的中心像素(下图左侧部分的黑色小方块)是完全符合原始定义的。而其他的像素通过哪些于其临近的四个块的变换函数插值获取。位于图6中蓝色阴影部分的像素采用双线性查插值，而位于图6边缘的(绿色阴影)部分采用线性插值，角点处(红色阴影处)直接使用块所在的变换函数。 图6. 插值算法示意图 这样的过程极大的降低了变换函数需要计算的次数，只是增加了一些双线性插值的计算量。 3) 函数实现 在MATLAB中，adapthisteq函数 [ 7 ] 可以执行对比度受限的自适应直方图均衡，该函数语法如下所示： J = adapthisteq ( I ， param 1 ， val 1 ， param 2 ， val 2 ， ⋯ ) (2.4.1) 其中，I是输入图像，J是输出图像，parma/val是图7中所列的内容： 图7. Adapthisteq函数参数表