GEE中的位运算

Bore·2022-11-08 21:56·256 次阅读

GEE中的位运算

本文参考:Working with QA Bands and Bitmasks in Google Earth Engine
下面书写的是我个人的理解,若有不对的地方,恳请您不吝赐教!

了解过MODIS产品数据后发现,它有一个QA波段用来标记其他波段的质量情况。下面用比较常用的MOD13Q1[波段信息]举例:两个QA波段,SummaryQA和DetailedQA。从BitMask详细信息中可以看出,DetailedQA是16-bits的数据类型,表示它的取值范围为[0,2161],即在0到65535之间。而从DetailQA到BitMask,可以看下面这个流程图。

所以,想要获得质量较高的NDVI图像,需要满足'SummaryQA' bit0-1为0 or 'DetailQA'bit0-1为0 or ('DetailQA'bit0-1为1 and 'DetailQA'bit2-5为0)

MOD13Q1波段信息
bitmask for SummaryQA

bitmask for DetailedQA 
Copy
function bitwiseExtract(value, fromBit, toBit) { if (toBit === undefined) toBit = fromBit var maskSize = ee.Number(1).add(toBit).subtract(fromBit) var mask = ee.Number(1).leftShift(maskSize).subtract(1) return value.rightShift(fromBit).bitwiseAnd(mask) } var modisQA_mask = function(image) { var sqa = image.select('SummaryQA'); var dqa = image.select('DetailedQA'); var viQualityFlagsS = bitwiseExtract(sqa, 0, 1); var viQualityFlagsD = bitwiseExtract(dqa, 0, 1); var viUsefulnessFlagsD = bitwiseExtract(dqa, 2, 5); var mask = viQualityFlagsS.eq(0) // Good data, use with confidence .or(viQualityFlagsD.eq(0)) // VI produced with good quality .or(viQualityFlagsD.eq(1).and(viQualityFlagsD.eq(0)));// VI produced, but check other QA & VI usefulness: Highest quality // var mask = viQualityFlagsS.eq(0) // Good data, use with confidence // .and(viQualityFlagsD.eq(0)) // VI produced with good quality return image.updateMask(mask); };

另一个是采用按位与的运算,参见官方给出的Landsat去云代码

参考说明见:GEE|Google Earth Engine中的位运算 - Weltㅤ - 博客园 (cnblogs.com)

关键是理解这句话:第二步中,只有'XXXX XXXX XXX0 0000'(X代表0或1)这样的像素,在进行按位与运算后的结果为0,最终的结果为1。

而bit0-4全是0,对应属性表格。

posted @   coliaxu  阅读(256)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示