下一章 上一章 目录 设置
4、四识 第1节搜 ...
-
第1节搜索和查看图像集合信息
单击 USGS Landsat 7 Collection 2 Tier 1 Raw Scenes将出现一个新的插入窗口。
插图窗口包含有关数据集的信息,包括描述、可用波段、图像属性以及顶部数据的使用条款。单击每个选项卡并阅读提供的信息。虽然你现在可能无法理解所有信息,但它将为你在以后的章节中取得成功做好准备。
在此窗口的左侧,你将看到数据可用的日期范围、数据集提供商网页的链接以及集合片段。这个集合片段可用于通过将数据集粘贴到脚本中来导入数据集,就像你在前面的章节中所做的那样。你还可以使用大导入按钮将数据集导入到当前工作区。此外,如果单击“查看示例”链接。
Earth Engine 将打开一个新的代码窗口,其中包含显示使用数据集的代码的代码片段。当你学习如何使用新的数据集时,这样的代码片段非常有帮助。
现在,单击窗口右上角的小“弹出”按钮。这将打开一个包含相同信息的新窗口;你可以保持此新窗口打开并在继续操作时将其用作参考。
切换回代码窗口。你的“landsat 7 collection 2”搜索词应该仍然在搜索栏中。这次,单击“Enter”键或单击搜索放大镜图标。这将打开搜索结果插入窗口。
这个更完整的搜索结果插入窗口包含有关与你的搜索匹配的每个数据集的简短描述,以帮助你选择要使用的数据集。单击“在目录中打开”按钮可在 Earth Engine 数据目录中查看这些搜索结果。请注意,你可能需要在数据目录搜索栏中输入你的短语并单击Enter ,才能在这个新窗口显示结果。
第2节空间分辨率
空间分辨率与单个像素覆盖的地球表面面积有关。它通常以线性单位表示,用于方形像素的单边:例如,我们通常说Landsat 7 具有“30m”彩色图像。这意味着每个像素边长为30m,覆盖地球表面的总面积为900m 2。空间分辨率通常也可互换地称为比例,正如我们在本章中打印该值时所看到的那样。当你在地球表面查看图像时,给定数据集的空间分辨率会极大地影响图像的外观及其中的信息。
接下来,我们将可视化来自以不同空间分辨率捕获数据的多个传感器的数据,以比较不同像素大小对图像中的信息和细节的影响。我们将从每个ImageCollection中选择一个图像进行可视化。为了查看图像,我们将它们分别绘制为彩色红外图像,这是一种使用红外、红色和绿色波段的伪彩色图像。当你浏览练习的这一部分时,放大和缩小以查看像素大小和图像大小的差异。
MODIS (Aqua 和 Terra 卫星上)
MODIS 采集的红外、红、绿波段通用分辨率为500m。这意味着每个像素的边长为500m,因此一个像素代表地球表面0. 25 km 2的面积。
使用以下代码将地图置于旧金山机场的中心,缩放级别为16。
//////
// Explore spatial resolution
//////
// Define a region of interest as a point at San Francisco airport.
var sfoPoint=ee.Geometry.Point(-122.3774, 37.6194);
// Center the map at that point.
Map.centerObject(sfoPoint, 16);
让我们使用上一节中学到的知识来搜索 MODIS 数据、获取相关信息并将其导入到 Earth Engine 工作区中。首先在 Earth Engine搜索栏中搜索“MODIS 500”。
使用此导入“MOD09A1.061 Terra Surface Reflectance 8-day Global 500m” ImageCollection。导入的默认名称出现在脚本的顶部;将导入的名称更改为mod09。
在探索新数据集时,你可以通过阅读数据集的摘要文档(称为元数据)来找到该集中图像中波段的 nmes。在此数据集中,彩色红外图像的三个波段是“sur_refl_b02”(红外)、“sur_refl_b01”(红色)和“sur_refl_b04”(绿色)。
// MODIS
// Get an image from your imported MODIS MYD09GA collection.
var modisImage=mod09.filterDate(\'2020-02-01\', \'2020-03-01\').first();
// Use these MODIS bands for near infrared, red, and green, respectively.
var modisBands=[\'sur_refl_b02\', \'sur_refl_b01\', \'sur_refl_b04\'];
// Define visualization parameters for MODIS.
var modisVis={
bands: modisBands,
min: 0,
max: 3000
};
// Add the MODIS image to the map.
Map.addLayer(modisImage, modisVis, \'MODIS\');
在地图窗口中,你现在应该看到类似这样的内容。
你可能会惊讶地发现通常称为“正方形”的像素显示为平行四边形。像素的形状和方向由数据集的“投影”以及我们查看它们的投影控制。大多数用户不必非常关心 Earth Engine 中的不同投影,它会自动在不同的投影之间传输数据。坐标系就像这里一样。有关一般投影及其在 Earth Engine 中的使用的更多详细信息,你可以查阅官方文档。
让我们查看相对于地面物体的像素大小。单击地图窗口右上角的卫星,打开卫星底图以查看高分辨率数据进行比较。然后,降低图层的不透明度:使用图层滑块在图层管理器中设置不透明度
通过运行以下代码打印像素的大小(以米为单位):
// Get the scale of the data from the NIR band\'s projection:
var modisScale=modisImage.select(\'sur_refl_b02\')
.projection().nominalScale();
print(\'MODIS NIR scale:\', modisScale);
在那次调用中,我们在访问 MODIS NIR 波段的投影信息后使用了nominalScale 函数。该函数以适合打印到屏幕的格式从投影信息中提取空间分辨率。由于 MODIS 数据的正弦投影以及像素距天底(即卫星直接指向地球表面的位置)的距离,nominalScale 函数返回的值略低于规定的 500m 分辨率。先对影像进行投影后,使用nominalScale()函数查询影像空间分辨率
TM(早期陆地卫星)
Landsat 4 和5 上搭载了主题制图器 (TM) 传感器。TM 数据已处理为 30m 的空间分辨率,并在1982 年至2012 年期间处于活动状态。搜索“Landsat 5 TM”并导入名为“USGS Landsat 5”的结果TM Collection 2 Tier 1 Raw Scenes”。以与重命名 MODIS 集合相同的方式,重命名 import tm 。在此数据集中,彩色红外图像的三个波段称为“B4”(红外)、“B3”(红色)和“B2”(绿色)。现在让我们可视化机场的 TM 数据并将其与 MODIS 数据进行比较。请注意,我们可以将可视化参数定义为变量(如前面的代码片段所示),也可以将它们放在Map 中的花括号中。addLayer 函数(如本代码片段所示)。
当你运行此代码时,将显示 TM 图像。请注意与 MODIS 图像相比,屏幕上显示的像素多了多少。
// TM
// Filter TM imagery by location and date.
var tmImage=tm
.filterBounds(Map.getCenter())
.filterDate(\'1987-03-01\', \'1987-08-01\')
.first();
// Display the TM image as a false color composite.
Map.addLayer(tmImage,{
bands: [\'B4\', \'B3\', \'B2\'],
min: 0,
max: 100
}, \'TM\');
正如我们对 MODIS 数据所做的那样,让我们检查一下比例。比例尺以米表示:
// Get the scale of the TM data from its projection:
var tmScale=tmImage.select(\'B4\')
.projection().nominalScale();
print(\'TM NIR scale:\', tmScale);
MSI(在 Sentinel-2 卫星上)
多光谱仪器 (MSI) 搭载在欧洲航天局运营的 Sentinel-2 卫星上。红色、绿色、蓝色和近红外波段以 10 m 分辨率捕获,而其他波段以 20 m 和 30 m 捕获。Sentinel-2A卫星于2015年发射,2B卫星于2017年发射。
在搜索栏中搜索“Sentinel 2 MSI”,然后将“Sentinel-2 MSI:多光谱仪器,Level-1C”数据集添加到你的工作区。将其命名为MSI 。在此数据集中,彩色红外图像的三个波段称为“B8”(红外)、“B4”(红色)和“B3”(绿色)。
// MSI
// Filter MSI imagery by location and date.
var msiImage=msi
.filterBounds(Map.getCenter())
.filterDate(\'2020-02-01\', \'2020-04-01\')
.first();
// Display the MSI image as a false color composite.
Map.addLayer(msiImage,{
bands: [\'B8\', \'B4\', \'B3\'],
min: 0,
max: 2000
}, \'MSI\');
使用不透明度滑块将 MSI 影像与 TM 和 MODIS 影像进行比较。请注意你可以看到机场航站楼和周围景观的更多细节。10 m 空间分辨率意味着每个像素覆盖地球表面约100 m 2,比TM 图像(900 m 2)或MODIS 图像(0.25 km 2)小得多。
显示的 MSI 图像范围也比我们见过的其他仪器要小。缩小直到你可以看到整个旧金山湾。MODIS 图像覆盖整个地球,TM 图像覆盖整个旧金山湾以及蒙特利以南的周边地区,而 MSI 图像捕获的区域要小得多。
检查MSI仪器的刻度(以米为单位):
// Get the scale of the MSI data from its projection:
var msiScale=msiImage.select(\'B8\')
.projection().nominalScale();
print(\'MSI scale:\', msiScale);
NAIP
国家农业图像计划 (NAIP) 是美国政府的一项计划,旨在使用机载传感器获取美国大陆的图像。大约每三年收集一次每个州的数据。图像的空间分辨率为0.5–2 m,具体取决于州和收集的日期。
搜索“naip”并导入“NAIP:国家农业影像计划”的数据集。将导入命名为naip。在此数据集中,彩色红外图像的三个波段称为“N”(红外)、“R”(红色)和“G”(绿色)。
// NAIP
// Get NAIP images for the study period and region of interest.
var naipImage=naip
.filterBounds(Map.getCenter())
.filterDate(\'2018-01-01\', \'2018-12-31\')
.first();
// Display the NAIP mosaic as a color-IR composite.
Map.addLayer(naipImage,{
bands: [\'N\', \'R\', \'G\']
}, \'NAIP\');
NAIP图像比Sentinel-2 MSI 图像在空间上更加详细。然而,我们可以看到我们的一张 NAIP 图像并未完全覆盖旧金山机场。如果你愿意,可以缩小以查看 NAIP 图像的边界,就像我们对 Sentinel-2 MSI 图像所做的那样。
// Get the NAIP resolution from the first image in the mosaic.
var naipScale=naipImage.select(\'N\')
.projection().nominalScale();
print(\'NAIP NIR scale:\', naipScale);
我们检查的每个数据集都有不同的空间分辨率。通过比较空间中同一位置的不同图像,你可以看到 MODIS 大像素、TM (Landsat 5) 和 MSI (Sentinel-2) 中型像素以及 NAIP 小像素之间的差异。大像素的数据集也称为“粗分辨率”,中等像素的数据集也称为“中分辨率”,小像素的数据集也称为“精细分辨率”。
第 3 节.时间分辨率
时间分辨率是指特定传感器图像流的重访时间或时间节奏。重访时间是卫星连续访问地球表面同一位置之间的天数。可以将其视为给定位置的时间序列中像素的频率。
陆地卫星
Landsat 卫星 5 号及后续卫星能够每16天拍摄一次给定位置的图像。让我们使用 Landsat 5 中现有的tm 数据集。要查看某个位置的图像时间序列,你可以将ImageCollection过滤到感兴趣的区域和日期范围,然后打印它。例如,要查看1987年三个月的 Landsat 5图像,请运行以下代码:
// Explore Temporal Resolution
/////
// Use Print to see Landsat revisit time
print(\'Landsat-5 series:\', tm
.filterBounds(Map.getCenter())
.filterDate(\'1987-06-01\', \'1987-09-01\'));
// Create a chart to see Landsat 5\'s 16 day revisit time.
var tmChart=ui.Chart.image.series({
imageCollection: tm.select(\'B4\').filterDate(\'1987-06-01\',
\'1987-09-01\'),
region: sfoPoint
}).setSeriesNames([\'NIR\']);
展开控制台输出中打印的ImageCollection的 features 属性,以查看集合中所有图像的列表。请注意,每个图像的日期是文件名的一部分(例如LANDSAT/LT05/C02/T1/LT05_044034_19870628)。
但是,查看此列表并不容易了解数据集的时间分辨率。我们可以使用 Earth Engine 的绘图功能来可视化不同数据集的时间分辨率。对于每个不同的时间分辨率,我们将创建我们之前映射的 NIR 波段的每像素图表。为此,我们将使用ui.Chart.image.series函数。
用户界面。Chart.image.series 函数要求你指定一些内容,以便计算每个时间步的图表点。首先,我们过滤ImageCollection (你也可以在函数外部执行此操作,然后直接指定 ImageCollection )。我们选择 B4(近红外)波段,然后使用ImageCollection 上的filterDate选择三个月。接下来,我们需要指定要绘制图表的位置;这是地区争论。我们将使用之前定义的sfoPoint变量。
// Create a chart to see Landsat 5\'s 16 day revisit time.
var tmChart=ui.Chart.image.series({
imageCollection: tm.select(\'B4\').filterDate(\'1987-06-01\',
\'1987-09-01\'),
region: sfoPoint
}).setSeriesNames([\'NIR\']);
默认情况下,该函数创建一条趋势线。很难准确地看到每张图像的收集时间,因此让我们创建一个专门的图表样式,为每个观察结果添加点。
// Define a chart style that will let us see the individual dates.
var chartStyle={
hAxis:{
title: \'Date\'
},
vAxis:{
title: \'NIR Mean\'
},
series:{
0:{
lineWidth: 3,
pointSize: 6
}
},
};
// Apply custom style properties to the chart.
tmChart.setOptions(chartStyle);
// Print the chart.
print(\'TM Chart\', tmChart);
打印图表时,TM 仪器每次采集图像时都会有一个点。在控制台中,你可以将鼠标移动到不同的点上并查看更多信息。另请注意,你可以使用右上角的按钮展开图表。我们将看到更多图表示例,特别是在F4部分的章节中。
哨兵2号
Sentinel-2计划的两颗卫星位于协调轨道上,因此地球上的每个地点大约每5天就会被访问一次。在 Earth Engine 中,来自这两个传感器的图像汇集在同一数据集中。让我们使用已经导入的 MSI 仪器数据集创建一个图表。
// Sentinel-2 has a 5 day revisit time.
var msiChart=ui.Chart.image.series({
imageCollection: msi.select(\'B8\').filterDate(\'2020-06-01\',
\'2020-09-01\'),
region: sfoPoint
}).setSeriesNames([\'NIR\']);
// Apply the previously defined custom style properties to the chart.
msiChart.setOptions(chartStyle);
// Print the chart.
print(\'MSI Chart\', msiChart);
显示旧金山机场 Sentinel-2 MSI 仪器的时间节奏或时间分辨率的图表
将此 Sentinel-2图与你刚刚生成的 Landsat 图进行比较。两者都涵盖六个月的时间,但 Sentinel-2卫星的时间点更多,反映出更高的时间分辨率。
第 4节光谱分辨率
光谱分辨率是指传感器进行测量的光谱带的数量和宽度。你可以将光谱带的宽度视为每个波段的波长间隔。测量多个波段辐射亮度的传感器称为多光谱传感器(通常为3-10个波段),而具有多个波段(可能数百个)的传感器称为高光谱传感器;然而,这些都是相对术语,没有普遍接受的定义。
让我们将多光谱 MODIS 仪器与EO-1卫星上的高光谱Hyperion传感器进行比较,后者也可在 Earth Engine 中使用。
MODIS
有一种简单的方法可以检查图像中的条带数量:
// Explore spectral resolution
/////
// Get the MODIS band names as an ee.List
var modisBands=modisImage.bandNames();
// Print the list.
print(\'MODIS bands:\', modisBands);
// Print the length of the list.
print(\'Length of the bands list:\', modisBands.length());
请注意,并非所有波段都是光谱波段。正如我们对时间分辨率所做的那样,让我们绘制光谱带图来检查光谱分辨率。
// Graph the MODIS spectral bands (bands 11-17).
// Select only the reflectance bands of interest.
var reflectanceImage=modisImage.select(
\'sur_refl_b01\',
\'sur_refl_b02\',
\'sur_refl_b03\',
\'sur_refl_b04\',
\'sur_refl_b05\',
\'sur_refl_b06\',
\'sur_refl_b07\'
);
和以前一样,我们将自定义图表以使其更易于阅读。
// Define an object of customization parameters for the chart.
var options={
title: \'MODIS spectrum at SFO\',
hAxis:{
title: \'Band\'
},
vAxis:{
title: \'Reflectance\'
},
legend:{
position: \'none\'
},
pointSize: 3
};
并使用ui创建图表。Chart.image.regions函数。
// Make the chart.
var modisReflectanceChart=ui.Chart.image.regions({
image: reflectanceImage,
regions: sfoPoint
}).setOptions(options);
// Display the chart.
print(modisReflectanceChart);
使用右上角的展开按钮可以查看比打印到控制台的图表更大的图表版本。
EO-1
现在我们将 MODIS 与 EO-1卫星的高光谱传感器进行比较。搜索“eo-1”并导入“EO-1 Hyperion 高光谱成像仪”数据集。将其命名为eo1。我们可以查看 EO-1传感器的波段数。
// Get the EO-1 band names as a ee.List
var eo1Image=eo1
.filterDate(\'2015-01-01\', \'2016-01-01\')
.first();
// Extract the EO-1 band names.
var eo1Bands=eo1Image.bandNames();
// Print the list of band names.
print(\'EO-1 bands:\', eo1Bands);
检查控制台中打印的频段列表。请注意高光谱仪器还提供了多少个波段。
现在让我们像处理 MODIS 数据一样创建反射率图表。
// Create an options object for our chart.
var optionsEO1={
title: \'EO1 spectrum\',
hAxis:{
title: \'Band\'
},
vAxis: {
title: \'Reflectance\'
},
legend:{
position: \'none\'
},
pointSize: 3
};
// Make the chart and set the options.
var eo1Chart=ui.Chart.image.regions({
image: eo1Image,
regions: ee.Geometry.Point([6.10, 81.12])
}).setOptions(optionsEO1);
// Display the chart.
print(eo1Chart);
将此高光谱仪器图表与我们上面为MODIS绘制的多光谱图表进行比较。
第5节:每像素质量
正如你在上面看到的,图像由许多条带组成。其中一些波段包含地球表面的光谱响应,包括我们在光谱分辨率部分检查的近红外、红色和绿色波段。其他波段呢?其中一些其他波段包含有价值的信息,例如逐像素质量控制数据。
例如,Sentinel-2有一个QA60频段,其中包含表面反射率质量保证信息。让我们映射它来检查值。
// Sentinel Quality Visualization.
var msiCloud=msi
.filterBounds(Map.getCenter())
.filterDate(\'2019-12-31\', \'2020-02-01\')
.first();
// Display the MSI image as a false color composite.
Map.addLayer(msiCloud,
{
bands: [\'B8\', \'B4\', \'B3\'],
min: 0,
max: 2000
},
\'MSI Quality Image\');
Map.addLayer(msiCloud,
{
bands: [\'QA60\'],
min: 0,
max: 2000
},
\'Sentinel Quality Visualization\');
使用检查器工具检查某些值。你可能会看到值 0(黑色)、1024(灰色)和 2048(白色)。QA60 波段对于不透明云的值为1024,对于卷云为2048。将假色图像与 QA60 波段进行比较以查看这些值。
第 6 节. 元数据
除了波段图像和每像素质量标志之外,Earth Engine 还允许你访问与图像相关的大量元数据。这些都可以轻松打印到控制台以形成单个图像。
让我们检查一下 Sentinel-2 MSI 的元数据。
print(\'MSI Image Metadata\', msiImage);
检查你在控制台中创建的对象。展开图像名称,然后展开属性对象。
Sentinel-2元数据中的“CLOUDY_PIXEL_PERCENTAGE”属性
第一个条目是CLOUDY_PIXEL_PERCENTAGE 信息。与附加到每个像素的云度标志不同,这是对图像中整体云度的图像级摘要评估。除了查看该值之外,你可能会发现将其打印到屏幕上或在一组图像中记录云度值列表也很有用。可以使用get函数从图像的属性中提取元数据属性,并将其打印到Console。
// Image-level Cloud info
var msiCloudiness=msiImage.get(\'CLOUDY_PIXEL_PERCENTAGE\');
print(\'MSI CLOUDY_PIXEL_PERCENTAGE:\', msiCloudiness);