GEE|在GEE对Sentinel-2、Landsat7、Landsat8进行批量大气校正、去云,并进行均值融合、裁剪、显示和数据下载

前言:

由于我要使用S2在2016-2020年时序数据进行作物分类,但GEE仅提供2018年后的S2 L2A数据('COPERNICUS/S2_SR'),因此需要进行大气校正,同时由于需要的数据量大,因此需要批量处理。

大气校正的方法论文:(英文)一种传感器不变的大气校正方法:适用于哨兵-2/MSI和陆地卫星8/OLI (researchgate.net)

我的代码:(主要包括去云、大气校正、矢量裁剪、均值融合、显示和数据下载)

//加载 shpfile
var shpfile1 = ee.FeatureCollection('projects/ee-wenqikou/assets/qixia_0_09').filter(ee.Filter.eq('grid_label','6')).geometry()
//聚焦shp范围
Map.centerObject(shpfile1)
//显示shp
Map.addLayer(shpfile1)
//引入大气纠正方法
var siac = require('users/marcyinfeng/utils:SIAC');
//去云函数
function rmCloudByQA(image) {
  var qa = image.select('QA60');
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
               .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask);}
//数据函数,参数(开始日期,截止日期,云量筛选,融合形式,图像显示选择波段(这里仅支持真彩色))
// 其中,融合方式compositiontype: 0 min 1 mean 2 median 3 max
var compsition = function(startdate,enddate,cloudiness,compositiontype,bands){
  var image = ee.ImageCollection('COPERNICUS/S2').filterDate(startdate,enddate).filterBounds(shpfile1).filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', cloudiness))
//去云
  image = image.map(rmCloudByQA)
//批量大气校正
  image = image.map(siac.get_sur)
//融合(这样可以免本地拼接等
  if(compositiontype === 0){image = image.min().multiply(10000)}
  else if(compositiontype == 1){image = image.mean().multiply(10000)} //均值融合
  else if(compositiontype == 2){image = image.median().multiply(10000)}
  else image = image.max().multiply(10000)
//裁剪
  image = image.clip(shpfile1);
//数据显示
  if(bands == 432) {Map.addLayer(image,{min:0, max:3000, bands:["B4", "B3", "B2"]},'real'+startdate);}
//数据下载
  Export.image.toDrive({
  image: image,
  description: startdate,
  folder: 'qixia/grid/image/06',
  crs:"EPSG:4326",
  fileNamePrefix: startdate,
  region: shpfile1,
  scale: 10,
  maxPixels: 1e13
});

return image

}

var ys = compsition('2021-02-15','2021-02-16',100,1,432)

关于Landsat7和Landsat8:

Landsat7:仅需要修改“siac.get_sur”为“siac.get_l7_sur”

Landsat8:仅需要修改“siac.get_sur”为“siac.get_l8_sur”

 例子:

var ground_sensor = ee.Geometry.Point(-52.905090, -28.228550);
var polygon = ground_sensor.buffer(1000).bounds();//
var start_date = '2017-11-15';
var end_date   = '2017-11-30';

var criteria = ee.Filter.and(
    ee.Filter.bounds(ground_sensor), ee.Filter.date(start_date, end_date));
var cloud_perc = 60;//Max cloud percentile per scene.    

// -- Collections of Landsat 7, 8 and Sentinel 2 TOA data
var L8_col = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
                .filter(criteria)
                .filter(ee.Filter.lt('CLOUD_COVER', cloud_perc));

var L7_col = ee.ImageCollection('LANDSAT/LE07/C01/T1_TOA')
                .filter(criteria)
                .filter(ee.Filter.lt('CLOUD_COVER', cloud_perc));

var S2_col = ee.ImageCollection("COPERNICUS/S2")
                .filter(criteria)
                .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', cloud_perc));
                
                
// - Import the SIAC atmospheric correction module
var siac = require('users/marcyinfeng/utils:SIAC');

// - Apply SIAC and retrieve bottom of atmosphere (BOA) reflectance
var L7_boa = siac.get_l7_sur(L7_col.first());
var L8_boa = siac.get_l8_sur(L8_col.first()); 
var S2_boa = siac.get_sur(S2_col.first()); 


// - Check and visualization
var Color_comp_01 = {bands:"B4,B3,B2", min: 0.0, max: 0.2, gamma: 1};
var Color_comp =    {bands:"B4,B3,B2", min:200, max:2000, gamma: 1};
Map.addLayer(S2_col.first(), Color_comp, 'TOA');
Map.addLayer(S2_boa, Color_comp_01, 'BOA');
Map.centerObject(S2_col.first())

  • 18
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
首先,需要在GEE中导入Landsat-8图像。在GEE中,可以使用以下代码导入Landsat-8图像: ```javascript var L8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR'); var image = L8.filterDate('2019-01-01', '2019-12-31') .filterBounds(geometry) .sort('CLOUD_COVER') .first(); ``` 其中,`filterDate`和`filterBounds`分别用于按时间和区域筛选图像,`sort`用于按量排序,`first`用于选择量最小的图像。 接下来,需要对图像进行大气校正。在GEE中,可以使用以下代码进行大气校正: ```javascript // 定义参数 var aeroModel = 'MODTRAN'; // 大气校正模型 var elevation = ee.Image('USGS/SRTMGL1_003'); // 地形高度 var waterVapor = 'MOD08_D3'; // 水汽数据集 var ozone = 'OMI/AURA/OMTO3/Monthly'; // 臭氧数据集 var year = image.date().get('year'); // 根据图像日期获取年份 // 进行大气校正 var corrImage = ee.Algorithms.Landsat.simpleCloudScore(image).select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'B11']); corrImage = ee.Algorithms.Landsat.correctRadiometry(corrImage); corrImage = ee.Algorithms.Landsat.calibrate(corrImage); corrImage = ee.Algorithms.Landsat.TOA(corrImage); corrImage = ee.Algorithms.Landsat.simpleCloudScore(corrImage).select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'B11']); corrImage = ee.Algorithms.Landsat.atmosphericCorrection(corrImage, elevation, aeroModel, ozone, waterVapor, year); ``` 在上述代码中,`ee.Algorithms.Landsat.simpleCloudScore`用于计算量,`ee.Algorithms.Landsat.correctRadiometry`用于矫正辐射定标系数,`ee.Algorithms.Landsat.calibrate`用于定标反射率,`ee.Algorithms.Landsat.TOA`用于将反射率转换为顶部大气反射率,`ee.Algorithms.Landsat.atmosphericCorrection`用于进行大气校正。 最后,可以使用以下代码将大气校正后的图像可视化: ```javascript Map.addLayer(corrImage, {bands:['B4', 'B3', 'B2'], min:0, max:0.3}, 'Corrected Image'); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值