GEE去云处理代码段解读(位运算)

2024-02-11 01:10

本文主要是介绍GEE去云处理代码段解读(位运算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、QA波段介绍
  • 二、去云代码段解读


前言

在很多gee的影像方去云教程中,我们常看到位运算的代码,我们多数不太理解位运算的真正含义而直接使用,故在此学习并解读去云处理的位运算代码(以landsat8的QA波段为例)


一、QA波段介绍

本次使用的数据集
"LANDSAT/LC08/C01/T1_SR"
用户指南官方文档地址:
https://www.usgs.gov/media/files/landsat-8-collection-1-land-surface-reflectance-code-product-guide
QA波段是数据质量评估波段的简称,该图像每个像元中存储的值显示为十进制,但是这个十进制数值得转换成二进制数值才有实际意义,二进制数值的不同的比特位有着不同的含义。
在这里插入图片描述
对于单比特位:0值代表不存在某种条件,即逻辑“非”,1值代表条件存在,即逻辑“是”。对于双比特位,表示某条件存在的可能性:“00”表示不存在该条件;“01”表示该条件存在的可能性为0-33%;“10”表示该条件存在的可能性为34%-66%;“11”表示该条件存在的可能性为67-100%。

  • 将十进制的数值32用qa波段的排列规则化为二进制样式显示如下
    在这里插入图片描述

二、去云代码段解读

代码如下(示例):

function maskL8srClouds(image) {// Bits 3 and 5 are cloud shadow and cloud, respectively.var cloudShadowBitMask = (1 << 3);var cloudsBitMask = (1 << 5);// Get the pixel QA band.var qa = image.select('pixel_qa');// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0).and(qa.bitwiseAnd(cloudsBitMask).eq(0));return image.updateMask(mask);
}

解读代码
1<<3 代表 ‘0000 0000 0000 1000’
1<<5 代表 ‘0000 0000 0010 0000’

  1. image.select(‘pixel_qa’)代表选取影像集的qa波段

  2. bitwiseAnd()函数,是按位进行“与”运算,如qa.bitwiseAnd(cloudShadowBitMask)就是qa波段的每个像元值的二进制序列与括号内的二进制序列进行逐位“与”运算
    (两个序列对应的bit位都为1,该比特位的结果才为1)
    示例如下:
    取10与6两个数字(十进制),它们转化为二进制后分别为1010与0110,对其进行按位“与”,得到的结果为0010
    而landsat8的QA波段十进制像元值是以16位二进制记录的,以bit5的位置为例,若bit5的位置为‘1’,则此像元有云,该像元的16位二进制应为‘xxxx xxxx xx1x xxxx’的样式(x代表0或1),再进行bitwiseAnd(1<<5)的函数运算,即将此像元的16位二进制‘xxxx xxxx xx1x xxxx’与 ‘0000 0000 0010 0000’ 进行“与”运算,得到的十进制结果为非零数值;
    当然如果此像元的bit5位置为0,即无云像元(二进制序列‘xxxx xxxx xx0x xxxx’),再进行bitwiseAnd(1<<5)的函数运算,得到的结果为‘0000 0000 0000 0000’,此时十进制为零;
    综合上述步骤,我们得到了云的掩膜数据(有云的像元为非零值,无云的像元为零值)。

  3. 接着进行eq()函数计算,当括号内参数为0时,即.eq(0)是将影像中等于0的像元值变为1,其它非零像元值变为0,相当于反转得到了去云的掩膜数据。

  4. 最后调用updateMask()函数,括号内加载第三步的去云掩膜数据,即可将影像更新为去云后的影像数据。

这篇关于GEE去云处理代码段解读(位运算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/698466

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi