此前小编分享了以前的Landsat去云方法,由于GEE平台对数据有所更新,我们用全新数据再做一次去云处理。今天就不一一对代码进行解释,想要理解原理的朋友可以阅读小编的上一篇博客。
话不多说,直接上代码:
A.TOA数据
去云代码:
//定义研究区域
var roi = ee.Geometry.Polygon([[[114.60501460813856,25.432854344138594],
[115.05545406126356,25.432854344138594],
[115.05545406126356,25.735083087312486],
[114.60501460813856,25.735083087312486],
[114.60501460813856,25.432854344138594] ]]);
Map.centerObject(roi,7);
//影像访问和调用
var collection = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA")
.filterDate("2020-01-01","2020-01-31").filterBounds(roi);
print(collection);
//生成影像列表
var list = collection.toList(collection.size());
var firstImage = ee.Image(list.get(0));
var secondImage = ee.Image(list.get(1));
var ThirdImage = ee.Image(list.get(2));
var visParams = {
min:0.0,
max:0.4,
bands:["B4","B3","B2"]
};
Map.addLayer(firstImage,visParams,"FirstImage");
Map.addLayer(secondImage,visParams,"secondImage");
Map.addLayer(ThirdImage,visParams,"ThirdImage");
//定义去云掩膜函数
function Mask(image){
var mask = image.select("cloud").lte(30);
return image.updateMask(mask);
};
//调用去云函数和已经定义好的云掩膜函数
var C1 = ee.Algorithms.Landsat.simpleCloudScore(firstImage);
var T1 = Mask(C1);
var C2 = ee.Algorithms.Landsat.simpleCloudScore(secondImage);
var T2 = Mask(C2);
var C3 = ee.Algorithms.Landsat.simpleCloudScore(ThirdImage);
var T3 = Mask(C3);
print(T1,T2,T3);
Map.addLayer(T1,visParams,"T1");
Map.addLayer(T2,visParams,"T2");
Map.addLayer(T3,visParams,"T3");
Map.addLayer(roi,{"color":"red"},"roi");
去云前后的影像结果对比:
B.SR数据
去云代码(记得在GEE平台的数据库中查看新数据的QA质量波段信息)
//SR数据
//定义研究区域
var roi = ee.Geometry.Polygon([[[114.60501460813856,25.432854344138594],
[115.05545406126356,25.432854344138594],
[115.05545406126356,25.735083087312486],
[114.60501460813856,25.735083087312486],
[114.60501460813856,25.432854344138594] ]]);
Map.centerObject(roi,7);
//影像访问和调用
var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate('2020-01-01', '2020-01-31').filterBounds(roi);
//还原缩放
function applyScaleFactors(image) {
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true);
}
var collection = dataset.map(applyScaleFactors);
print(collection);
//生成影像列表
var list = collection.toList(collection.size());
var firstImage = ee.Image(list.get(0));
var secondImage = ee.Image(list.get(1));
var thirdImage = ee.Image(list.get(2));
//影像可视化参数设置
var visParams = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0.0,
max: 0.3,
};
Map.addLayer(firstImage,visParams,"firstImage");
Map.addLayer(secondImage,visParams,"secondImage");
Map.addLayer(thirdImage,visParams,"thirdImage");
//定义去云掩膜函数
function Mask(image){
var cloudMask = (1<<3);
var cloudshadowMask = (1<<4);
var QA = image.select("QA_PIXEL");
var mask = QA.bitwiseAnd(cloudMask).eq(0).and(QA.bitwiseAnd(cloudshadowMask).eq(0));
return image.updateMask(mask);
}
//调用已经定义好的云掩膜函数
var S1 = Mask(firstImage);
var S2 = Mask(secondImage);
var S3 = Mask(thirdImage);
print(S1,S2,S3);
Map.addLayer(S1,visParams,"S1");
Map.addLayer(S2,visParams,"S2");
Map.addLayer(S3,visParams,"S3");
Map.addLayer(roi,{"color":"red"},"roi");
去云前后结果对比:
本篇代码链接:
(1)https://code.earthengine.google.com/278e131d32ecc68c2ab5b09c3c7c9a57
(2)https://code.earthengine.google.com/2dc1d5b64138e84b051d2c1a1739a95c
关于Landsat去云处理的分享到这里就结束了,如果代码内容能够帮助到你,不要忘记了给小编点赞哦!你的支持是小编继续更新的动力,谢谢啦!咱们下期再会!