本文我们将介绍哨兵2数据去云分析,同样是使用QA60去云,我们这里先看一下影像
Sentinel-2号是高分辨率多光谱成像卫星,携带一枚多光谱成像仪(MSI),分为2A和2B两颗卫星,其中一颗卫星的重访周期为10天,两颗互补,重访周期为5天(纬度较高的欧洲地区,仅需3天),常用于陆地监测,可提供植被、土壤和水覆盖、内陆水路及海岸区域等图像,还可用于紧急救援服务。
Sentinel-2数据集中包含的数据为L1C级产品数据,是经正射校正和亚像元级几何精校正后的大气表观反射率产品,包含13个UINT16光谱带,3个QA频段,其中一个(QA60)是具有云掩码信息的位掩码频段。
名称 | 中心波长(nm) | 分辨率(m) | 描述信息 | |
---|---|---|---|---|
A | B | |||
B1 | 443.9 | 442.3 | 60 | Aerosols |
B2 | 496.6 | 492.1 | 10 | Blue |
B3 | 560 | 559 | 10 | Green |
B4 | 664.5 | 665 | 10 | Red |
B5 | 703.9 | 703.8 | 20 | Red Edge 1 |
B6 | 740.2 | 739.1 | 20 | Red Edge 2 |
B7 | 782.5 | 779.7 | 20 | Red Edge 3 |
B8 | 835.1 | 833 | 10 | NIR |
B8A | 864.8 | 864 | 20 | Red Edge 4 |
B9 | 945 | 943.2 | 60 | Water vapor |
B10 | 1373.5 | 1376.9 | 60 | Cirrus |
B11 | 1613.7 | 1610.4 | 20 | SWIR 1 |
B12 | 2202.4 | 2185.7 | 20 | SWIR 2 |
QA10 | 443.9 | 442.3 | 10 | -- |
QA20 | -- | -- | 20 | -- |
QA60 | -- | -- | 60 | -- |
Bitmask for QA60 | |
---|---|
|
影像属性:
id | string | 影像名称 |
date | string | 影像日期 |
cloudyPixelPercentage | double | 云量覆盖百分比 |
代码:
- var geometry0 = pie.FeatureCollection('user/xg346049806/shanxibianjie').first().geometry();
-
- /*******************1. Sentinel-2 利用cloudyPixelPercentage属性筛选含云量**************/
- var images1 = pie.ImageCollection("S2/L1C")
- .filterDate('2020-07-01', '2020-07-30')
- .filterBounds(geometry0);
- print("images1",images1)
-
- var images2 = pie.ImageCollection("S2/L1C")
- .filterDate('2020-07-01', '2020-07-30')
- .filterBounds(geometry0)
- .filter(pie.Filter.lt('cloudyPixelPercentage',5));
- print("images2",images2)
-
- //定义显示的样式
- var visParam = {
- min:0,
- max:3000,
- bands:["B4","B3","B2"]
- };
-
- //分别加载不同影像
- //添加云量2.66%的影像
- var image = pie.Image("S2/L1C/43SED_20200701")
- .select(["B4","B3","B2"]);
- Map.centerObject(image,7)
- Map.addLayer(image, visParam, "2.66%Cloud");
-
- //添加云量11.83%的影像
- var image = pie.Image("S2/L1C/43SED_20200704")
- .select(["B4","B3","B2"]);
- Map.addLayer(image, visParam, "11.83%Cloud");
-
- /**********2. Sentinel-2 利用QA波段实现去云操作***************/
- function maskS2clouds(image) {
- var qa = image.select("QA60");
- var cloudBitMask = 1 << 10;
- var cirrusBitMask = 1 << 11;
- var mask = qa
- .bitwiseAnd(cloudBitMask)
- .eq(0)
- .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
- return image.updateMask(mask);
- }
- //按数据id加载Sentinel-2 MSI单景影像
- var img = pie.Image("S2/L1C/43SED_20200704").select(["B4", "B3", "B2", "QA60"]);
- print("img", img);
- var rmCloud = maskS2clouds(img);
-
- print("rmCloud", rmCloud);
- //定位地图中心
- Map.centerObject(img, 8);
- //加载显示影像
- Map.addLayer(
- img.select(["B4", "B3", "B2"]),
- { min: 0, max: 3000 },
- "Sen-rawImage"
- );
- Map.addLayer(
- rmCloud.select(["B4", "B3", "B2"]),
- { min: 0, max: 3000 },
- "Sen-rmCloud"
- );
原始影像结果:
去云后影像结果:
影像去云:
利用算法进行去云后的结果:
- var geometry0 = pie.FeatureCollection('user/xg346049806/shanxibianjie').first().geometry();
-
- //************************3. Sentinel-2 算法去云 ******************/
- var S2Image = pie.ImageCollection("S2/L1C")
- .filterBounds(geometry0)
- .filterDate("2020-06-01","2020-06-09")
- .select(["B4", "B3", "B2", "QA60"]).mosaic().clip(geometry0);
- //计算云掩膜
- var cloudMask = pie.Algorithm.Sentinel2.cloudMask(S2Image,"Sentinel2");
- //选择2,3,4波段做掩膜运算
- var S2_rm_mask = S2Image.select(["B4","B3","B2"]).updateMask(cloudMask.not());
-
- // Sentinel2数据去云显示
- var visParam = {
- min: 0,
- max: 3000
- };
- Map.centerObject(S2Image,8)
- Map.addLayer(S2_rm_mask.select(["B4","B3","B2"]),visParam,"MaskImage");