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

相关文章

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4