4. 直方图与图像质量

拿到一张遥感影像,第一眼看的什么?

我个人的习惯,不是先看图像本身,而是先拉一下它的直方图。为什么?因为人眼会骗人,但像素的统计分布不会。一张图看着挺亮,可能暗部细节全丢了;看着灰蒙蒙的,也许信息量反而很丰富。直方图就是图像的「体检报告」,过暗、过亮、对比度低,全写在上面。

4.1 直方图的基本形态与「健康」图像

先说说什么是「健康」的直方图。一张曝光合理、对比度适中的遥感图像,它的直方图应该是什么样的?

  • 分布范围宽:像素值从接近0到接近255都有覆盖,不挤在某个小区域。
  • 无明显断层:灰度级连续,没有大段空白(除非是特殊地物,比如纯水体)。
  • 峰值适中:不会出现一个极高的尖峰把其他信息都压下去。

说白了,就是直方图「铺得开、走得匀」。我在处理高分二号的城市影像时,经常拿这个标准去卡——如果直方图两头都顶到边了,中间还有起伏,那这张图的质量基本没问题。

健康直方图特征速查

  • 覆盖范围:≥ 90% 的灰度动态范围
  • 无连续 10 个以上灰度级为零
  • 主峰高度不超过总像素数的 15%

4.2 过暗图像:直方图「左偏」

过暗图像,也叫低照度图像。它的直方图长什么样?

像素值集中在左侧,也就是低灰度区域。大部分像素的 DN 值在 0~50 之间,右侧高亮区域几乎没像素。你想想看,整张图看起来黑乎乎的,像蒙了一层灰布。

我在项目中遇到过一件事。有一次处理山区阴影区域的 WorldView-3 数据,直方图峰值压在 DN=15 的位置,右侧到 DN=80 就没了。肉眼看去,山沟里的植被和土壤根本分不清。这就是典型的过暗——动态范围被压缩在暗部,信息挤在一起,人眼分辨不出来。

判断指标:如果直方图主体(90% 像素)集中在 0~64 区间,且右侧 192~255 区间像素占比 < 1%,基本可以判定为过暗。

过暗图像的问题不只是「看不清楚」。更严重的是,暗部噪声会被放大。我曾经做过一个实验:对一张过暗的 Landsat 8 影像做线性拉伸,结果暗部的传感器噪声也跟着被放大了,图像出现明显的条带。所以,遇到过暗图像,别急着拉伸,先看看噪声水平。

4.3 过亮图像:直方图「右偏」

过亮图像正好反过来。直方图像素值集中在右侧,大部分 DN 值在 200~255 之间。图像看起来白花花一片,像曝光过度。

这种情况在雪地、沙漠、云层覆盖的区域很常见。我记得有一次处理青藏高原的积雪影像,直方图峰值直接顶在 DN=255 的位置,而且有一个很长的「拖尾」——大量像素被截断在 255,说明已经饱和了。

饱和问题:当直方图在 255 处出现一个陡峭的尖峰,说明大量像素被「截断」。这些区域的真实辐射信息已经丢失,后期再怎么处理也恢复不了。这是硬件层面的损失,不可逆。

过亮图像的处理难点在于:你不能简单地把亮度压下来,因为饱和区的信息已经没了。我建议的做法是,先检查直方图右侧是否有「悬崖式」截断。如果有,那这部分区域只能当作无效区域处理,或者用其他时相的数据补充。

4.4 低对比度图像:直方图「窄分布」

低对比度图像,是遥感影像里最常见的质量问题。它的直方图特征是:像素值集中在一个狭窄的区间内,不管这个区间是在暗部、亮部还是中间。

举个例子:一张雾霾天气下的 SPOT 影像,直方图可能集中在 DN=80~120 之间,左右两边都是空的。图像看起来灰蒙蒙的,像隔了一层毛玻璃。地物的边界模糊,纹理细节丢失。

我把它分成三种情况:

类型 直方图位置 典型场景 处理难度
暗部窄分布 集中在 0~50 阴影、夜间、浓密植被 中等(噪声放大风险)
亮部窄分布 集中在 200~255 雪地、沙漠、云层 高(饱和风险)
中部窄分布 集中在 64~192 雾霾、薄云、大气散射严重 低(拉伸效果好)

中部窄分布其实是最「好救」的。因为信息没有丢失,只是被压缩了。做一次直方图均衡化或者线性拉伸,效果立竿见影。但暗部和亮部的窄分布,处理起来就要小心了——前者怕噪声,后者怕饱和。

4.5 综合判断流程:一张图看懂

下面这张 SVG 图,是我在实际项目中总结的判断流程。拿到一张影像,按这个顺序走一遍,基本能定位问题。

直方图质量判断流程 获取图像直方图 判断:像素分布范围是否 ≥ 90%? 是 判断:直方图有无截断/饱和? 无 ✅ 图像质量健康 否(窄分布) 低对比度图像 有截断 过亮/饱和图像 判断峰值位置 暗部窄分布 中部窄分布 亮部窄分布 判断截断位置 暗部截断 亮部截断 💡 判断要点 先看分布范围 → 再看有无截断 → 最后定位峰值/截断位置 中部窄分布最容易处理,亮部截断最难修复

4.6 实战案例:三张图的直方图对比

光说理论不够。我拿三个真实案例来对比,你一看就明白。

案例 直方图特征 肉眼效果 处理建议
案例A:山区阴影 峰值在 DN=20,90% 像素在 0~60 图像极暗,细节不可辨 先做去噪,再做直方图均衡化
案例B:雪地影像 峰值在 DN=250,DN=255 处有截断尖峰 图像过亮,雪地纹理丢失 检查饱和区域,考虑多时相融合
案例C:雾霾城市 集中在 DN=80~140,左右空白 图像灰蒙蒙,边界模糊 线性拉伸或去雾处理,效果显著

案例C是我最喜欢处理的一类。为什么?因为信息没丢,只是被「压缩」了。做一次线性拉伸,把 DN=80~140 映射到 0~255,图像瞬间通透。但案例A和B就麻烦得多——一个要跟噪声做斗争,一个要面对不可恢复的信息损失。

曾经踩过的坑:有一次我处理案例A类型的影像,直接做了直方图均衡化。结果暗部噪声被放大,图像出现明显的「颗粒感」。后来我学乖了,先做了一轮中值滤波去噪,再做均衡化,效果好了很多。记住:过暗图像的处理,去噪要走在增强前面。

4.7 快速自查清单

最后,给你一个我在项目里用的自查清单。拿到一张影像,按这个顺序检查,5 分钟就能判断出图像质量。

  1. 看分布范围:直方图覆盖了 0~255 的多少?如果 < 60%,直接判定为低对比度。
  2. 看峰值位置:主峰在左侧(过暗)、右侧(过亮)还是中间(低对比度)?
  3. 看截断情况:0 或 255 处有没有陡峭尖峰?有的话,信息已丢失。
  4. 看噪声水平:直方图底部有没有「毛刺」?毛刺多说明噪声大。
  5. 看地物可分性:不同地物的峰值是否重叠严重?重叠多说明对比度不足。