在GEE中實現時,發現簡單的QA60是無法去云的,最近S2地表反射率數據集又進行了更新,原有的屬性集也進行了變化,現在的SR數據集名稱是“S2_SR_HARMONIZED”。那么:
要想得到研究區無云的圖像,可以參考執行以下幾個步驟,
-
遙感圖像中篩選云占比不超過10%的圖像
// 加載Sentinel-2 L2A圖像
var s2 = ee.ImageCollection(‘COPERNICUS/S2_SR_HARMONIZED’)
.filterDate(‘2021-09-01’, ‘2021-10-31’)
.filter(ee.Filter.lt(‘CLOUDY_PIXEL_PERCENTAGE’,10))
.filterBounds(basin_shp); -
QA60云掩膜
// 第一次云掩膜:使用QA60
function maskS2clouds(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);
}
var s2_masked = s2.map(maskS2clouds);
-
SCL在最新的S2_SR_HARMONIZED產品中是存在的,判斷云和云陰影
//SCL Cloud mask
function maskS2cloudsSCL(image) {
var scl = image.select(‘SCL’);
// 去除云(8)和云陰影(9)
var mask = scl.neq(8).and(scl.neq(9));
return image.updateMask(mask);
}
var s2_masked = s2_masked.map(maskS2cloudsSCL); -
繼續用像元云概率進行判斷,要求每個像元是云的概率小于10%
// MSK_CLDPRB Mask(Sen2Cor 云概率),可直接用閾值掩膜,云概率低于 10% 保留:
function maskCloudProb(image) {
var prob = image.select(‘MSK_CLDPRB’);
return image.updateMask(prob.lt(10)); // 云概率低于 20% 保留
}
var s2_masked = s2_masked.map(maskCloudProb);
最后中位數合成,避免反射率高值影響圖像像元整體性。
var s2_max = s2_masked.median();