gee去云处理Landsat、Sentinel和Modis影像
1.Landsat 和 MODIS影像的去云函数
function cloudfree_mod09a1(image){
var qa = image.select('StateQA')
var cloudState = bitwiseExtract(qa, 0, 1)
var cloudShadowState = bitwiseExtract(qa, 2)
var cirrusState = bitwiseExtract(qa, 8, 9)
var mask = cloudState.eq(0) // Clear
.and(cloudShadowState.eq(0)) // No cloud shadow
.and(cirrusState.eq(0)) // No cirrus
return image.updateMask(mask)
}
function cloudfree_landsat (image){
var qa = image.select('pixel_qa')
var cloudState = bitwiseExtract(qa, 5)
var cloudShadowState = bitwiseExtract(qa, 3)
var mask = cloudState.eq(0) // Clear
.and(cloudShadowState.eq(0)) // No cloud shadow
return image.updateMask(mask)
}
2.影像的筛选、去云和合成
Landsat8
var date_rg = ee.DateRange('2019-01-25','2019-12-30');
//利用时间和位置点筛选符合要求的影像
var imgcol = l8_imgcol.filterDate(date_rg).filterBounds(gz);
//对符合要求的影像进行合成
var raw_img = imgcol.mosaic();
//对符合要求的影像进行去云处理后合成
var cf_img = imgcol.map(cloudfree_landsat).mosaic();
//分别加载原始影像合成的结果和去云处理后影像的合成结果
Map.addLayer(raw_img,{min: 0, max: 3500, bands: ['B5', 'B4', 'B3']},'raw_img')
Map.addLayer(cf_img,{min: 0, max: 3500, bands: ['B5', 'B4', 'B3']},'cf_img')
Modis
//利用时间和位置点筛选符合要求的影像
var imgcol_m = modis_imgcol.filterDate(date_rg).filterBounds(gz)
对符合要求的影像进行合成
var raw_img_m = imgcol_m.mosaic();
//对符合要求的影像进行去云处理后合成
var cf_img_m = imgcol_m.map(cloudfree_mod09a1).mosaic();
//分别加载原始影像合成的结果和去云处理后影像的合成结果
Map.addLayer(raw_img_m,{min: 0, max: 3500, bands: ['sur_refl_b02', 'sur_refl_b01', 'sur_refl_b04']},'raw_img_m')
Map.addLayer(cf_img_m,{min: 0, max: 3500, bands: ['sur_refl_b02', 'sur_refl_b01', 'sur_refl_b04']},'cf_img_m')
Sentinel-2
#创建一个函数用来掩模云以及卷云
def maskS2clouds(image) {
#选择有关云掩膜的波段
var qa = image.select('QA60')
#位10和11分别代表云和卷云。
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
#将有关云的像元置为0
var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(
qa.bitwiseAnd(cirrusBitMask).eq(0))
#掩模数据并选择多光谱波段,将反射率归为0-1复制时间属性
return image.updateMask(mask).divide(10000)
.select("B.*")
.copyProperties(image, ["system:time_start"])
}