我正在尝试按云覆盖百分比(例如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 回答
明月笑刀无情
TA贡献1828条经验 获得超4个赞
如果您只想使用云覆盖百分比进行过滤,我认为有一种更简单的方法。您可以通过基于图像元数据进行过滤来执行此操作。
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编写一个算法(至今)。
添加回答
举报
0/150
提交
取消