使用GEE处理Landsat 8影像并批量下载导出

概述

这段代码使用Google Earth Engine(GEE)平台处理Landsat 8影像,进行云和饱和像素的掩膜处理,并将处理后的影像裁剪到指定的感兴趣区域(ROI),并导出影像集到Google Drive。

数据集

代码使用的是Landsat 8 Level 2, Collection 2, Tier 1数据集(LANDSAT/LC08/C02/T1_L2)。该数据集包括各种波段的光学和热红外影像,以及用于质量评估的波段。

代码流程和功能

  1. 定义ROI和样式设置

    • 代码首先定义了感兴趣区域(ROI)和样式设置,然后将其添加到地图上并居中显示。
  2. 掩膜函数maskL8sr

    • 该函数对Landsat 8影像进行掩膜处理,以去除填充、云、云影等不良像素,并应用适当的缩放因子和归一化处理。
    • 使用位运算和掩膜识别不良像素。
    • 应用归一化处理,使得光学波段和热红外波段的值在适当的范围内。
  3. 影像集筛选与处理

    • 创建影像集,筛选指定日期范围内的影像,并应用掩膜函数进行处理。
    • 将处理后的影像裁剪到ROI。
  4. 影像可视化

    • 定义可视化参数,并将处理后的影像集添加到地图进行显示。
  5. 影像集导出函数

    • 代码中还提供了一个导出影像集到Google Drive的函数。这个函数遍历影像集中的每个影像,并将其导出到指定的文件夹中。

运行结果

  • 运行该代码后,地图上会显示指定日期范围内经过掩膜和裁剪处理的Landsat 8影像,使用红、绿、蓝波段进行可视化。
  • 将处理后的影像集导出到Google Drive中。

总结

该代码展示了如何使用Google Earth Engine处理和可视化Landsat 8影像,进行掩膜处理和裁剪操作,并提供了一个导出影像集的示例函数。通过这些步骤,用户可以高效地处理遥感影像数据,并在地图上进行可视化展示。

运行示例图:

代码确实成功地在指定的ROI区域内显示了Landsat 8影像。然而,从图像中可以看出明显的影像质量问题

  1. 影像中存在一些条纹和不规则区域,可能是由于云、阴影等因素影响了影像的质量,或者是不同影像拼接时的不一致性。

优化建议

1. 增加影像的过滤和质量控制

可以进一步改进影像过滤和质量控制,以确保仅选择质量较高的影像。

function maskL8sr(image) {
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  var saturationMask = image.select('QA_RADSAT').eq(0);
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
  return image.addBands(opticalBands, null, true)
      .addBands(thermalBands, null, true)
      .updateMask(qaMask)
      .updateMask(saturationMask);
}

var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
                  .filterBounds(roi)
                  .filterDate('2019-09-16', '2021-09-28')
                  .map(maskL8sr)
                  .map(function(image){
                      return image.clip(roi)
                  });

2. 增加影像的合成(mosaic)和时间合并

可以将影像集中的影像进行合成,以减少单个影像中的条纹和不规则区域。

var composite = dataset.median();

3. 改进可视化参数

通过调整可视化参数,可以更好地展示影像细节。

var visualization = {
  bands: ['SR_B4', 'SR_B3', 'SR_B2'],
  min: 0.0,
  max: 0.3,
  gamma: 1.4
};

Map.addLayer(composite, visualization, 'Composite Image');
Map.centerObject(roi, 9);

完整代码如下:

//优化代码
// 定义感兴趣区域(ROI)和样式设置
var roi = table;  // 用户定义的ROI区域
var style_set = {color: "red", fillColor: "00000000"};  // 样式设置:红色边界和透明填充
Map.addLayer(roi.style(style_set), {}, "shape");  // 将ROI添加到地图并应用样式
Map.centerObject(roi, 9);  // 将地图居中显示在ROI区域,缩放级别为9

// 定义掩膜函数以处理Landsat 8影像
function maskL8sr(image) {
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);  // 使用QA_PIXEL波段进行质量掩膜处理,去除填充、云、云影等不良像素
  var saturationMask = image.select('QA_RADSAT').eq(0);  // 使用QA_RADSAT波段进行饱和度掩膜处理,去除饱和像素

  // 对光学波段进行归一化处理
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);

  // 对热红外波段进行归一化处理
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);

  // 返回处理后的影像,添加处理后的光学和热红外波段,并应用掩膜
  return image.addBands(opticalBands, null, true)
              .addBands(thermalBands, null, true)
              .updateMask(qaMask)
              .updateMask(saturationMask);
}

// 创建影像集,并应用掩膜和裁剪处理
var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')  // 使用Landsat 8 Level 2数据集
                  .filterBounds(roi)  // 过滤影像集,使其仅包含覆盖ROI区域的影像
                  .filterDate('2019-09-16', '2021-09-28')  // 过滤影像集,使其仅包含指定日期范围内的影像
                  .map(maskL8sr)  // 对影像集中的每个影像应用掩膜处理
                  .map(function(image) {
                      return image.clip(roi);  // 将处理后的影像裁剪到ROI区域
                  });

// 创建影像合成,使用影像集中位数值来减少条纹和不规则区域
var composite = dataset.median();  // 使用中位数合成影像集

// 定义影像可视化参数
var visualization = {
  bands: ['SR_B4', 'SR_B3', 'SR_B2'],  // 使用红、绿、蓝波段进行可视化
  min: 0.0,
  max: 0.3,
  gamma: 1.4  // 调整gamma值以增强影像对比度
};

// 将合成影像添加到地图进行显示
Map.addLayer(composite, visualization, 'Composite Image');
Map.centerObject(roi, 9);  // 将地图居中显示在ROI区域,缩放级别为9

// 影像集导出函数
function exportImageCollection(imgCol) {
  // 获取影像集的索引列表
  var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"])
                        .get("list");
  indexList.evaluate(function(indexs) {
    // 遍历影像集中的每个影像,并导出到Google Drive
    for (var i = 0; i < indexs.length; i++) {
      var image = imgCol.filter(ee.Filter.eq("system:index", indexs[i])).first();
      image = image.toInt16();
      Export.image.toDrive({
        image: image,
        description: indexs[i],
        fileNamePrefix: indexs[i],
        folder: 'Landsat8',
        region: roi,
        scale: 30,
        crs: "EPSG:4326",
        maxPixels: 1e13
      });
    }
  });
}

// 调用导出函数以导出影像集
exportImageCollection(dataset);

运行结果图:

工作台输出:

以下是使用Google Earth Engine (GEE) 对Landsat-8多幅影像进行批量地形校正的代码示例: ```javascript // Load Landsat 8 surface reflectance data. var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR') .filterDate('2019-01-01', '2019-12-31') .filterBounds(geometry) .select(['B4', 'B3', 'B2', 'B5', 'B6', 'B7']); // Function to apply terrain correction to a single image. var applyTerrainCorrection = function(image) { // Load elevation data. var elevation = ee.Image('USGS/SRTMGL1_003'); // Compute terrain correction parameters. var tc = ee.Terrain.hillShadow(elevation, image.metadata('sunAzimuth'), image.metadata('sunElevation')); // Apply terrain correction to the image. var corrected = image.addBands(tc.select(['hillshade'])); return corrected; }; // Apply terrain correction to the image collection. var correctedCollection = collection.map(applyTerrainCorrection); // Export the corrected images to Google Drive. Export.image.toDrive({ image: correctedCollection, description: 'Landsat8_terrain_corrected', folder: 'GEE_exports', scale: 30, region: geometry }); ``` 在上述代码中,我们首先加载了Landsat 8表面反射率数据,并使用`filterDate()`和`filterBounds()`函数对数据进行筛选。然后,我们定义了一个名为`applyTerrainCorrection`的函数,该函数接受一个影像作为输入,并返回已进行地形校正的影像。在函数中,我们加载了SRTM高程数据,并使用`ee.Terrain.hillShadow()`函数计算了地形校正参数。最后,我们将地形校正应用到了影像中,并使用`addBands()`函数将地形校正参数作为新波段添加到了影像中。 接下来,我们使用`map()`函数将`applyTerrainCorrection`函数应用到整个影像集合中,并将结果存储在名为`correctedCollection`的变量中。最后,我们使用`Export.image.toDrive()`函数将地形校正后的影像导出到Google Drive中。 需要注意的是,上述代码中的`geometry`变量需要根据实际情况进行设置,以指定影像的空间范围。此外,如果需要,还可以调整`scale`参数以控制导出影像的空间分辨率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值