问题描述
我正在尝试使用以下脚本从Sentinel-2图像集中删除带有云的图像:
// Remove images with clouds
var cloud_removal = function(image){
// save the quality assessment band QA60 as a variable
var cloud_mask = image.select('QA60');
// calculate the sum of the QA60-Band (because QA60 != 0 means cloud or cirrus presence)
var cloud_pixels = cloud_mask.reduceRegion( // reduceRegion computes a single object value pair out of an image
{reducer:ee.Reducer.sum(),// calculates the sum of all pixels..
geometry:aoi,// inside the specified geometry
scale:60}) // at this scale (matching the band resolution of the QA60 band)
.getNumber('QA60'); // extracts the values as a number
return ee.Algorithms.If(cloud_pixels.eq(0),image);
};
var s2_collection_noclouds = s2_collection_clipped.map(cloud_removal,true);
print('The clipped Sentinel-2 image collection without cloudy images: ',s2_collection_noclouds);
问题在于输出(“ s2_collection_noclouds”)是ee.FeatureCollection。 我已经尝试过将输出转换为图像集合,但它仍然是一个功能集合:
var s2_collection_noclouds = ee.ImageCollection(s2_collection_clipped.map(cloud_removal,true));
我想念什么?
解决方法
生成的对象确实是一个图像集合,并且可以显示在地图上。例如:
var visualization = {
min: 0,max: 3000,bands: ['B4','B3','B2'],};
Map.addLayer(s2_collection_noclouds.median(),visualization,"Sentinel-2")
旁注:我确实看到Earth Engine代码编辑器控制台将对象类型标记为“ FeatureCollection”,并且该集合包含作为Image对象的要素。这似乎是由于映射函数中的ee.Algorithms.If()返回了多云图像的空对象所致。如果您改为返回被遮罩的图像:
return ee.Algorithms.If(cloud_pixels.eq(0),image,image.mask(0));
然后将该集合正确描述为ImageCollection。