问题描述:
常用的sentinel-2筛选少云影像通常使用Filter
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
和QA波段去云。
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);
}
但是对于小范围研究区来说,这样的筛选会导致“影像云量多而研究区云量少”、“影像云量少但集中在研究区”等情况,造成时序影像利用效率不高。
思路:
本文拟筛选出研究区内无云影像,但GEE代码水平不高,思路如下:
1、利用qa波段将影像的云掩膜为0值;
2、对研究区内影像进行统计,利用Reducer.allNonZero()检索是否有0值;
3、添加一个属性,有云时值为0,无云时值为1;
4、Filter筛选出该值为1的影像。
代码
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));
image = image.updateMask(mask).unmask(0)
var min = image.select("B1")
.reduceRegion({
reducer: ee.Reducer.allNonZero(),
geometry:roi,
scale: 10,
maxPixels: 1e13})
.get("B1");
return image.set({
'cloud_musk':min});
}
var S2Collection = ee.ImageCollection('COPERNICUS/S2')
.filterDate(start_date, end_date)
.filterBounds(table)
.map(rmCloudByQA)
.filter(ee.Filter.eq('cloud_musk', 1));
函数说明:
GEE:遥感影像处理中的常见掩膜函数的使用
Google Earth Engine(gee)中的reduce、Reducer
GEE学习:遥感影像设置新的属性并查询