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 知识体系图:直方图统计特征

下面这张图把四个统计量的关系、计算方式和遥感解读串起来了。你可以把它当作快速参考。

直方图统计特征知识体系 直方图统计特征 均值 (Mean) 方差 (Variance) 偏度 (Skewness) 峰度 (Kurtosis) 亮度基准 反映平均反射率 判断图像整体明暗 用于传感器一致性检查 信息量指标 衡量像素离散程度 方差大→地物丰富 方差小→图像平淡 分布对称性 正偏→暗像素占主导 负偏→亮像素占主导 用于云检测、阴影检测 分布尖锐度 峰度高→地物单一 峰度低→地物多样 辅助判断噪声水平 四个统计量协同分析 → 快速诊断图像质量 计算方式:均值→一阶矩 | 方差→二阶中心矩 | 偏度→三阶标准化矩 | 峰度→四阶标准化矩 遥感应用:质量评估、地物分类预处理、大气校正效果验证

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 小结

均值、方差、偏度、峰度这四个数,是直方图的“数字指纹”。它们能帮你快速判断图像质量、发现传感器异常、识别地物类型。记住:别只看图像长什么样,先看数字怎么说。