Earth Engine API 为 ImageCollection 类型提供了一组过滤器,过滤器可以根据空间、时间或属性特征来限制 ImageCollection,即可将图像从 ImageCollection 中分离出来以进行检查或操作。
图1 1 Earth Engine 中应用于图像集合的过滤、映射、缩减
以下是限制 Landsat 5 ImageCollection 的三个示例:特征并评估结果集的大小。
FilterDate 将 ImageCollection 作为输入并返回其成员满足指定日期条件的 ImageCollection。
//FilterDate
var imgCol = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2');
// How many Tier 1 Landsat 5 images have ever been collected?
print("All images ever: ", imgCol.size()); // A very large number
// How many images were collected in the 2000s?
var startDate = '2000-01-01';
var endDate = '2010-01-01';
var imgColfilteredByDate = imgCol.filterDate(startDate,endDate);
print("All images 2000-2010: ", imgColfilteredByDate.size());
// A smaller (but still large) number
图1 按时间过滤
FilterBounds filterBounds 将ImageCollection作为输入并返回其图像围绕指定位置的Image-Collection。 如果我们获取按日期过滤的 ImageCollection,然后按边界过滤它,我们将把集合过滤到指定日期间隔内指定点附近的那些图像,使用下面的代码,我们将计算得到上海附近的图像数量。
//FilterBounds
var ShanghaiImage = ee.Image('LANDSAT/LT05/C02/T1_L2/LT05_118038_20000606');
Map.centerObject(ShanghaiImage, 9);
var imgColfilteredByDateHere = imgColfilteredByDate
.filterBounds(Map.getCenter());
print("All images here, 2000-2010: ", imgColfilteredByDateHere.size()); // A smaller number
图2 按边界过滤
Filter by Other Image Metadata 图像的日期和位置是与每个图像一起存储的特征,图像处理中的另一个重要因素是云量,这是为许多集合(包括 Landsat 和 Sentinel-2 集合)中的每张图像计算的图像级值。 总体云量分数可能存储在不同数据集中的不同元数据标签名称下, 例如,对于 Sentinel-2,此总体云量分数存储在 CLOUDY_PIXEL_PERCENTAGE 元数据字段中,对于 Landsat 5(我们在本例中使用的 ImageCollection),图像级云度分数使用标签 CLOUD_COVER 存储。在这里,我们将使用filterBounds和filterDate访问刚刚构建的ImageCollection,然后通过图像级云覆盖分数进一步过滤图像, 使用filterMetadata 函数。 接下来,让我们删除任何云度达到或超过 50% 的图像。 正如使用每像素云度信息的后续章节中将描述的那样,如果您认为云度图像中的某些值可能有用,您可能希望在现实研究中保留这些图像。 现在,为了说明过滤概念,我们只保留图像级云量值表明云覆盖率低于 50% 的图像。 在这里,我们将采用已经过滤的集合按边界和日期,并使用云百分比进一步将其过滤到新的 ImageCollection 中, 将此行添加到脚本中以按云度进行过滤并将尺寸打印到控制台。
//Filter by Other Image Metadata
var L5FilteredLowCloudImages = imgColfilteredByDateHere.filterMetadata('CLOUD_COVER', 'less_than', 50);
print("Less than 50% clouds in this area, 2000-2010",L5FilteredLowCloudImages.size()); // A smaller number
图3 按元数据信息过滤
Filtering in an Efficient Order 在 Earth Engine 中,对于要使用 filterBounds 的非全局空间组件的问题,首先进行空间过滤是最有效的。在下面的代码中,您将看到可以chain”过滤器命令,然后从左到右执行这些命令。 下面,我们按照您上面指定的顺序链接过滤器。 请注意,它提供的 ImageCollection 的大小与一次应用一个滤镜时的大小相同。
//Filtering in an Efficient Order
var chainedFilteredSet = imgCol.filterDate(startDate, endDate)
.filterBounds(Map.getCenter()).filterMetadata('CLOUD_COVER', 'less_than', 50);
print('Chained: Less than 50% clouds in this area, 2000-2010',chainedFilteredSet.size());
图4 按更快效率的方式过滤