-
直方图均衡化(histogram equalization, HE)是一种图像对比度自动增强算法,广泛用于改善图像的视觉质量[1]。其基本原理是将原图像中多数像素的灰度级进行展宽,对少数像素的灰度级进行归并,使处理后的图像直方图近似均匀分布,达到增强图像对比度的目的。由于直方图均衡处理后的图像亮度近似等于图像灰度级范围的中值,与原图像亮度没有任何关联,从而导致不自然的视觉效果与明显的人工处理痕迹。为了使图像对比度增强效果在视觉上显得自然,文献[2]提出了一种亮度保持的双直方图均衡方法(brightness preserving bi-histogram equalization, BBHE)。该方法以原图像的平均亮度为阈值将其分解为两个子图像分别进行直方图均衡处理,然后将处理结果进行合并,使输出图像在一定程度上保持原图像的亮度特征。文献[3]提出了基于最大熵值与亮度保持的直方图均衡算法(brightness preserving histogram equalization with maximum entropy, BPHEME)。该方法根据输出图像的亮度目标,采用基于最大熵值原则对图像进行直方图规定化处理,使输出图像具有亮度保持的对比度增强效果。文献[4]对图像小波分解的低频系数矩阵进行多直方图均衡处理,然后利用小波重构得到输出图像。该方法在增强图像比度的同时,不仅保持了原图像亮度,还有效降低了输出图像的噪声。文献[5]在BBHE方法的基础上,提出一种基于平均亮度递归分解的多直方图均衡算法(recursive mean-separate histogram equalization, RMSHE),可以不同程度地保持原图像亮度,该方法在医学图像增强方面能够取得满意效果[6-7]。文献[8]认为RMSHE算法中的灰度范围相对狭窄的直方图子段具有相对较高的概率密度。为了有效提升图像中多数像素的灰度级动态范围,将狭窄直方图子段的灰度范围扩展到图像最大动态范围之后再进行均衡处理,最后对各段直方图的均衡结果进行归一化合并处理。文献[9]将RMSHE算法扩展到子块不重叠的局部直方图均衡方法,在图像局部对比度增强过程中对输出图像局部亮度进行分级控制。文献[10]基于像素个数均等原则将图像分成8个子图像分别进行直方图均衡处理,在保持亮度的前提下使图像对比度得到适当增强。
在保持亮度的图像对比度增强方法中,双直方图均衡方法(BBHE)因其简单实用得到广泛的研究与改进,以适应于不同的目标。文献[11]提出一种基于等面积双子图像的直方图均衡算法(dualistic sub-image histogram equalization, DSIHE),以两个子图像像素个数相等作为灰度阈值的选择条件,处理后的图像适当保持了原图像亮度。文献[12]根据最小平均亮度误差原则选择灰度阈值,使图像对比度增强的同时最大程度保持原图像亮度。文献[13]提出一种灰度阈值选择方法,使双直方图均衡后的图像亮度和原图接近的同时,输出图像的熵尽可能大,以避免过增强现象。文献[14]利用BBHE算法产生的两个子图像的加权求和得到输出图像,以图像增强前后的亮度不变为约束条件计算权重系数,在最大程度保持原图像亮度的条件下进行图像对比度增强。文献[15]基于亮度绝对误差最小原则自适应选择最佳灰度阈值,对图像所有局部区域进行亮度保持的双直方图均衡处理,提升了图像局部对比度增强效果。文献[16]选择直方图峰值所对应的灰度值作为灰度阈值,将双直方图均衡处理方法用于改善PCB三维CT图像的对比度和动态范围,效果满意。文献[17]以双直方图均衡处理前后的均方差最小约束条件确定灰度阈值,使对比度增强效果在视觉上显得自然。
本文通过理论分析与实验仿真,证明了传统双直方图均衡算法对输出图像亮度的估计存在明显误差,误差大小随具体图像而变化。当这种亮度误差在数值上较大时,必然导致图像增强效果与预期效果的明显差异。对此提出一种适用于双直方图均衡的灰度阈值选择新算法,使输出图像亮度目标得到更精确地控制,从而提高图像增强过程中对亮度保持效果的精确性与稳定性。
HTML
-
BBHE算法是典型的双直方图均衡算法[2],其工作原理可描述如下。设原图像X的平均亮度Xm∈{X0, X1, …, XL-1},以其作为灰度阈值可将原图像分解为两个子图像XL与XU。使用灰度转换函数fL与fU,分别对子图像XL与XU进行直方图均衡处理,然后合并处理后的子图像YL与YU得到输出图像Y:
其中:
式中,cL(x)与cU(x)分别为两个子图像中灰度级x的累积概率密度函数。一幅图像进行直方图均衡后的亮度,其数值上近似等于灰度级范围的中间值。因此YL与YU的平均亮度为:
输出图像Y的亮度期望值为:
式中,P(YL)与P(YU)分别为两个子图像的像素在图像中所占比例。BBHE算法假设原图像直方图在Xm两侧均匀分布,两段直方图中含有相同的像素数:
因此,输出图像Y的亮度期望值可表示为:
式中,XG=(X0+XL-1)/2,是图像灰度级范围的中值。式(6)表明输出图像亮度等于原图像亮度Xm和灰度级中值XG的平均值,输出图像亮度受到原图像亮度的影响,以50%的权重保持了原图像亮度。
-
对于一幅有待进行对比度增强的实际图像,其亮度通常可能偏暗或偏亮,灰度分布存在较大的随机性,因此BBHE算法采用式(5)估算子图像的像素权重可能存在明显误差。为定量分析上述误差大小,采用直方图非均匀分布的图像进行分析。为使分析结果能够量化,不妨用程序分别生成具有三角形直方图的低亮度与高亮度图像用于测试。测试图像及其直方图见图 1,显然测试结果都不满足BBHE算法中假设直方图在Xm两侧均匀分布的条件。
基于平均亮度分解测试图像,将子图像的像素权重统计于表 1,可看出实际数值与式(5)的假设条件存在较大误差。采用BBHE算法处理图 1a与图 1b,输出图像及其直方图见图 1c与图 1d。输出图像的平均亮度统计于表 2,输出图像实际亮度与亮度期望值的相对误差分别为6.29%与-5.03%。在实际应用中,随着图像内容的不同,以上误差大小也将发生变化,有较大的不确定性。综上所述,BBHE算法在图像亮度保持的精确性与稳定性方面均存在明显不足。
1.1. BBHE算法原理
1.2. 输出图像的亮度误差分析
-
选取低亮度、中等亮度与高亮度的3幅实际图像用于本文算法的性能测试,并与BBHE算法进行比较。图 3的第一列为测试图像及其直方图。图 4为图 3中的3幅测试图像的ΔE~XT曲线。根据式(6)计算输出图像的亮度期望值,然后由图 4确定满足亮度期望值要求的所有灰度阈值。依据式(10)与式(11)确定对应于3幅图像的最佳灰度阈值XT*分别为6、223与127,最后采用以上阈值对3幅图像分别进行双直方图均衡处理,输出图像及其直方图见图 3第二列。对于BBHE算法,采用3幅图像的平均亮度Xm作为灰度阈值,分别为10、202与136。BBHE算法的增强结果及其直方图见图 3的右列。由于本文算法与BBHE算法选择的阈值不同,双直方图均衡处理后的图像效果也略有差别。观察两种方法增强后的图 3a中的大门、图 3b右侧的小树,亮度与对比度存在明显差别。对于中等亮度的图 3c,两种方法增强后图像差异较小。
为了考察对输出图像亮度控制目标的精确性,表 3分别记录了本文算法与BBHE算法用于分割直方图的灰度阈值、输出图像实际亮度E及其与亮度期望值ET的相对误差。统计数据表明,BBHE方法的输出图像实际亮度与期望值之间存在明显误差,误差大小随图像不同而变化,尤其是对于整体亮度偏暗或偏亮的图像,相对误差较大。以上3幅测试图像的相对误差范围在-36.94%~8.85%之间。采用本文算法处理的图像亮度与期望值之间的相对误差范围被缩小至0.43%~2.56%。本文算法对亮度控制目标的误差来源于式(3)中对直方图均衡后的子图像亮度估计,由于该项误差通常相对较小,本文算法的输出图像亮度与期望值基本一致,实现了对输出图像亮度目标的精确控制。
测试图像 原图像亮度Xm 输出图像亮度期望值ET 本文算法 BBHE算法 灰度阈值$ X_T^* $ 输出图像亮度E $ \frac{{({{\rm{E}}}-{\rm{E}}_T)}}{{{{\rm{E}}_T}}}/\% $ 灰度阈值$ X_T^* $ 输出图像亮度E $ \frac{{({{\rm{E}}}-{\rm{E}}_T)}}{{{{\rm{E}}_T}}}/\% $ 图 4a 9.87 68.43 6 70.18 2.56 10 43.15 -36.94 图 4b 201.93 164.46 223 165.17 0.43 202 179.01 8.85 图 4c 135.87 131.44 127 134.22 0.59 136 121.94 -7.23 在算法运行效率上,本文算法相对于BBHE算法的主要差别在于灰度阈值的计算时间。由于算法中用于选取最佳灰度阈值的所有运算完全基于输入图像的灰度直方图,并不需要涉及像素空间信息,该计算量相对于图像直方图均衡处理时间可忽略不计。对运行时间的统计结果表明,本文算法与BBHE算法的运行效率没有明显差别。图 3中测试图像的尺寸均为900×600,在Intel CoreTM i3(3.07 GHz)、内存4G的微机上采用Matlab语言编程,BBHE算法的平均运算时间为2.56 ms,本文算法的平均运行时间为2.89 ms。对于一般尺寸的数字图像,算法效率均能满足实时处理要求。