在遥感影像处理中,云层常常会影响影像的质量。Google Earth Engine(GEE)提供了强大的工具来处理这些问题。本文介绍使用GEE中的质量波段(QA Band)进行去云处理(类似的可以借助其他波段进行需要的处理),并通过按位运算来实现这一目标。
通过使用GEE中的质量波段和按位运算,我们可以有效地去除影像中的云层和云影,从而提高影像的质量,也可有效的筛选像元。
什么是质量波段(QA Band)?
质量波段是用于评估影像质量的波段。每个像素的值是一个二进制数,每一位或几位代表不同的质量属性。例如,Landsat 8的QA_PIXEL
波段包含以下信息:
- Bit 0: 填充
- Bit 1: 扩展云
- Bit 2: 卷云
- Bit 3: 云
- Bit 4: 云影
- Bit 5: 雪
- Bit 6: 清晰
- Bit 7: 水
不同的遥感数据集可能会有不同的质量波段。例如,MODIS数据集的QC_Day
波段包含以下信息:
- Bit 0-1: LST质量
- Bit 2-3: 数据质量
- Bit 4-5: 忽略
- Bit 6-7: LST误差
按位运算的基本概念
按位运算是一种对二进制数进行逐位操作的技术。在GEE中,常用按位与(bitwiseAnd)来筛选特定的质量属性。例如,bitwiseAnd(1 << 3)
表示将二进制数1左移三位,得到0000 1000
,然后与质量波段的值进行按位与运算。
按位运算符
- 按位与(&):只有两个操作数对应位同为1时,结果为1,其余全为0。
- 按位或(|):只要两个操作数对应位中有一个为1,结果就为1。
- 按位非(~):将操作数的每一位取反。
- 按位异或(^):只有两个操作数对应位不同时,结果为1。
- 左移(<<):将二进制数向左移动指定的位数,低位补0。
- 右移(>>):将二进制数向右移动指定的位数,高位补符号位。
去云函数示例
以下是一个Landsat 8去云函数的示例代码:
function maskL8sr(image) {
// Bit 3 - 云
// Bit 5 - 云影
var cloudShadowBitMask = (1 << 3);
var cloudsBitMask = (1 << 5);
// 获取质量波段
var qa = image.select('QA_PIXEL');
// 创建掩膜,筛选出无云和无云影的像素
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
.and(qa.bitwiseAnd(cloudsBitMask).eq(0));
// 应用掩膜并返回处理后的影像
return image.updateMask(mask);
}
代码解读
- 定义掩膜位:
cloudShadowBitMask
和cloudsBitMask
分别表示云影和云的位掩膜。 - 选择质量波段:使用
image.select('QA_PIXEL')
选择质量波段。 - 创建掩膜:通过按位与运算和
eq(0)
函数筛选出无云和无云影的像素。 - 应用掩膜:使用
updateMask(mask)
函数应用掩膜,得到去云后的影像。