【GEE学习】小范围研究区筛选无云影像

问题描述:

常用的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学习:遥感影像设置新的属性并查询

猜你喜欢

转载自blog.csdn.net/NewBook_L/article/details/127588930