GEE入门及进阶教程|在 Earth Engine 中绘制图像集合

news2024/12/26 21:52:41

        在前面的内容中,我们计算了增强植被指数 (EVI),以说明卫星图像上的波段运算,代码在单个图像上被调用一次。 如果我们想以相同的方式计算整个 ImageCollection 中的每个图像的 EVI,该怎么办?在这里,我们使用 Earth Engine 工作流程第二部分的关键工具,即 .map 命令。

        在开始编写 EVI 功能之前,值得注意的是,在基于云的遥感过程中,在多种设置中都会遇到“Map”一词,能够区分用途非常重要。 “Map”在 Earth Engine 中可以充当动词或名词,“地图”作为名词有两种用法。 我们可能会随意提及“Map”,或更准确地说是“Map panel”; 这些术语指的是图像在代码界面中显示的位置。 第二种方式“Map”用作名词,指代地球引擎对象,该对象具有可以调用的函数。 这方面的例子是熟悉的 Map.addLayer 和 Map.setCenter。 如果打算使用该词,它将以紫色文本显示并在代码编辑器中大写。 我们在这里讨论的是使用 .map 作为动词,代表在一组上重复执行一组动作的想法。 这通常称为“mapping over the set”。

        为了在整个 ImageCollection 上有效地映射一组给定的操作,需要以特定的方式设置处理。
熟悉其他编程语言的用户可能希望看到“loop”代码来执行此操作,但 Earth Engine 中的处理并不完全按照这种方式完成。 相反,我们将创建一个函数,然后将其映射到 ImageCollection。 首先,设想创建一个只接受一个参数(ee.Image)的函数。 然后,该函数被设计为对输入 ee.Image 执行一组指定的操作,然后,重要的是,返回 ee.Image 作为函数的最后一步。 当我们将该函数映射到 ImageCollection 时,如下所示,效果是我们从 ImageCollection 开始,对每个图像执行操作,并接收处理后的 ImageCollection,如下所示输出。

        我们可以创建什么类型的函数? 例如,您可以想象一个函数获取图像并返回一个图像,当给定波段的值低于某个阈值时,该图像的像素值为 1,否则返回 0。 映射此函数的效果将是图像的整个 ImageCollection,其中的零和一代表每个图像上的测试结果。 或者,您可以想象一个函数计算复杂的自定义索引并发送回在每个像素中计算的该索引的图像。 在这里,我们将创建函数来计算任何输入 Landsat 5 图像的 EVI,并返回为每个像素计算索引的单波段图像。 将下面的函数定义复制并粘贴到代码编辑器中,将其添加到上一节脚本的末尾(上一期过滤图像的脚本)。

var makeLandsat5EVI = function(oneL5Image) {
// compute the EVI for any Landsat 5 image. Note it's specific to
// Landsat 5 images due to the band numbers. Don't run this exact
// function for images from sensors other than Landsat 5.
// Extract the bands and divide by 1e4 to account for scaling done.
var nirScaled = oneL5Image.select('SR_B4').divide(10000);
var redScaled = oneL5Image.select('SR_B3').divide(10000);
var blueScaled = oneL5Image.select('SR_B1').divide(10000);
// Calculate the numerator, note that order goes from left to right.
var numeratorEVI = (nirScaled.subtract(redScaled)).multiply(2.5);
// Calculate the denominator
var denomClause1 = redScaled.multiply(6);
var denomClause2 = blueScaled.multiply(7.5);
var denominatorEVI = nirScaled.add(denomClause1).subtract(
denomClause2).add(1);
// Calculate EVI and name it.
var landsat5EVI =
numeratorEVI.divide(denominatorEVI).rename(
'EVI');
return (landsat5EVI);
};

        值得强调的是,一般来说,带名称是特定于每个 ImageCollection 的。 因此,例如,如果该函数在没有带“SR_B4”的图像上运行,则函数调用将失败。 在这里,我们在函数名称中强调了它是专门为 Landsat 5 创建 EVI 的。 

        函数 makeLandsat5EVI 用于接收单个图像,选择适当的波段来计算 EVI,进行计算并返回单波段图像。 如果我们知道组成 ImageCollection 的每张图像的名称,我们可以将名称输入到代码编辑器中,并为每张图像一次调用一个函数,将图像组装成变量,然后将它们组合成ImageCollection。 这将非常乏味并且很容易出错:项目列表可能会输入错误,图像可能会丢失等。相反,如上所述,我们将使用 .map。 使用下面的代码,让我们打印有关云过滤的集合的信息并显示它,执行 .map 命令,并探索生成的 ImageCollection。

var L5EVIimages = efficientFilteredSet.map(makeLandsat5EVI);
print('Verifying that the .map gives back the same number of
images: ',
L5EVIimages.size());
print(L5EVIimages);
Map.addLayer(L5EVIimages, {}, 'L5EVIimages', 1, 1);

        输入并执行此代码后,您将看到一个灰度图像(图1)。 如果仔细观察图像的边缘,您可能会发现其后面绘制的其他图像,看起来有点像桌子上的一叠纸。 这是由 makeLandsat5EVI 函数绘制的 ImageCollection 的图。 您可以选择“检查器”面板并单击其中一个灰度像素来查看整个 ImageCollection 的值。 单击像素后,通过打开和关闭项目列表来查找系列标签。 当您打开该标签时,您将看到该像素处的 EVI 值图表(图2),该图表是通过将 makeLandsat5EVI 函数映射到过滤后的 ImageCollection 上而创建的。

图1

图2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1544104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Swing游戏开发学习17

内容来自RyiSnow视频讲解 这一节讲的是Event(Damage Pit, Healing Pool, Teleport Tile),直译:事件(伤害深坑(类似陷阱吧),治愈池,传送瓦片) 事件(陷阱【掉进去回掉血】,治愈池【可…

js获取cookie

js获取cookie 前言实现讲解特别注意: 前言 主要是通过document.cookie来进行实现的 实现讲解 首先通过document.cookie 来获取到所有的cookie 然后通过分号进行分割成list 然后循环list,将list中的字符串通过首个等号进行分割然后和指定的cookie名进行比对然后返…

浙政钉小程序加入埋点

研究好久,终于知道埋点怎么写了,我是使用原生写的,请参考! 小程序埋点只需要添加稳定性监控代码(Emas)和流量分析代码(A) **稳定性监控代码(Emas)**只需要在首页加入。**流量分析代码…

关系型数据库mysql(6)备份与恢复

一.数据备份的重要性 (1)在生产环境中,数据的安全性至关重要 (2)任何数据的丢失都可能产生严重的后果 (3)造成数据丢失的原因 程序错误人为操作失误运算错误磁盘故障灾难(如火灾…

Selenium 自动化 —— 切换浏览器窗口

更多内容请关注我的 Selenium 自动化 专栏: 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码浏览器窗口操作 平时我们在使用浏览器时,通常会打开多个窗口,然后再多个窗口中来回切换&#xf…

SuperGluePretrainedNetwork 详细解读

目录结构展示了SuperGluePretrainedNetwork项目的简化版布局。这是一个关于使用SuperGlue算法进行图像配对的深度学习项目,主要包括预训练的模型和执行配对的脚本。 demo_superglue.py demo_superglue.py脚本的主要作用是展示SuperGlue预训练网络在图像对上进行特征…

YZ系列工具之YZ09: VBA_Excel之读心术

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

springboot项目学习-瑞吉外卖(4)

1.任务 这一节主要的任务是解决文件的上传和下载功能 2.文件上传 概念:将本地的图片上传到浏览器上面 点击文件上传,前端就会发送如上的请求,服务端应该根据URL和请求方法来处理请求 CommonController类: RestController Slf4j …

unity学习(66)——控制器Joystick Pack优化

Joystick Pack这种重力带惯性不利于正常开发。决定进行优化。有一种万事俱备只欠东风的感觉。 源代码如下: 1.在脚本中找到轮盘所输出的方向值 2.把方向的改变值加到鸣人模型身上。 2.1控制器脚本中添加model变量 2.2在unity中赋值 2.3代码中修改位置 using Syst…

咕炮课堂Java架构师课程

课程介绍 主要针对1到5年及以上工作经验的开发人员,提供互联网行业热门技术的Java架构师专题培训,由业内技术大牛,行业及实战经验丰富的讲师进行技术分享。内容涵盖redis,mongodb,dubbo,zookeeper,kafka 高并发、高可用、分布式、高性能、并…

SSM整合遇到的问题,非常干货,希望能帮助到您~

你们好,我是金金金。 无法自动装配 配置类已经配置了扫描 那是什么原因导致? 解决 很明显位置都不在一起,需要更改。 结果类型不匹配select id“selectEmployeeByCondition” 什么原因导致? 这个是因为我建立了很多子模块 名字…

360奇酷刷机 360刷机助手 QIKU Download Assistant

360奇酷刷机 360刷机助手 QIKU Download Assistant 破 解 360手机刷机资源下载链接:360rom.github.io 参考:360手机-360刷机360刷机包twrp、root 360奇酷刷机:360高通驱动安装 360手机刷机驱动;手机内置,可通过USB文件…

Spark spark-submit 提交应用程序

Spark spark-submit 提交应用程序 Spark支持三种集群管理方式 Standalone—Spark自带的一种集群管理方式,易于构建集群。Apache Mesos—通用的集群管理,可以在其上运行Hadoop MapReduce和一些服务应用。Hadoop YARN—Hadoop2中的资源管理器。 注意&…

(1) 易经与命运_学习笔记

个人笔记,斟酌阅读 占卦的原理 三个铜板,正面是3,反面2,三个一起转,得出6,7,8,9 数字象6老阴7少阳8少阴9老阳 生数和成数 生数和成数应该说出自《河图》。其中一二三四五为生数,六七八九十为成数。 生…

程序员实用学习平台,必看榜!

只要卷不死,就往死里卷! 高中老师宣扬的励志鸡汤,仿佛走出了校园踏入社会仍然适用。 “出走半生,归来仍是少年。”emm....... 如今比麻花还卷的社会,学到老才能活到老啊~尤其咱们IT这么优胜劣汰的行业,自是…

计算机408炸了!大多数人都栽在这门课上

组成原理>>数据结构>操作系统>计算机网络 在本科时,我在学习组成原理之前已经学过数字电路和模拟电路,但在接下来学习组成原理时,我依然感到困难。也许是因为自己理解能力不足,总觉得难以掌握,甚至在考研…

redis实际应用场景及并发问题的解决

业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候,有千分之三的概率掉落金币,每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群(这个要求暂时不实现) 编写接口&…

【科研基础】分布式信源编码与中继通信

[1] Bian, Chenghong, et al. “Deep joint source-channel coding over cooperative relay networks.” arXiv preprint arXiv:2211.06705 (2022). [2] Bian, Chenghong, et al. “Process-and-Forward: Deep Joint Source-Channel Coding Over Cooperative Relay Networks.”…

Linux系统 安装docker

安装: 1、Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安账docker 2、更新yum包: sudo yum -y update 3、安装需要的软件包,yum-util 提供yum-config-manager功能,另外…

PyCharm环境下Git与Gitee联动:本地与远程仓库操作实战及常见问题解决方案

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言下载及安装GitGit的使用设置用户签名设置用户安全目录Git基本操作Git实操操作 Pyc…