[GEE] 质量波段去云处理与按位运算掩膜

在遥感影像处理中,云层常常会影响影像的质量。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);
}

代码解读

  1. 定义掩膜位cloudShadowBitMaskcloudsBitMask分别表示云影和云的位掩膜。
  2. 选择质量波段:使用image.select('QA_PIXEL')选择质量波段。
  3. 创建掩膜:通过按位与运算和eq(0)函数筛选出无云和无云影的像素。
  4. 应用掩膜:使用updateMask(mask)函数应用掩膜,得到去云后的影像。
### 处理 MOD11A2 数据以层影响 在 Google Earth Engine 中处理 MOD11A2 数据时,可以通过应用质量控制(QC)位掩码来过滤掉受层影响的数据。MOD11A2 数据集提供了多个波段,其中包括用于识别不同类型的干扰的质量标志。 为了有效移除层的影响,通常会使用 `QA` 波段中的特定比特位来进行筛选。这些 QA 位包含了关于像素状态的信息,比如是否存在、阴影或其他异常状况。通过解析并设置合适的条件表达式,可以从原始图像集合中排除那些不符合标准的像元。 下面是一个 Python 脚本的例子,在此脚本里定义了一个函数 `_maskClouds()` 来实现这一目的: ```python import ee def _maskClouds(image): qa = image.select('QC_Day') # Bits 0 and 1 are clouds; bit value is 0 when there's no cloud. cloudMask = qa.bitwiseAnd(3).eq(0) return image.updateMask(cloudMask) # Initialize the Earth Engine API with your credentials ee.Initialize() modisCollection = (ee.ImageCollection('MODIS/006/MOD11A2') .filterDate('2020-01-01', '2020-12-31')) maskedModisCollection = modisCollection.map(_maskClouds) ``` 这段代码首先选择了 `QC_Day` 波段作为评估对象,并构建了一个逻辑判断语句来检测哪些地方存在覆盖。具体来说,就是检查第零和第一位是否都为零;如果是,则认为该位置没有被遮挡。最后一步则是更新原图象蒙版,使得只有满足上述条件的地方才会保留下来[^1]。 此外,对于更复杂的场景,还可以考虑结合其他辅助数据源或算法进一步优化效果,例如利用多光谱反射率估算大气校正后的地表反射率,从而间接减少因而产生的误差[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

runepic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值