一、概要(问题和方法)

水下机器人(ROV)在检测桥墩裂缝时,常遇到拍摄出的图像整体昏暗、发蓝或发绿,画面中本该清晰可见的裂缝(暗部)和混凝土表面(亮部)都混在一片灰蒙蒙的色调里,对比度很低,给病害识别带来了巨大困难。
直方图均衡化是一种基础且强大的图像增强工具,它能有效改善上述问题。其核心思想是:通过重新分配图像中所有像素的灰度值,将原本“挤”在狭窄区间的灰度分布,重新“拉伸”到整个0-255的范围内。这样,暗的区域会更暗,亮的区域会更亮,从而显著提升图像的整体对比度,让隐藏的裂缝细节得以显现。

二、直方图均衡化原理

想象一下,一张数字图像就像一幅由无数个不同亮度的小点(像素)组成的画。为了了解这张画的亮度构成,我们可以统计每个亮度等级(从纯黑0到纯白255)下有多少个像素点,并将这个统计结果画成一张柱状图——这就是灰度直方图。这张图直观地告诉我们,图像是偏暗、偏亮,还是灰蒙蒙一片(对比度低)。

水下图像的典型问题:由于光线在水下被严重衰减和散射,ROV拍摄的桥墩图像往往整体亮度不足,其灰度直方图显示像素高度集中在中间灰度区域(例如50-150)。这意味着图像中缺乏真正的“黑”(深裂缝)和真正的“白”(反光表面),所有细节都混杂在相近的灰色中,导致对比度极低,裂缝难以辨认。

直方图均衡化的核心思想:它的目标就是对这张“统计图”进行一番大刀阔斧的改造。算法会寻找一种映射关系,把原始图像中那些集中在狭窄区间的像素,重新分配到整个亮度光谱上。简单来说,就是将像素的灰度值进行“重新排队”,让暗的更暗、亮的更亮,使得最终图像的灰度直方图在整体上尽可能分布均匀。

经过这种变换,原本灰暗、模糊的水下图像,其对比度会得到显著增强,裂缝与背景的边界将变得更加分明,为后续的检测与分析打下良好基础。
CLAHE 算法处理前后对比图

CLAHE是一种特殊的直方图均衡;上图为CLAHE算法处理前后对比图

三、核心步骤及示例(包含公式和极简像素矩阵示例)

1. 算法原理

传统直方图均衡化的核心是通过灰度变换函数 T(r)T(r)T(r) 将原始图像灰度级 rrr 映射到新灰度级 sss

s=T(r)=(L−1)∫0rpr(w)dw s = T(r) = (L-1) \int_0^r p_r(w) dw s=T(r)=(L1)0rpr(w)dw

其中:

  • LLL:图像灰度级数(如256)
  • pr(w)p_r(w)pr(w):原始图像灰度级概率密度函数
  • (L−1)(L-1)(L1):将概率分布映射到实际灰度范围的关键系数(如255)

补充说明:直方图均衡化不仅提升对比度,还可能改变图像的整体亮度。具体影响取决于原始图像的灰度分布,因此在实际应用中需要结合具体需求调整。

2.计算步骤

(1) 统计原始直方图

计算图像中每个灰度级 rkr_krk 出现的像素数量 nkn_knk

(2) 计算归一化直方图

将统计值转换为概率分布,即每个灰度级出现的概率:
p(rk)=nkN p(r_k) = \frac{n_k}{N} p(rk)=Nnk
其中:

  • p(rk)p(r_k)p(rk):灰度级rkr_krk出现的概率
  • nkn_knk:灰度级rkr_krk的像素数量
  • NNN:图像总像素数(N=∑k=0L−1nkN = \sum_{k=0}^{L-1} n_kN=k=0L1nk
  • LLL:灰度级总数(如8位图像L=256L=256L=256

补充说明:归一化直方图的意义在于将像素数量转换为概率分布,便于后续计算累积分布函数(CDF)。

(3) 计算累积分布函数(CDF)

通过累加归一化直方图得到CDF,表示灰度级小于等于rkr_krk的像素占比:
CDF(rk)=∑j=0kp(rj) CDF(r_k) = \sum_{j=0}^{k} p(r_j) CDF(rk)=j=0kp(rj)
关键特性:

  • CDF单调递增,值域为[0,1][0,1][0,1]
  • 最终CDF(L−1)=1CDF(L-1) = 1CDF(L1)=1(所有灰度级概率之和为1)

补充说明:CDF 的单调递增特性确保了灰度值的重新映射是有序的,避免了灰度值的混乱。

(4) 映射到新灰度级

sk=round((L−1)×CDF(rk)) s_k = \text{round}\left( (L-1) \times CDF(r_k) \right) sk=round((L1)×CDF(rk))
其中:

  • LLL:灰度级总数
  • (L−1)(L-1)(L1):最大灰度值

补充说明:使用四舍五入(round)操作是为了将计算结果映射到实际的灰度级范围内,避免小数灰度值的出现。

(5) 生成均衡化图像

将原始像素值替换为映射后的新值。

3. 数学示例

假设4×4图像像素值如下(假设灰度级总数为8):
[3, 5, 5, 7]
[3, 5, 7, 7]
[5, 5, 7, 7]
[7, 7, 7, 7]

(1) 统计原始直方图

  • 灰度级3:2个像素
  • 灰度级5:4个像素
  • 灰度级7:10个像素

(2) 归一化直方图/概率分布

  • 总像素数N=16N=16N=16
  • p(3)=216=0.125p(3) = \frac{2}{16} = 0.125p(3)=162=0.125
  • p(5)=416=0.25p(5) = \frac{4}{16} = 0.25p(5)=164=0.25
  • p(7)=1016=0.625p(7) = \frac{10}{16} = 0.625p(7)=1610=0.625

(3) 累积分布函数(CDF)

  • CDF(3)=p(3)=0.125CDF(3) = p(3) = 0.125CDF(3)=p(3)=0.125
  • CDF(5)=CDF(3)+p(5)=0.125+0.25=0.375CDF(5) = CDF(3) + p(5) = 0.125 + 0.25 = 0.375CDF(5)=CDF(3)+p(5)=0.125+0.25=0.375
  • CDF(7)=CDF(5)+p(7)=0.375+0.625=1.0CDF(7) = CDF(5) + p(7) = 0.375 + 0.625 = 1.0CDF(7)=CDF(5)+p(7)=0.375+0.625=1.0

(4) 映射到新灰度级

  • s(3)=round(7×0.125)=1
  • s(5)=round(7×0.375)=3
  • s(7)=round(7×1.0)=7

(5) 生成均衡化图像
[3,5,5,7] → [1,3,3,7]
[3,5,7,7] → [1,3,7,7]
[5,5,7,7] → [3,3,7,7]
[7,7,7,7] → [7,7,7,7]

结果分析

灰度级 rkr_krk 像素数 nkn_knk pr(rk)p_r(r_k)pr(rk) CDF(rk)CDF(r_k)CDF(rk) 新灰度级 sks_ksk
3 2 0.125 0.125 1
5 4 0.250 0.375 3
7 10 0.625 1.000 7
指标 原始图像 均衡后图像 提升效果说明
平均灰度 6.5 5.25 灰度分布调整,整体亮度略有下降
标准差 1.62 2.65 对比度提升约63.6%,图像细节更突出
信息熵 1.299 1.299 信息熵未显著变化,但对比度提升有助于细节识别

四 真实图像处理代码

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐