基于GEE的哨兵二号QA波段去云,但是去不成功
原因:因为筛选出来的影像云量几乎都超过50%
官方的官方的解答:文档里是提取云量20以下的进行去云的
源码:
// 去云
function maskS2clouds(image) {
var qa = image.select('QA60');
// Bits 10 and 11 are clouds and cirrus, respectively.
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.updateMask(mask).divide(10000);
}
// 增加指数
var addVariables = function(image){
var awei= image.expression(
'4*(green-SWIR1)-(0.25*NIR+2.75*SWIR2)',{
green:image.select('B3'),
NIR:image.select('B8'),
SWIR1:image.select('B11'),
SWIR2:image.select('B12'),
}).float().rename('AWEI')
var ndwi = image.normalizedDifference(['B3','B8']).rename('NDWI')
var mndvi = image.normalizedDifference(['B3','B11']).rename('MNDWI')
var lswi = image.normalizedDifference(['B8','B11']).rename('LSWI')
var ndvi = image.normalizedDifference(['B8','B4']).rename('NDVI')
var evi= image.expression(
'2.5*(NIR-RED)-(NIR+6*RED-7.5*BLUE+1)',{
NIR:image.select('B8'),
RED:image.select('B4'),
BLUE:image.select('B2'),
}).float().rename('EVI')
return image.addBands([awei,ndwi,mndvi,lswi,ndvi,evi]);
}
// 研究区域
var roi = geometry;
Map.addLayer(roi,{"color":'red',},"roi")
Map.centerObject(roi, 6)
var landimg = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(roi)
.filterDate('2022-04-10','2022-04-15')
.map(maskS2clouds)
.select(['B2','B3','B4','B8','B11','B12'])
.map(addVariables)
.mosaic()
.clip(roi)
Map.addLayer(landimg, {bands: ['B4', 'B3','B2'],min: 0, max: 1,gamma:3,opacity:1},'landimg');
//显示水体指数
var visParams = {min: -0.8, max: 0.8, palette: [ 'green','white','blue']};
Map.addLayer(landimg.select('AWEI'),visParams,'AWEI');
Map.addLayer(landimg.select('NDWI'),visParams,'NDWI');
Map.addLayer(landimg.select('MNDWI'),visParams,'MNDWI');
Map.addLayer(landimg.select('LSWI'),visParams,'LSWI');
var AWEI = landimg.select('AWEI');
var NDVI = landimg.select('NDVI');
var EVI = landimg.select('EVI');
var NDWI = landimg.select('NDWI');
var MNDWI = landimg.select('MNDWI');
var LSWI = landimg.select('LSWI');
// 通过阈值提取水体
var water_AWEI=AWEI.updateMask(AWEI.gt(0));
Map.addLayer(water_AWEI,{min: -1, max: 1,palette: ['white','blue']},'water_AWEI');
var water_NDWI=NDWI.updateMask(NDWI.gt(0));
Map.addLayer(water_NDWI,{min: -1, max: 1,palette: ['white','blue']},'water_NDWI');
var water_MNDWI=NDWI.updateMask(MNDWI.gt(0));
Map.addLayer(water_MNDWI,{min: -1, max: 1,palette: ['white','blue']},'water_MNDWI');
改后
// 去云
function maskS2clouds(image) {
var qa = image.select('QA60');
// Bits 10 and 11 are clouds and cirrus, respectively.
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.updateMask(mask).divide(10000);
}
// 增加指数
var addVariables = function(image){
var awei= image.expression(
'4*(green-SWIR1)-(0.25*NIR+2.75*SWIR2)',{
green:image.select('B3'),
NIR:image.select('B8'),
SWIR1:image.select('B11'),
SWIR2:image.select('B12'),
}).float().rename('AWEI')
var ndwi = image.normalizedDifference(['B3','B8']).rename('NDWI')
var mndvi = image.normalizedDifference(['B3','B11']).rename('MNDWI')
var lswi = image.normalizedDifference(['B8','B11']).rename('LSWI')
var ndvi = image.normalizedDifference(['B8','B4']).rename('NDVI')
var evi= image.expression(
'2.5*(NIR-RED)-(NIR+6*RED-7.5*BLUE+1)',{
NIR:image.select('B8'),
RED:image.select('B4'),
BLUE:image.select('B2'),
}).float().rename('EVI')
return image.addBands([awei,ndwi,mndvi,lswi,ndvi,evi]);
}
// 研究区域
var roi = geometry;
Map.addLayer(roi,{"color":'red',},"roi")
Map.centerObject(roi, 6)
var landimg = ee.ImageCollection('COPERNICUS/S2_SR')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.filterBounds(roi)
.filterDate('2022-04-01','2022-04-15')
.map(maskS2clouds)
.select(['B2','B3','B4','B8','B11','B12'])
.map(addVariables)
.mosaic()
.clip(roi)
Map.addLayer(landimg, {bands: ['B4', 'B3','B2'],min: 0, max: 1,gamma:3,opacity:1},'landimg');
//显示水体指数
var visParams = {min: -0.8, max: 0.8, palette: [ 'green','white','blue']};
Map.addLayer(landimg.select('AWEI'),visParams,'AWEI');
Map.addLayer(landimg.select('NDWI'),visParams,'NDWI');
Map.addLayer(landimg.select('MNDWI'),visParams,'MNDWI');
Map.addLayer(landimg.select('LSWI'),visParams,'LSWI');
var AWEI = landimg.select('AWEI');
var NDVI = landimg.select('NDVI');
var EVI = landimg.select('EVI');
var NDWI = landimg.select('NDWI');
var MNDWI = landimg.select('MNDWI');
var LSWI = landimg.select('LSWI');
// 通过阈值提取水体
var water_AWEI=AWEI.updateMask(AWEI.gt(0));
Map.addLayer(water_AWEI,{min: -1, max: 1,palette: ['white','blue']},'water_AWEI');
var water_NDWI=NDWI.updateMask(NDWI.gt(0));
Map.addLayer(water_NDWI,{min: -1, max: 1,palette: ['white','blue']},'water_NDWI');
var water_MNDWI=NDWI.updateMask(MNDWI.gt(0));
Map.addLayer(water_MNDWI,{min: -1, max: 1,palette: ['white','blue']},'water_MNDWI');