1 理论介绍
在“2 Exploring Images”中介绍了遥感影像,这是GEE中遥感影像的核心构建模块之一。在本章中,将通过介绍“image collections”进一步扩展遥感影像概念。GEE中的“影像集合”将许多不同的影像组织到一个更大的数据存储结构中。“影像集合”包括每景影像的位置、影像采集日期和其他属性等信息,使您能够在影像集合中筛选出用于分析所需的确切影像特征。
2 实践
在GEE中有许多不同类型的影像集合可用。这包括个别卫星影像的集合、将多个图像合并成一个混合图像的预制合成图像、分类的土地利用和土地覆盖图、天气数据和其他非光学数据集。每种影像都适用于不同类型的分析。
2.1 影像集合
在“2 Exploring Images”中,介绍了与单个ee.Image交互的一些基本方法。然而,根据遥感平台的运行时间长短,可能会收集到成千上万张或数百万张地球图像。在GEE中,这些影像被组织成影像集合( ImageCollection ),这是一种独特的数据类型。这里将展示如何查看和处理它们的基本属性,并利用这些技能查看GEE中一些主要类型的影像集合。
2.1.1 View an Image Collection
美国国家航空航天局(NASA)和美国地质调查局(USGS)的Landsat计划已经发射了一系列地球观测卫星,命名为Landsat 1、2等。自1972年以来,Landsat一直返回图像,使得这一系列图像成为地球表面最长时间连续的卫星观测。现在,我们将查看一个仍在增长中的图像集合的图像和基本信息:由Landsat 8拍摄的场景集合,Landsat 8于2013年发射。将以下代码复制并粘贴到中心面板中,然后点击运行。您可能会注意到正在绘制单独的“场景”,这等同于Landsat计划将地球划分为“路径”和“行”。
/
// View an Image Collection
/
// Import the Landsat 8 Raw Collection.
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C02/T1');
// Print the size of the Landsat 8 dataset.
print('The size of the Landsat 8 image collection is:', landsat8 .size());
// Try to print the image collection.
// WARNING! Running the print code immediately below
produces an error because
// the Console can not print more than 5000 elements.
print(landsat8);
// Add the Landsat 8 dataset to the map as a mosaic. The
collection is
// already chronologically sorted, so the most recent pixel
is displayed.
Map.addLayer(landsat8,
{
bands: ['B4', 'B3', 'B2'],
min: 5000,
max: 15000
},
'Landsat 8 Image Collection');
注意高云覆盖率和“分层”外观。条纹外观是卫星收集图像的结果。图像之间的重叠和图像的个体性意味着这些图像还不够准备进行分析;现在查看控制台上打印的大小。它指示数据集中有一百多万张图像。
请注意,打印ImageCollection返回了一个错误消息,因为在ImageCollection上调用打印将会将集合中每张图片的名称写入控制台。这是Earth Engine内部的一种有意设置的保护机制。
2.1.2 Filtering Image Collections
GEE中的ImageCollection数据类型具有多种筛选方法,可帮助从庞大的集合中准确定位您想要查看或分析的特定图像。
2.1.3 Filter by Date
其中一种筛选方式是 filterDate ,可以缩小 ImageCollection 的日期范围。将以下代码复制到中心面板:
// Filter an Image Collection
/
// Filter the collection by date.
var landsatWinter = landsat8.filterDate('2020-12-01',
'2021-03-01');
Map.addLayer(landsatWinter,
{
bands: ['B4', 'B3', 'B2'],
min: 5000,
max: 15000
},
'Winter Landsat 8');
print('The size of the Winter Landsat 8 image collection is:', landsatWinter.size());
查看冬季Landsat 8影像集合的大小。该数字明显低于整个集合中的图像数量。这是将日期筛选为2020-2021年冬季三个月的结果。
2.1.4 Filter by Location
第二种常用的筛选工具是 filterBounds 。此筛选器基于一个地点,例如一个点、多边形或其他几何图形。将以下代码复制并粘贴到地图上,以筛选并添加到地图上明尼阿波利斯(美国明尼苏达州)的冬季Landsat 8图像集合。在图层下的冬季Landsat 8图层旁取消勾选,可以看到只有与点相交的图像被选中。
// Create an Earth Engine Point object.
var pointMN = ee.Geometry.Point([-93.79, 45.05]);
// Filter the collection by location using the point.
var landsatMN = landsatWinter.filterBounds(pointMN);
Map.addLayer(landsatMN,
{
bands: ['B4', 'B3', 'B2'],
min: 5000,
max: 15000
},
'MN Landsat 8');
// Add the point to the map to see where it is.
Map.addLayer(pointMN, {}, 'Point MN');
print('The size of the Minneapolis Winter Landsat 8 image collection is: ', landsatMN.size());
2.1.5 Selecting the First Image
最后一个操作是 first 函数。这选择 ImageCollection 中的第一张图像。这能够将单个图像放在屏幕上进行检查。将以下代码复制并粘贴到地图上,选择并查看明尼阿波利斯冬季Landsat 8图像集合的第一张图像。在这种情况下,因为图像在 ImageCollection 中按时间顺序存储,它将选择数据集中最早的图像。
// Select the first image in the filtered collection.
var landsatFirst = landsatMN.first();
// Display the first image in the filtered collection.
Map.centerObject(landsatFirst, 7);
Map.addLayer(landsatFirst,
{
bands: ['B4', 'B3', 'B2'],
min: 5000,
max: 15000
},
'First Landsat 8');
第一个命令将我们经过地点筛选的图像堆栈并选择第一张图像。当图层添加到地图区域时,您会看到只返回了一张图像。
2.2 影像集合中的单景影像
在前一节学习影像集合时,使用了Landsat 8原始图像数据集。这些原始图像已经进行了一些重要的校正。然而,这些原始图像只是为Landsat 8制作的几个图像集合之一。遥感社区已经开发了额外的图像校正,有助于提高分析的准确性和一致性。每个不同的图像处理路径的结果都存储在GEE中不同的 ImageCollection 中。
其中最突出的是旨在减少地球表面与卫星之间大气影响的 ImageCollection 。值得庆幸的是,除了来自卫星的原始图像,每幅Landsat和某些其他传感器的图像都会自动应用最新的大气校正算法,生成一种称为“表面反射(surface reflectance)”ImageCollection的产品。表面反射估计地球表面向上辐射和向下辐射之间的比率,模拟了传感器如果悬浮在地面几英尺以上将会看到的情况。
接下来查看一种旨在减少地球表面与卫星之间大气影响的数据集之一。将以下代码复制并粘贴到导入并筛选旧金山(美国加利福尼亚州)上空的Landsat 8表面反射数据(landsat8SR)的代码中。我们使用first函数选择第一张图像。通过将landsat8SRimage图像打印到控制台,并访问其元数据,可以看到波段名称与原始图像中的名称不同。在这里,它们的形式是“SR_B”。我们还可以通过查看图像的“id”来检查图像的日期。这个值为“20140318”,表示该图像来自2014年3月18日。
/
// Collections of single images - Landsat 8 Surface Reflectance
/
// Create and Earth Engine Point object over San Francisco.
var pointSF = ee.Geometry.Point([-122.44, 37.76]);
// Import the Landsat 8 Surface Reflectance collection.
var landsat8SR = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2');
// Filter the collection and select the first image.
var landsat8SRimage = landsat8SR.filterDate('2014-03-18', '2014-03-19')
.filterBounds(pointSF)
.first();
print('Landsat 8 Surface Reflectance image', landsat8SRimage);
将以下代码复制并粘贴到地图上,以使用“bands”参数中的调整后的R、G和B波段添加该图像,以进行真实色彩显示。
// Center map to the first image.
Map.centerObject(landsat8SRimage, 8);
// Add first image to the map.
Map.addLayer(landsat8SRimage,
{
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 7000,
max: 13000
,
'Landsat 8 SR');