尝试按云覆盖百分比过滤哨兵2张图像

时间:2019-04-25 18:40:51

标签: javascript filter cloud sentinel google-earth-engine

我试图按云量的百分比(例如20%)过滤Sentinel 2图像,然后对输出执行一些图像算法。

我正在尝试实现在这里找到的:gis.stackexchange线程(https://gis.stackexchange.com/questions/303344/filter-landsat-images-cloud-cover)。不幸的是,功能ee.Algorithms.Landsat...不适用于Sentinel 2图像,这是我正在做的事情。

到目前为止,我的代码如下。

var myCollection = ee.ImageCollection('COPERNICUS/S2');

var dataset2 = ee.ImageCollection(
  myCollection.filterBounds(point) //use only one image that contains the POI
  .filterDate('2015-06-23', '2019-04-25') //filter by date range
);


var ds2_cloudiness = dataset2.map(function(image){
  var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud');
  var cloudiness = cloud.reduceRegion({
    reducer: 'median'
  });
  return image.set(cloudiness);
});

var filteredCollection = ds2_cloudiness.filter(ee.Filter.lt('cloud', 20));

Map.addLayer(filteredCollection, {min: -.2, max:.2}, 'test')

这将输出错误:Landsat.simpleCloudScore: Image is not a Landsat scene or is missing SENSOR_ID metadata.朝正确方向的任何轻推都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

如果您只想使用云覆盖百分比进行过滤,我认为有一种更简单的方法。您可以根据图像元数据进行过滤。

var myCollection = ee.ImageCollection('COPERNICUS/S2');
print(myCollection.first())

如果您检查Sentinel-2 imageCollection中的第一张图像,则实际上可以看到其元数据(仅适用于该图像)。由于您使用的是均匀且维护良好的图像集,因此可以期望其他图像具有相似的性能。在这里,您可以执行以下操作

myCollection = myCollection.filter(ee.Filter.lte('CLOUDY_PIXEL_PERCENTAGE',20));
print(myCollection.first());

此特定代码将过滤图像集合以查找云量小于或等于20的图像。您可以通过再次检查第一张图像或检查应该缩小的图像集合的大小来验证这一点。

但是,如果您正在寻找一种单独的算法来计算图像上的云,您可能必须为Sentinel编写一个算法(至今)。