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

相关文章

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Redis如何使用zset处理排行榜和计数问题

《Redis如何使用zset处理排行榜和计数问题》Redis的ZSET数据结构非常适合处理排行榜和计数问题,它可以在高并发的点赞业务中高效地管理点赞的排名,并且由于ZSET的排序特性,可以轻松实现根据... 目录Redis使用zset处理排行榜和计数业务逻辑ZSET 数据结构优化高并发的点赞操作ZSET 结

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过