2. 直方图统计特征:均值、方差、偏度、峰度在遥感图像中的解读
直方图不只是个“长相”,它背后藏着四个关键数字——均值、方差、偏度、峰度。这四个统计量,说白了就是图像的“体检报告”。我每次拿到一景遥感影像,第一件事不是盯着看,而是先算这四个数。它们能告诉你图像有没有过曝、信息量够不够、地物类型多不多。
咱们一个一个来拆解。
2.1 均值(Mean)——图像的“亮度基准”
均值就是所有像素亮度的平均值。你想想看,一张图像整体偏亮还是偏暗,均值说了算。
- 物理含义:反映地物的平均反射率或辐射亮度。
- 典型场景:水体均值低(暗),雪地均值高(亮),植被居中。
- 我的经验:如果均值突然比历史同期数据高了20%,我第一反应是——传感器可能出问题了,或者大气校正没做好。
实用技巧:多光谱影像中,近红外波段的均值通常比可见光波段高(植被强反射)。如果反过来,那图像八成有问题。
2.2 方差(Variance)——图像的“信息量”
方差衡量像素值偏离均值的程度。方差大,说明图像里亮暗差异大,地物类型丰富;方差小,图像就“灰蒙蒙一片”,信息量少。
| 方差值 | 图像表现 | 典型场景 |
|---|---|---|
| 小(< 500) | 对比度低,细节模糊 | 浓雾、大面积水体、均匀沙漠 |
| 中等(500–2000) | 对比度适中,细节清晰 | 农田、城市、混合林地 |
| 大(> 2000) | 对比度高,可能有饱和 | 雪地+裸岩、强阴影区域 |
嗯,这里要注意:方差不是越大越好。方差过大往往意味着部分区域过曝或欠曝,信息反而丢失了。
2.3 偏度(Skewness)——直方图的“歪脖子”
偏度描述直方图是否对称。正偏(右偏)意味着大部分像素偏暗,少数像素很亮;负偏(左偏)则相反。
- 偏度 = 0:对称分布,图像亮度均匀。
- 偏度 > 0:直方图右侧拖尾,图像整体偏暗。
- 偏度 < 0:直方图左侧拖尾,图像整体偏亮。
遥感中的解读:
水体影像的偏度通常为正(大面积暗像素+少量亮噪声)。
雪地影像的偏度通常为负(大面积亮像素+少量暗岩石)。
我做过一个项目,用偏度来检测云覆盖——云区的偏度会突然从正变负,因为云把暗地表全盖住了。
水体影像的偏度通常为正(大面积暗像素+少量亮噪声)。
雪地影像的偏度通常为负(大面积亮像素+少量暗岩石)。
我做过一个项目,用偏度来检测云覆盖——云区的偏度会突然从正变负,因为云把暗地表全盖住了。
2.4 峰度(Kurtosis)——直方图的“胖瘦”
峰度衡量直方图分布的“尖锐”程度。峰度大,像素值集中在均值附近;峰度小,像素值分布分散。
- 峰度 > 3(尖峰):地物类型单一,比如大面积水体、沙漠。
- 峰度 ≈ 3(正态):地物类型混合均匀。
- 峰度 < 3(平顶):地物类型多样,亮度层次丰富。
避坑指南:我曾经用峰度判断一幅城市影像的信息量,结果峰度很低,我以为信息丰富。后来才发现——那是传感器噪声太大,把直方图“拉平”了。所以峰度要结合方差一起看,别单看一个数。
2.5 四个统计量的协同解读
单独看一个数意义有限,四个数放一起才能看出门道。我习惯用一张表来快速判断图像质量:
| 均值 | 方差 | 偏度 | 峰度 | 可能的问题 |
|---|---|---|---|---|
| 低 | 小 | 正偏 | 高 | 图像过暗,信息量不足 |
| 高 | 小 | 负偏 | 高 | 图像过亮,细节丢失 |
| 中等 | 大 | 接近0 | 接近3 | 质量良好,适合进一步处理 |
| 中等 | 大 | 正偏 | 低 | 可能有噪声或混合地物 |
2.6 知识体系图:直方图统计特征
下面这张图把四个统计量的关系、计算方式和遥感解读串起来了。你可以把它当作快速参考。
2.7 实战:用Python快速计算四个统计量
理论说完了,咱们上手算一下。下面这段代码用GDAL和NumPy,一行代码算一个统计量。
import gdal
import numpy as np
# 读取单波段影像
ds = gdal.Open('landsat_b4.tif')
band = ds.GetRasterBand(1)
data = band.ReadAsArray().astype(np.float32)
# 计算四个统计量
mean = np.mean(data)
variance = np.var(data)
skewness = np.mean(((data - mean) / np.std(data)) ** 3)
kurtosis = np.mean(((data - mean) / np.std(data)) ** 4)
print(f"均值: {mean:.2f}")
print(f"方差: {variance:.2f}")
print(f"偏度: {skewness:.2f}")
print(f"峰度: {kurtosis:.2f}")
# 快速判断
if abs(skewness) < 0.5 and 2.5 < kurtosis < 3.5:
print("图像分布接近正态,质量良好")
elif skewness > 1:
print("图像偏暗,建议做亮度拉伸")
elif skewness < -1:
print("图像偏亮,注意过曝区域")
我的习惯:我会把这段代码封装成一个函数,每次打开影像先跑一遍。如果偏度值超过1.5,我会直接标记“需要预处理”,不急着往下做分类或变化检测。
2.8 小结
均值、方差、偏度、峰度这四个数,是直方图的“数字指纹”。它们能帮你快速判断图像质量、发现传感器异常、识别地物类型。记住:别只看图像长什么样,先看数字怎么说。