栅格数据的波段及其操作
什么是波段(Band)
在栅格数据中,**波段(Band)**是指在同一空间网格结构下的一组像元数值集合。每个波段都共享相同的空间参考、范围、分辨率和行列结构,但存储的数值含义可以不同。
- 单波段栅格:每个像元仅包含一个数值
- 多波段栅格:每个像元在同一位置上包含多个数值,分别存储在不同波段中
波段是栅格数据表达多维信息的基本单位,常用于表示不同时间、不同变量或不同光谱信息。
栅格数据中的波段存储方式
从数据结构上看,多波段栅格可以理解为:
一张空间网格 + 多个按波段顺序排列的二维数值矩阵
- 所有波段使用完全一致的空间几何结构
- 波段之间仅在数值语义上存在差异
- 波段通常以 Band 1、Band 2、Band 3 … 的顺序编号存储
在遥感影像中,不同波段可表示不同光谱通道;在分析结果中,不同波段也可用于存储多个计算结果或派生指标。
为什么需要波段操作
在实际的数据处理和分析过程中,并非所有波段都始终有用,且不同应用对波段组合的需求也不相同。因此,需要提供对波段的管理与操作能力。
常见需求包括:
- 添加波段 将新的计算结果、派生指标或中间结果写入同一栅格文件中,便于统一管理和后续分析。
- 删除波段 移除不再需要或冗余的波段,以减少数据体量、提高处理效率。
- 提取波段 从多波段栅格中提取指定波段,生成单波段或新的多波段栅格,用于特定分析或建模任务。
- 重组波段顺序 按照分析或显示需求调整波段排列顺序,确保工具或渲染逻辑正确使用对应波段。
波段操作的意义
波段操作并不改变栅格的空间位置或分辨率,其核心作用在于管理栅格数据中承载的数值信息结构。 通过合理的波段添加、删除和提取,可以:
- 提高数据组织的清晰度
- 降低不必要的存储与计算开销
- 支持更灵活的分析与建模流程
波段计算、引用与Numpy
在进行栅格计算或分析时,栅格数据通常会被映射为 NumPy 数组参与运算。此时,波段本质上对应的是 NumPy 数组的一个维度。
单波段栅格
单波段栅格在 NumPy 中通常表示为一个二维数组:
(rows, cols)
- 每个数组元素对应一个像元值
- 数组的行列结构与栅格的行列完全一致
示意:
array[row, col] # 单个像元值
多波段栅格
多波段栅格在 NumPy 中通常表示为一个三维数组,其中一个维度用于表示波段:
(bands, rows, cols)
这是 GIS 与遥感处理中最常见、最清晰的波段映射方式。
- 第 1 维:波段索引
- 第 2 维:行(Row)
- 第 3 维:列(Column)
在进行栅格计算时,有些计算仅支持对栅格数据的某一波段进行计算,不支持对栅格数据的多波段数据进行整体计算,因此需要再计算时引用栅格数据的某一波段。
波段索引与波段引用
在栅格计算器中,表达式里的“变量”可以指向某个输入栅格或其指定波段。
- 引用范围
- 栅格引用仅在当前一次工具运行中有效
- 名称区分大小写
- 栅格引用(Raster Name)
- 直接使用输入列表中的“文件引用名称”(通常就是文件名)来引用栅格
示例(以文件名作为引用):
result = T50SKH_B02_100m.tif + T50SKH_B03_100m.tif
- 波段引用(
RasterName.bandN)
- 多波段栅格可用
栅格名.bandN引用指定波段,N从 1 开始 - 单波段栅格中,
a与a.band1等价
示例:
nd = 空飞-多波段栅格-100m.tif.band4 - 空飞-多波段栅格-100m.tif.band2