遮蔽云和云雾函数

目录

  • 简介
  • 源代码
  • 详细的函数说明
    • .select()
    • cloudBitMask = 1 << 10 -[操作符]
    • qa.bitwiseAnd(cloudBitMask).eq(0)
    • .and()
    • image.updateMask()
    • .divide(10000)
  • 函数应用

简介

这是一个在 Google Earth Engine 中用于遮蔽 Sentinel-2 数据中云和云雾的函数。该函数首先选择 Sentinel-2 数据中的云量标志(QA60波段),然后通过位操作来确定是否存在云或云雾。

具体步骤如下:

  • 选择 Sentinel-2 数据中的 QA60 波段,该波段包含了云量信息。
  • 定义了云和云雾的位掩码。在 Sentinel-2 的 QA60 波段中,第 10 位表示云,第 11 位表示云雾。
  • 使用位操作(位与)来检查云和云雾的位是否被设置为 1。如果位掩码中的相应位为 1,则说明存在云或云雾。
  • 创建一个遮蔽图层,将云和云雾所在的像素设置为无效值(NaN)。
  • 将遮蔽图层应用到原始图像上,然后将像素值除以 10000,以获得真实的地表反射率。
    这个函数可以用于 Sentinel-2 数据的预处理,以去除图像中的云和云雾,使得后续分析更加准确。

源代码

function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}

详细的函数说明

.select()

在 Google Earth Engine 中,select() 方法用于从图像对象中选择指定的波段或属性,并返回一个包含所选波段或属性的新图像对象。

cloudBitMask = 1 << 10 -[操作符]

这行代码是用来创建一个掩码,用于识别 Sentinel-2 数据中的云层。在 Sentinel-2 的数据中,云层信息保存在 QA60 波段中的特定位上。具体来说,第 10 位(从右往左数)表示云层的存在与否。

这行代码执行了位移操作,将数字 1 左移 10 位,得到了一个具有如下形式的二进制数:

0000000001

经过左移 10 位后:

0000010000

这个二进制数表示了一个掩码,用于在 QA60 波段中提取云层信息。掩码的二进制表示中只有第 10 位是 1,其他位都是 0。在进行位与操作时,这个掩码与 QA60 波段中的像素值进行位与操作,结果为 0 表示该位置没有云层,结果为非 0 表示该位置有云层。

这种位操作的技巧是用来提取 Sentinel-2 数据中特定信息的常见做法,例如提取云层、云影、雪覆盖等信息。

qa.bitwiseAnd(cloudBitMask).eq(0)

这行代码是用来从 Sentinel-2 数据的 QA60 波段中提取云层信息的一部分。具体来说,它通过位与操作和相等比较来确定图像中的像素是否被标记为云层。

在这行代码中,qa 是一个代表 QA60 波段的图像对象,cloudBitMask 是一个表示云层的掩码,它通过左移操作创建。

让我们来解释一下这行代码:

qa.bitwiseAnd(cloudBitMask):这一部分执行了位与操作,将 QA60 波段中的像素值与云层掩码进行位与操作。位与操作的结果是将两个二进制数的对应位进行逻辑与运算,如果两个对应位都是 1,则结果为 1,否则为 0。这个操作的结果是得到一个新的图像,其中云层的像素被标记为非 0,其他像素为 0。

.eq(0):这一部分执行了相等比较,将位与操作结果中的像素值与 0 进行相等比较。相等比较的结果是一个布尔值图像,其中像素值为 1 表示原始图像中对应像素值为 0(即非云层),像素值为 0 表示原始图像中对应像素值不为 0(即云层)。

因此,整个表达式 qa.bitwiseAnd(cloudBitMask).eq(0) 的含义是,确定图像中哪些像素没有被标记为云层,结果为真表示该像素不是云层,结果为假表示该像素是云层。

.and()

.and() 是逻辑与操作,用于将两个布尔值进行逻辑与运算,并返回一个新的布尔值。

在你提供的代码中,.and() 方法被用于将两个布尔值图像进行逻辑与操作,其中第一个布尔值图像表示云层掩码,第二个布尔值图像表示云雾掩码。逻辑与操作的结果是将两个图像的对应像素进行逻辑与运算,如果两个对应像素值都为 true,则结果为 true,否则为 false。

具体地,在地球引擎中,.and() 方法可以直接应用于图像对象上,而不仅仅是布尔值。在这种情况下,它执行了逐像素的逻辑与操作。如果两个图像对象具有相同的形状和大小,则 .and() 方法将逐像素地将它们进行逻辑与运算,并返回一个新的图像对象,其中每个像素的值都是对应位置上两个输入图像像素值进行逻辑与运算后的结果。

image.updateMask()

image.updateMask(mask) 方法用于根据给定的遮蔽图层(掩码)更新图像的遮蔽,即将图像中的像素根据掩码的情况进行更新。在更新遮蔽时,如果掩码中的像素值为 0,则对应的图像像素将被遮蔽(即设置为无效值),如果掩码中的像素值为非 0,则对应的图像像素保持不变。

具体来说,image.updateMask(mask) 方法将使用给定的遮蔽图层 mask 对图像 image 进行遮蔽。遮蔽操作会将图像中的像素根据掩码的情况进行更新,即将掩码中对应像素值为 0 的位置在图像中进行遮蔽,而保留其他像素不变。

以下是一个示例,演示了如何使用 image.updateMask(mask) 方法根据遮蔽图层更新图像的遮蔽:

// 创建一个示例图像
var image = ee.Image.constant(1).clip(geometry);// 创建一个遮蔽图层
var mask = ee.Image.constant(0);// 更新图像的遮蔽
var maskedImage = image.updateMask(mask);// 打印结果
print('Masked image:', maskedImage);

在这个示例中,我们首先创建了一个示例图像 image,并创建了一个遮蔽图层 mask,其中所有像素值都为 0。然后,我们使用 image.updateMask(mask) 方法根据遮蔽图层更新了图像的遮蔽,得到了一个新的图像 maskedImage。最后,我们打印了结果图像对象。

.divide(10000)

在Google Earth Engine中,.divide(10000)方法用于对图像中的每个像素值进行除以10000的操作。通常情况下,这是因为在遥感影像中,像素值通常表示的是反射率或辐射亮度等物理量,这些值通常被放大到一个很大的范围。因此,为了得到真实的物理量,需要对这些像素值进行归一化处理,将其缩小到一个合适的范围。

在Sentinel-2影像中,像素值通常是以整数形式表示,范围通常在0到10000之间。除以10000将像素值缩小到0到1之间的范围内,这是一种常见的归一化操作,有助于进行后续的分析和可视化。

以下是一个示例,演示了如何使用.divide(10000)方法对Sentinel-2影像进行归一化处理:

函数应用

var dataset_sentinel2=ee.ImageCollection("COPERNICUS/S2_SR").filterDate('2019-01-01','2019-12-31').filterBounds(wuhan)//.filterMetadata('CLOUDY_PIXEL_PERCENTAGE',"less_than",20).map(maskS2clouds)

.map(maskS2clouds):对满足条件的影像集合中的每张影像应用了名为 maskS2clouds 的函数,该函数用于去除 Sentinel-2 数据中的云和云雾。

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

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

相关文章

lambda有先后顺序

点击 QRadioButton 后 QLineEdit 收不到 textChanged 信号。 connect(radioButton, &QRadioButton::clicked, []{lineEdit->textChanged(""); });connect(lineEdit, &QLineEdit::textChanged, [](){... });QLineEdit 先 connect textCha…

基于Kronig-Penney能带模型的MATLAB求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Kronig-Penney能带模型的MATLAB求解与仿真.综合利用 MATLAB提供的求解常微分方程、矩阵行列式、代数表达式化简及绘图等函数 ,可使 Kronig-Penney能带模型分析…

c语言,大宗撮合交易中心系统核心模块代码

撮合交易系统&#xff08;Matching System&#xff09;常用于大宗交易&#xff0c;如股票、期货等市场&#xff0c;它负责根据买卖双方的报价和数量&#xff0c;自动撮合成交。撮合系统的核心模块通常包括订单管理、价格计算和撮合逻辑等部分。 由于撮合系统的实现复杂且依赖于…

R语言更新版本

目录 一、更新R语言 1、安装最新的R语言版本 2、移动之前安装的packages 3、将Rstudio连接到最新的R语言 二、Rstudio更新 一、更新R语言 1、安装最新的R语言版本 查看当前R语言版本&#xff1a; R.version.string 下载最新的R语言安装包&#xff1a;R: The R Project…

C++面试题和笔试题(二)

1.什么是C中的RAII&#xff1f; RAII&#xff0c;全称Resource Acquisition Is Initialization&#xff0c;是C中的一种编程技巧。其核心思想是在对象的构造函数中获取资源&#xff0c;在析构函数中释放资源&#xff0c;以确保资源的正确管理。通过这种方式&#xff0c;资源的…

详解数据库、Hive以及Hadoop之间的关系

1.数据库&#xff1a; 数据库是一个用于存储和管理数据的系统。数据库管理系统&#xff08;DBMS&#xff09;是用于管理数据库的软件。数据库使用表和字段的结构来组织和存储数据。关系型数据库是最常见的数据库类型&#xff0c;使用SQL&#xff08;Structured Query Language…

文献阅读:DEA-Net:基于细节增强卷积和内容引导注意的单图像去雾

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;DEA-Net&#xff1a;基于细节增强卷积和内容引导注意的单图像去雾1、研究背景2、方法提出3、相关知识3.1、DEConv3.3、多重卷积的…

C#快速入门基础

本篇文章从最基础的C#编程开始学习&#xff0c;经过非常优秀的面向对象编程思想和方法的学习&#xff0c;为C#编程打下基础。 第 01 章 C#开发环境之VS使用和.NET平台基础 1.1 Visual Studio 开发环境 1.1.1 硬件环境 i5CPUi5CPU&#xff08;建议 4核 4线程或以上 &#xff0…

第五十四回 高太尉大兴三路兵 呼延灼摆布连环马-AI通过构建并训练CNN网络来进行飞机识别

呼延灼举荐了百胜将韩滔和天目将彭玘做先锋。 两军对战&#xff0c;韩滔和秦明斗二十回合&#xff0c;呼延灼与林冲斗在一起&#xff0c;花荣与彭玘斗在一处&#xff0c;后彭玘与一丈青扈三娘斗在一起&#xff0c;被扈三娘抓住。 尽管梁山占优&#xff0c;宋江也没有乘胜追击&…

this.$set,更新vue视图

this.$set(this.searchForm, age, 30) // 对象 this.$set(this.searchForm1, 0, { name: 汪汪, age: 11, content: 擅长口算 })// 数组

帮管客CRM jiliyu接口存在SQL漏洞 附POC软件

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 帮管客CRM简介 微信公众号搜索:南风漏洞复现文库…

PTA 以下选项中,对基本类型相同的指针变量不能进行运算的运算符是()。A. =B. ==C. +D. -

以下选项中&#xff0c;对基本类型相同的指针变量不能进行运算的运算符是&#xff08;&#xff09;。 A. B. C. D. - 答&#xff1a;C 解析&#xff1a; 选项 A &#xff1a;“&#xff08;赋值&#xff09;”是对于类型相同的两个指针变量之间常规运算。 选项 B&#xf…

LeetCode 第55天 | 583. 两个字符串的删除操作 72. 编辑距离 动态规划

583. 两个字符串的删除操作 求两个字符串的最长公共子序列&#xff0c;用两个字符串的长度减去两倍的最长公共子序列长度即为需要进行的最少次数的删除活动。 class Solution { public:int minDistance(string word1, string word2) {// 求最长公共子序列vector<vector<…

如何配置IDEA中的JavaWeb环境(2023最新版)

创建项目 中文版&#xff1a;【文件】-【新建】-【项目】 点击【新建项目】&#xff0c;改好【名称】点击【创建】 右键自己建立的项目-【添加框架支持】&#xff08;英文版是Add Framework Support...&#xff09; 勾选【Web应用程序】-【确定】 配置tomcat 点击编辑配置 点…

人民网发稿多少钱?媒介多多告诉你答案!附人民网各频道报价表

你是否也想知道在人民网发稿需要多少钱&#xff1f;媒介多多告诉你答案&#xff01;人民网是国内权威新闻平台之一&#xff0c;拥有大量忠实读者群体。想要在人民网上发稿进行推广&#xff0c;是很多企业和个人的选择。那么&#xff0c;人民网发稿到底需要多少钱呢&#xff1f;…

云计算,用价格让利换创新空间?

文 | 智能相对论 作者 | 李源 ECS&#xff08;云服务器&#xff09;最高降36%、OSS&#xff08;对象存储&#xff09;最高降55%、RDS&#xff08;云数据库&#xff09;最高降40%…… 阿里云惊人的降幅&#xff0c;一次性把国内云计算厂商的价格战推到了白热化阶段。 这次能…

魔众智能AI系统v2.1.0版本支持主流大模型(讯飞星火、文心一言、通义千问、腾讯混元、Azure、MiniMax、Gemini)

支持主流大模型&#xff08;讯飞星火、文心一言、通义千问、腾讯混元、Azure、MiniMax、Gemini&#xff09; [新功能] 系统全局消息提示 UI 全新优化 [新功能] JS 库增加【ijs】类型字符串&#xff0c;支持默认可执行代码 [新功能] 分类快捷操作工具类 CategoryUtil [新功能…

腾讯IEG前端一面凉经

你为什么选择了前端&#xff0c; 你做项目会不会注重工程&#xff0c;原理和基础会不会生疏&#xff0c; 原型和原型链(原型链箭头图)&#xff0c; 基本数据类型和引用数据类型及根本区别&#xff0c; 堆栈区别&#xff0c; 类型判断(typeof instanceof具体区别)&#xff…

接口自动化测试从入门到高级实战!

接口测试背景和必要性 接口测试是测试系统组件间接口&#xff08;API&#xff09;的一种测试&#xff0c;主要用于检测内部与外部系统、内部子系统之间的交互质量&#xff0c;其测试重点是检查数据交换、传递的准确性&#xff0c;控制和交互管理过程&#xff0c;以及系统间相互…