晋江文学城
下一章 上一章  目录  设置

9、九识 第1节。过 ...

  •   第1节。过滤和检查图像集合
      我们将重点关注葡萄牙里斯本及其周边地区。下面,我们将定义一个位于城市的点lisbonPoint ;访问非常大的 Landsat ImageCollection 并将其限制为2020年以及包含里斯本的图像;并从生成的过滤后的ImageCollection中的每个图像中选择波段6、5 和 4。

      // Define a region of interest as a point in Lisbon, Portugal.
      var lisbonPoint=ee.Geometry.Point(-9.179473, 38.763948);

      // Center the map at that point.
      Map.centerObject(lisbonPoint, 16);

      // filter the large ImageCollection to be just images from 2020
      // around Lisbon. From each image, select true-color bands to draw
      var filteredIC=ee.ImageCollection(\'LANDSAT/LC08/C02/T1_TOA\')
      .filterDate(\'2020-01-01\', \'2021-01-01\')
      .filterBounds(lisbonPoint)
      .select([\'B6\', \'B5\', \'B4\']);

      // Add the filtered ImageCollection so that we can inspect values
      // via the Inspector tool
      Map.addLayer(filteredIC,{}, \'TOA image collection\');

      三个选定的波段(对应于 SWIR1、NIR 和红色)显示假彩色图像,突出了里斯本不同土地覆盖(例如混凝土、植被)之间的差异。当“检查器”选项卡突出显示时,单击一个点将显示每个图像中波段6、5和4的值。如果你打开这个系列选项,你将看到随时间变化的值。对于里斯本的指定点和所有其他点(因为它们都包含在同一 Landsat 场景中),2020年收集了6张图像。通过沿着图形线之一(蓝色、黄色或红色)与你的手指,你应该能够数出那么多不同的值。沿着线条移动鼠标将显示具体值和图像日期。

      我们还可以利用ui自动显示这种图表。 Earth Engine API 的图表功能。假设单击相同的像素,以下代码片段应生成与我们在“检查器”选项卡中观察到的相同的图表。

      // Construct a chart using values queried from image collection.
      var chart=ui.Chart.image.series({
      imageCollection: filteredIC,
      region: lisbonPoint,
      reducer: ee.Reducer.first(),
      scale: 10
      });

      // Show the chart in the Console.
      print(chart);

      第2节。地球上到处都有多少图像
      假设我们有兴趣了解对于给定的ImageCollection ,我们在地球上的每个地图像素上有多少个有效观测值。这项计算量巨大的任务在 Earth Engine 中非常容易完成。API 提供了一组化简器函数,用于将每个像素中的值汇总为单个数字,我们可以使用下面的代码将这个减速器count应用于我们过滤后的ImageCollection。我们将在2020年返回相同的数据集和过滤器,但没有地理限制。这将汇集来自世界各地的图像,然后计算每个像素中的图像数量。以下代码执行此计数,并将生成的图像添加到地图中预定义的红/黄/绿调色板在值0和50之间延伸。继续将下面的代码粘贴到同一脚本中。

      // compute and show the number of observations in an image collection
      var count=ee.ImageCollection(\'LANDSAT/LC08/C02/T1_TOA\')
      .filterDate(\'2020-01-01\', \'2021-01-01\')
      .select([\'B6\'])
      .count();

      // add white background and switch to HYBRID basemap
      Map.addLayer(ee.Image(1),{
      palette: [\'white\']
      }, \'white\', true, 0.5);
      Map.setOptions(\'HYBRID\');

      // show image count
      Map.addLayer(count,{
      min: 0,
      max: 50,
      palette: [\'d7191c\', \'fdae61\', \'ffffbf\', \'a6d96a\',
      \'1a9641\']
      }, \'landsat 8 image count (2020)\');

      // Center the map at that point.
      Map.centerObject(lisbonPoint, 5);

      运行命令并缩小,查看整个地球的图像计数。

      你可能已经注意到,我们总结了原始ImageCollection中的单个波段,以确保生成的图像在每个像素中给出单个计数。计数缩减器对传递给它的每个频带进行操作。由于每个图像都具有相同数量的波段,因此将所有七个 Landsat 波段的ImageCollection传递给计数缩减器将为每个点返回七个相同的值16。为了避免因重复看到同一数字七次而造成混淆,我们从集合中的每张图像中选择了一个波段。在你自己的工作中,你可能想要使用不同的减速器,例如中位数操作,这将为每个频段提供不同的、有用的答案。下面描述了其中一些减速器。

      第3节减少数据以了解波段价值
      正如我们所见,你可以单击地球表面的任意一点,查看2020年记录的 Landsat 图像数量以及任意波段中任意图像随时间变化的值。考虑到正在使用的数据量巨大,这令人印象深刻,甚至可能令人费解。在本节和下一节中,我们将探索两种总结波段数值的方法-一种是直接的方法,另一种是更复杂但非常强大的方法,用于查看图像集合中包含哪些信息。

      首先,我们将为过滤集创建一个新图层,表示2020年以来每个图像的每个像素中每个波段的平均值,将此图层添加到图层集中,然后使用 Inspector 再次探索。上一节的计数缩减器是使用一种简单的速记方式直接调用的;在这里可以通过调用组装乐队的平均值来完成类似的操作。在此示例中,我们将使用化简器通过更通用的化简调用来获取平均值。继续将以下代码粘贴到同一脚本中。

      // Zoom to an informative scale for the code that follows.
      Map.centerObject(lisbonPoint, 10);

      // Add a mean composite image.
      var meanFilteredIC=filteredIC.reduce(ee.Reducer.mean());
      Map.addLayer(meanFilteredIC,{},
      \'Mean values within image collection\');

      现在,让我们看看2020年收集的所有值中每个波段的中值。使用下面的代码计算中值并使用Inspector探索图像。通过肉眼并单击检查器中的几个像素,将此图像与平均图像进行简要比较。它们应该具有不同的值,但在大多数地方它们看起来非常相似。

      // Add a median composite image.
      var medianFilteredIC=filteredIC.reduce(ee.Reducer.median());
      Map.addLayer(medianFilteredIC,{},
      \'Median values within image collection\');

      Earth Engine 提供多种减速器。如果你对哪些减速器可用于汇总图像集合中的带值感到好奇,请使用代码编辑器中的“文档”选项卡列出所有减速器并查找以ee 开头的减速器。减速机。

      第4节:计算图像集合的多个百分位图像
      ee是一种特别有用的归约器,可以帮助你更好地理解图像集合中值的可变性。减速器百分位数。第 n个百分位数给出了集合中第 n 大的值。在这种情况下,你可以想象访问给定ImageCollection 中给定 band 的所有值对于给定的像素并对它们进行排序。例如,第30个百分位数是列表中从最小到最大的30%的值。这提供了一种简单的方法,通过计算每个像素的值的累积密度函数来探索图像集合中值的变化性。以下代码显示了如何在 Landsat 8 ImageCollection的每个像素和每个波段的基础上计算单个30%的百分位数。继续将以下代码粘贴到同一脚本中。

      // compute a single 30% percentile
      var p30=filteredIC.reduce(ee.Reducer.percentile([30]));

      Map.addLayer(p30,{
      min: 0.05,
      max: 0.35
      }, \'30%\');

      我们可以看到生成的合成图像在该区域几乎不存在浑浊像素。发生这种情况是因为多云像素通常具有较高的反射率值。在值的最低端,其他不需要的效果(例如云或山阴影)通常具有非常低的反射率值。这就是为什么这个 30% 的合成图像看起来比平均合成图像 ( meanFilteredIC )干净得多早先计算过。请注意,缩减器按像素进行操作:相邻像素是从不同图像中绘制的。这意味着一个像素的值可以从一个日期的图像中获取,而相邻像素的值可以从完全不同的时期获取。尽管与平均图像和中值图像一样,所示的百分位数图像从未在一天中存在过,但合成图像使我们能够在没有使分析变得困难的噪声的情况下查看地球表面。

      我们可以通过查看一系列越来越亮的百分位数图像来探索整个ImageCollection中的值范围。

      var percentiles=[0, 10, 20, 30, 40, 50, 60, 70, 80];

      // let\'s compute percentile images and add them as separate layers
      percentiles.map(function(p){
      var image=filteredIC.reduce(ee.Reducer.percentile([p]));
      Map.addLayer(image,{
      min: 0.05,
      max: 0.35
      }, p + \'%\');
      });

      请注意,代码将每个百分位数图像添加为单独的地图图层,因此你需要转到“图层”控件并显示/隐藏不同图层以探索差异。在这里,我们可以看到低百分位数的合成图像描绘了较暗、低反射率的土地特征,例如水和云或山的阴影,而较高百分位数的合成图像(在我们的示例中> 70%)描绘了云和任何其他大气或与明亮反射率值相对应的土地效应。

      Earth Engine 提供了非常丰富的 API,允许用户探索图像集合,以更好地了解空间、时间和跨频带数据的范围和变化性,以及用于分析频域中图像集合中存储的值的工具。在开发数据分析算法之前,以不同形式探索这些值应该是任何研究的第一步。

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>