水下图像增强之直方图均衡法——以桥墩表面裂缝检测为例
一、概要(问题和方法)
水下机器人(ROV)在检测桥墩裂缝时,常遇到拍摄出的图像整体昏暗、发蓝或发绿,画面中本该清晰可见的裂缝(暗部)和混凝土表面(亮部)都混在一片灰蒙蒙的色调里,对比度很低,给病害识别带来了巨大困难。
直方图均衡化是一种基础且强大的图像增强工具,它能有效改善上述问题。其核心思想是:通过重新分配图像中所有像素的灰度值,将原本“挤”在狭窄区间的灰度分布,重新“拉伸”到整个0-255的范围内。这样,暗的区域会更暗,亮的区域会更亮,从而显著提升图像的整体对比度,让隐藏的裂缝细节得以显现。
二、直方图均衡化原理
想象一下,一张数字图像就像一幅由无数个不同亮度的小点(像素)组成的画。为了了解这张画的亮度构成,我们可以统计每个亮度等级(从纯黑0到纯白255)下有多少个像素点,并将这个统计结果画成一张柱状图——这就是灰度直方图。这张图直观地告诉我们,图像是偏暗、偏亮,还是灰蒙蒙一片(对比度低)。
水下图像的典型问题:由于光线在水下被严重衰减和散射,ROV拍摄的桥墩图像往往整体亮度不足,其灰度直方图显示像素高度集中在中间灰度区域(例如50-150)。这意味着图像中缺乏真正的“黑”(深裂缝)和真正的“白”(反光表面),所有细节都混杂在相近的灰色中,导致对比度极低,裂缝难以辨认。
直方图均衡化的核心思想:它的目标就是对这张“统计图”进行一番大刀阔斧的改造。算法会寻找一种映射关系,把原始图像中那些集中在狭窄区间的像素,重新分配到整个亮度光谱上。简单来说,就是将像素的灰度值进行“重新排队”,让暗的更暗、亮的更亮,使得最终图像的灰度直方图在整体上尽可能分布均匀。
经过这种变换,原本灰暗、模糊的水下图像,其对比度会得到显著增强,裂缝与背景的边界将变得更加分明,为后续的检测与分析打下良好基础。
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)=(L−1)∫0rpr(w)dw
其中:
- LLL:图像灰度级数(如256)
- pr(w)p_r(w)pr(w):原始图像灰度级概率密度函数
- (L−1)(L-1)(L−1):将概率分布映射到实际灰度范围的关键系数(如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=0L−1nk)
- 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=0∑kp(rj)
关键特性:
- CDF单调递增,值域为[0,1][0,1][0,1]
- 最终CDF(L−1)=1CDF(L-1) = 1CDF(L−1)=1(所有灰度级概率之和为1)
补充说明:CDF 的单调递增特性确保了灰度值的重新映射是有序的,避免了灰度值的混乱。
(4) 映射到新灰度级
sk=round((L−1)×CDF(rk)) s_k = \text{round}\left( (L-1) \times CDF(r_k) \right) sk=round((L−1)×CDF(rk))
其中:
- LLL:灰度级总数
- (L−1)(L-1)(L−1):最大灰度值
补充说明:使用四舍五入(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 | 信息熵未显著变化,但对比度提升有助于细节识别 |
四 真实图像处理代码
略
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)