GEE调用Sentinel-2 MSI L2A数据集 示例代码解析笔记

代码来源:https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR_HARMONIZED#description

1|0讲解一下GEE示例

/** * Function to mask clouds using the Sentinel-2 QA band * @param {ee.Image} image Sentinel-2 image * @return {ee.Image} cloud masked Sentinel-2 image */ 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); } var dataset = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED') .filterDate('2020-01-01', '2020-01-30') // Pre-filter to get less cloudy granules. .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10)) .map(maskS2clouds); var visualization = { min: 0.0, max: 0.3, bands: ['B4', 'B3', 'B2'], }; Map.setCenter(83.277, 17.7009, 12); Map.addLayer(dataset.mean(), visualization, 'RGB');

QA60是Sentinel-2影像中的一种质量控制波段,用于记录每个像素点的质量信息。具体来说,QA60波段记录了每个像素的60个质量控制位,每个位代表了一个特定的质量标志,如云、阴影、雪等。其中,第10位是云,第11位是卷云。

因此这段代码前半部分构造了一个 maskS2clouds() 的函数,根据对应位的数值构造掩膜。

var mask = qa.bitwiseAnd(cloudBitMask).eq(0) .and(qa.bitwiseAnd(cirrusBitMask).eq(0));

这段代码表示,如果这个像素没受 影响,也没受 卷云 影响,那么就为这个像素构造掩膜

return image.updateMask(mask).divide(10000);

image.updateMask() 这个函数将image中所有mask值为1的像素保留,然后又将每个像素的DN值归一化 (Sentinel-2 的DN值范围:0-10000)

后续代码就是将对应时间内,云量少于20%的影像进行掩膜处理,并平均的覆盖地图上的每一个位置。

如果想看不进行掩膜去云处理的图像进行对比,可以运行以下代码:

/** * Function to mask clouds using the Sentinel-2 QA band * @param {ee.Image} image Sentinel-2 image * @return {ee.Image} cloud masked Sentinel-2 image */ 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); } var dataset = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED') .filterDate('2020-01-01', '2020-01-30') // Pre-filter to get less cloudy granules. .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10)) //可以把“10”改大一点,更明显 // .map(maskS2clouds); var visualization = { min: 0, max: 10000, bands: ['B4', 'B3', 'B2'], }; Map.setCenter(83.277, 17.7009, 12); Map.addLayer(dataset.mean(), visualization, 'RGB');

__EOF__

本文作者IronRoc
本文链接https://www.cnblogs.com/IronRocGIS/p/18159053.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   IronRoc  阅读(326)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

微信打赏