在上一节中,我们了解了图像直方图如何概括图像中的亮度分布。通常,在实际条件下拍摄的图像可能对比度较差,这意味着它们的像素亮度集中在一个狭窄的范围。这可能由于光照条件不佳、成像传感器限制或特定场景特点造成。这类图像可能显得褪色或过暗,使细节难以分辨。直方图均衡化是一种自动技术,旨在改善图像的整体对比度,通过有效地分散最常见的亮度值。它的目标是重新分配像素亮度,使其尽可能均匀地分布遍布整个可用亮度范围(通常对于8位灰度图像是0到255)。均衡化的原理设想一张灰度图像,其中大部分像素集中在中间灰色值附近。其直方图会在中间显示一个大峰,而在暗端和亮端只有很少的像素。直方图均衡化的目的是拉伸这个狭窄的亮度范围,使其覆盖从黑色到白色的全部光谱。直方图均衡化通过根据图像的整体亮度分布来变换每个像素的亮度,从而增强图像对比度。其主要思想基于图像直方图的累积分布函数(CDF)。使用累积分布函数(CDF)直方图告诉我们每个亮度级别上像素的频率(或数量)。对于给定的亮度级别 $k$,CDF表示所有亮度级别(包括 $k$)的频率累积和。本质上,它告诉我们图像中亮度低于或等于 $k$ 的像素比例。对于具有 $L$ 个可能亮度级别(例如,8位灰度图像的 $L=256$,级别为 $0, 1, ..., L-1$)的图像,令 $n_k$ 为亮度为 $k$ 的像素数量,$N$ 为图像中的总像素数量。归一化直方图值(亮度 $k$ 的概率)是 $p(k) = n_k / N$。离散CDF计算公式如下: $$ CDF(k) = \sum_{j=0}^{k} p(j) $$ 这个 $CDF(k)$ 值范围从 $p(0)$ (当 $k=0$) 到 1 (当 $k=L-1$)。直方图均衡化使用这个CDF将输入像素亮度 $k$ 映射到新的输出亮度 $k'$。变换函数 $T(k)$ 本质上是缩放后的CDF值: $$ k' = T(k) = \text{取整}((L-1) \times CDF(k)) $$ 此处,$L-1$ 是可能的最大亮度值(例如,255)。round() 函数确保输出是整数亮度级别。这种变换的作用是将亮度密集区域(直方图高,CDF斜率陡峭)的像素映射到更宽的输出亮度范围。反之,亮度稀疏区域(直方图低,CDF斜率平缓)的像素被映射到较窄的输出亮度范围。整体效果是直方图分布更广,理想情况下更接近均匀分布,从而提高整体对比度。{"layout": {"title": "直方图和CDF", "xaxis": {"title": "亮度", "range": [0, 255]}, "yaxis": {"title": "频率 / 概率"}, "yaxis2": {"title": "CDF", "overlaying": "y", "side": "right", "range": [0, 1]}, "legend": {"x": 0.01, "y": 0.99}, "width": 600, "height": 400, "bargap": 0.1}, "data": [{"type": "bar", "x": [50, 75, 100, 125, 150, 175], "y": [0.1, 0.2, 0.4, 0.2, 0.05, 0.05], "name": "原始低对比度直方图", "marker": {"color": "#4c6ef5"}}, {"type": "scatter", "x": [50, 75, 100, 125, 150, 175, 255], "y": [0.1, 0.3, 0.7, 0.9, 0.95, 1.0, 1.0], "name": "原始CDF", "yaxis": "y2", "line": {"color": "#4c6ef5", "dash": "dash"}}, {"type": "bar", "x": [25, 50, 75, 100, 125, 150, 175, 200, 225], "y": [0.1, 0.1, 0.15, 0.15, 0.15, 0.1, 0.1, 0.05, 0.05], "name": "均衡化直方图(理想化)", "marker": {"color": "#40c057"}}, {"type": "scatter", "x": [25, 50, 75, 100, 125, 150, 175, 200, 225, 255], "y": [0.1, 0.2, 0.35, 0.5, 0.65, 0.75, 0.85, 0.9, 0.95, 1.0], "name": "均衡化CDF(理想化)", "yaxis": "y2", "line": {"color": "#40c057", "dash": "dash"}}]}直方图均衡化示意图。低对比度直方图(蓝色条形)及其陡峭上升的CDF(蓝色虚线)被变换为分布更广的直方图(绿色条形)及其更接近线性的CDF(绿色虚线),覆盖了更宽的亮度范围。何时使用直方图均衡化(何时不使用)直方图均衡化特别适用于以下图像:背景和前景都偏暗或偏亮: 它能显著提高它们之间的对比度。图像需要自动增强时: 这是一种无需参数的方法。细节隐藏在亮度相近的区域时: 均衡化能使这些细节更清晰。然而,它并非适用于所有图像的完美方案:噪声放大: 如果原始图像含有噪声,尤其是在亮度相对均匀的区域,均衡化可能会放大这些噪声,使其更明显。不自然的外观: 由于它强制亮度分布趋于均匀,有时会产生不自然的结果,尤其是在本身已有良好对比度的图像中。全局效应: 它作用于整个图像的直方图。如果只需要增强特定区域的对比度,全局直方图均衡化可能会对图像的其他部分产生不良影响。在这种情况下,通常更倾向于使用自适应直方图均衡化等技术(如CLAHE),它们作用于局部图像块,但这些内容超出了本介绍章节的范围。总而言之,直方图均衡化是一种基本且常用技术,用于自动改善图像对比度,通过根据累积分布函数重新分配其像素亮度值。尽管功能强大,但务必注意其潜在缺点,例如噪声放大和其全局性。