Google Earth Engine中Landsat 8云处理核心代码解析

在遥感影像处理中,云覆盖是影响数据质量的主要挑战。下面将围绕Landsat 8云掩膜与去云处理的核心代码展开解析,帮助理解不同方法的技术原理与应用场景。

一、Landsat 8影像筛选与云量初步过滤
// 筛选Landsat 8影像并进行云量初步筛选
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  .filterBounds(userDrawnRectangle)
  .filterDate(startDate, endDate)
  .filterMetadata('CLOUD_COVER', 'less_than', 25)  // 云量小于25%
  .filterMetadata('CLOUD_COVER', 'greater_than', 5);  // 确保有一定云量用于测试

核心解析

  • 数据筛选:通过filterBoundsfilterDate限定空间范围与时间区间,确保获取目标区域的影像。
  • 云量过滤CLOUD_COVER元数据表示整景影像的云覆盖比例,less_than 25排除高云量影像,greater_than 5避免无云场景(无法测试云处理效果)。
二、云掩膜核心方法:从基础到增强
1. 原始云掩膜(基于Landsat标准QA波段)
function maskCloudsOriginal(image) {
  var qa = image.select('QA_PIXEL');
  var cloud = qa.bitwiseAnd(1 << 3).or(qa.bitwiseAnd(1 << 4));  // 高置信度云+云阴影
  var cirrus = qa.bitwiseAnd(1 << 2);  // 卷云
  return image.updateMask(cloud.not()).updateMask(cirrus.not());
}

核心解析

  • QA_PIXEL波段:Landsat 8的质量评估波段通过二进制位存储云信息:
    • 1 << 3(bit3):高置信度云(置信度≥90%)
    • 1 << 4(bit4):云阴影
    • 1 << 2(bit2):卷云(高层薄云)
  • 掩膜逻辑:通过bitwiseAnd提取云位,not()取反后用updateMask屏蔽云区域。
2. 增强型云掩膜(多条件复合检测)
function maskCloudsEnhanced(image) {
  var qa = image.select('QA_PIXEL');
  // 增强型云检测:高/中等置信度云+云阴影
  var cloud = qa.bitwiseAnd(1 << 3).or(qa.bitwiseAnd(1 << 5)).or(qa.bitwiseAnd(1 << 4));
  // 薄云与雪掩膜:卷云+雪/冰
  var cirrus = qa.bitwiseAnd(1 << 2).or(qa.bitwiseAnd(1 << 8));
  // 亮度阈值辅助检测(近红外高反射率可能为云)
  var bright = image.select('B5').gt(0.3);
  return image.updateMask(cloud.not()).updateMask(cirrus.not()).updateMask(bright.not());
}

核心解析

  • 新增检测条件
    • 1 << 5(bit5):中等置信度云(置信度50%-90%)
    • 1 << 8(bit8):雪/冰(易与云混淆)
    • B5 > 0.3:近红外波段(B5)高反射率,云通常在近红外表现为高亮
  • 应用场景:适用于多云、多雪地区,减少云漏检。
3. 基于NDSI的雪/云分离掩膜
function maskCloudsSnow(image) {
  var ndsi = image.normalizedDifference(['B3', 'B6']);  // NDSI = (B3-B6)/(B3+B6)
  var snow = ndsi.gt(0.4);  // 雪掩膜
  var cloudMask = maskCloudsOriginal(image);  // 原始云掩膜
  return cloudMask.updateMask(snow.not());  // 排除雪区域
}

核心解析

  • NDSI原理:NDSI对积雪敏感(B3绿光波段对雪反射强,B6短波红外对雪反射弱),雪区NDSI>0.4。
  • 去混淆逻辑:雪与云在QA波段易混淆,通过NDSI分离雪,避免将雪误判为云。
4. 基于NDVI的云掩膜(光谱特征联合检测)
function maskCloudsNDVI(image) {
  var ndvi = image.normalizedDifference(['B5', 'B4']);  // NDVI = (B5-B4)/(B5+B4)
  var ndsi = image.normalizedDifference(['B3', 'B6']);  // NDSI
  // 云的光谱特征:低NDVI+高反射率,或高NDSI(雪)
  var lowNDVI = ndvi.lt(0.2);
  var highReflectance = image.select('B4').gt(0.25).and(image.select('B3').gt(0.25)).and(image.select('B2').gt(0.25));
  var cloud = lowNDVI.and(highReflectance).or(ndsi.gt(0.4));
  return image.updateMask(cloud.not());
}

核心解析

  • 云的光谱特征
    • 植被区NDVI>0.2,云区NDVI通常<0.2;
    • 云在可见光波段(B2/B3/B4)反射率高(>0.25),与地表形成差异;
  • 联合检测:通过NDVI、NDSI和反射率阈值多重条件降低误检率。
三、去云处理:从时间序列中恢复地表信息
1. 中值合成去云(静态填充)
function cloudRemovalMedian(collection) {
  var median = collection.median();  // 计算时间序列中值影像
  return collection.map(function(image) {
    var masked = maskCloudsOriginal(image);  // 先掩膜云
    var filled = masked.unmask(median);  // 用中值填充云区
    return filled.copyProperties(image, ['system:time_start']);
  });
}

核心解析

  • 中值合成collection.median()计算整个时间序列的中值影像,代表该区域的"典型地表"。
  • 填充逻辑:用中值影像填充当前影像的云掩膜区域,适用于地表特征变化缓慢的场景(如裸地、建筑)。
2. 时间序列前后帧插值去云(动态填充)
function cloudRemovalTemporal(collection) {
  return collection.map(function(image) {
    var masked = maskCloudsEnhanced(image);  // 增强型掩膜
    var time = ee.Date(image.get('system:time_start'));
    // 提取前30天和后30天的中值影像
    var before = collection.filterDate(time.advance(-30, 'day'), time).median();
    var after = collection.filterDate(time, time.advance(30, 'day')).median();
    // 用前后中值的平均值填充云区
    var fill = before.add(after).divide(2);
    var filled = masked.unmask(fill);
    return filled.copyProperties(image, ['system:time_start']);
  });
}

核心解析

  • 时间序列插值:利用云区前后30天的无云(或少云)影像计算中值,通过(前值+后值)/2插值填充。
  • 动态适应性:相比中值合成,该方法更适用于地表特征随时间变化的场景(如植被生长、水体变化)。
四、云掩膜可视化与结果导出
// 完整云掩膜(包含云、阴影、卷云、雪)
var fullCloudMask = qa.bitwiseAnd(1 << 3)
  .or(qa.bitwiseAnd(1 << 5)).or(qa.bitwiseAnd(1 << 4))
  .or(qa.bitwiseAnd(1 << 2)).or(qa.bitwiseAnd(1 << 8))
  .or(selectedImage.select('B5').gt(0.3));

// 导出云掩膜结果
Export.image.toDrive({
  image: fullCloudMask.clip(userDrawnRectangle).selfMask(),
  description: 'FullCloudMask',
  scale: 30,
  region: userDrawnRectangle,
  maxPixels: 1e13,
  fileFormat: 'GeoTIFF'
});

核心解析

  • 可视化逻辑:通过palette: ['blue', 'red']将云掩膜(值为1)显示为红色,非云区(值为0)显示为蓝色。
  • 结果导出selfMask()将掩膜转换为二值影像(0和1),配合fileFormat: 'GeoTIFF'导出为标准遥感格式,便于后续分析。
五、不同方法的适用场景与选择建议
方法类型核心优势适用场景
原始云掩膜简单快速,标准流程一般云量地区,精度要求不高
增强型云掩膜多条件检测,减少漏检多云、多雪地区,高精度需求
NDSI雪/云分离区分雪与云,减少误判高纬度、高海拔积雪区域
NDVI云掩膜结合植被指数,适应复杂地表植被覆盖区,云与植被混淆场景
中值合成去云静态填充,计算效率高地表特征稳定区域(如裸地)
时间序列插值去云动态适应地表变化,保留时序特征植被、水体等动态地表区域

实践建议:先通过maskCloudsEnhanced进行基础云掩膜,再根据研究区特征(如是否有积雪、植被覆盖度)选择辅助方法(NDSI或NDVI),去云处理优先使用时间序列插值法以保留更多真实地表信息。
部分实验结果如下
1.整体结果
在这里插入图片描述

2.不同云掩膜
在这里插入图片描述
在这里插入图片描述

3.原始影像与时间序列插值结果
在这里插入图片描述

在这里插入图片描述

欢迎大家关注我的微信公众号:遥感AI实战,猫猫头像的那个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI_RSER

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

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

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

打赏作者

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

抵扣说明:

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

余额充值