如何对Landsat-8地表反射率卫星图像归一化以输入神经网络?
Landsat-8的Level-2地表反射率产品以DN值(1-65535)存储,但这些数值是经过官方缩放的,并非均匀覆盖整个范围,直接用最大值归一化会因有效像素集中在窄区间导致图像偏暗/偏白。以下是针对这类卫星图像的实用归一化方法:
官方缩放系数还原法
Landsat-8地表反射率有标准转换公式,先将DN值还原为真实物理意义的反射率(范围通常在-0.1到1.0之间),再处理:真实反射率 = DN * 0.00002 - 0.1
还原后可将数值裁剪到0-1区间(舍去极少数异常值),结果既符合物理逻辑,也适配神经网络输入,同时能得到正常视觉效果的图像。百分位截断归一化
通过过滤极端异常值(如亮云、深阴影)来优化数值分布:- 统计图像DN值的2%分位数(Q2)和98%分位数(Q98)
- 截断超出范围的数值:
clipped_DN = max(min(DN, Q98), Q2) - 映射到0-1区间:
normalized = (clipped_DN - Q2) / (Q98 - Q2)
这种方法能让有效像素的对比度更合理,避免整体色调偏差,同时保留大部分有用信息。
均值-标准差标准化(Z-score归一化)
针对每个波段单独计算统计特征,将数值转换为均值为0、标准差为1的分布:normalized = (DN - μ) / σ
其中μ是波段DN值的均值,σ是标准差。若存在极端异常值,建议先做百分位截断再计算统计量,结果会更稳定。这种方式适合神经网络训练,能平衡不同波段的数值权重,避免某波段主导训练过程。分段线性拉伸
结合Landsat-8各波段的典型数值范围,针对不同波段设置专属拉伸区间:
比如可见光波段(B2-B4)的有效DN值多集中在0-30000,短波红外波段(B5-B7)可设为0-40000,再将数值映射到0-1:normalized = min(DN / 波段典型最大值, 1.0)
这种方法需要对Landsat波段特性有基础了解,能快速调整出视觉正常的图像,也可结合单波段统计结果动态设置区间。
内容的提问来源于stack exchange,提问作者Loki

