云覆盖的遥感图像会对地物提取和分类的准确性产生很大影响。云遮挡地表信息,使得地物的边界模糊,或者在分类器中被误分类为其他类别。通过去除云,可以更好地显示地表地物的特征和细节,提高地物提取和分类的准确性。Google earth engine使用Fmask算法进行去云,不同遥感数据去云代码也不同,具体代码如下。
1.Sentinel-2哨兵数据去云(使用QA60波段)
Sentinel-2哨兵数据去云主要操作是按位与运算bitwiseAnd() 筛选像元,QA60波段不同位数表示含义不同,10和11代表云层:
Bit 10: Opaque clouds
0: No opaque clouds 透明云层
1: Opaque clouds present 不透明云层
Bit 11: Cirrus clouds
0: No cirrus clouds 没有卷云
1: Cirrus clouds present
//Q60A波段去云
function rmCloudByQA(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);
}
//定义sentinel-2影像数据集
var sentinel2=ee.ImageCollection("COPERNICUS/S2_SR").filterDate("2020-1-1", "2021-1-1").filterBounds(geometry);
//s2去云
var s2_nocloud=sentinel2.map(rmCloudByQA)
2.Landsat系列数据(使用pixel_qa,包括Landsat5、Landsat7、Landsat8)
Landsat数据则是通过pixel_qa来去云的
//landsat去云代码
function rmCloud(image) {
var cloudShadowBitMask = (1 << 3);
var cloudsBitMask = (1 << 5);
var qa = image.select("pixel_qa");
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
.and(qa.bitwiseAnd(cloudsBitMask).eq(0))
return image.updateMask(mask);
}
//加载Landsat数据
var LE7=ee.ImageCollection("LANDSAT/LE07/C01/T1_SR");
//此外还可加载L5\L8,代码如下,但需注意L8的波段组合不同于L5和L7:
//var LC8=ee.ImageCollection("LANDSAT/LC08/C01/T1_SR");
//var LT5=ee.ImageCollection("LANDSAT/LT05/C01/T1_SR");
//使用去云函数
var Ls_nocloud=LE7.map(rmCloud)
此外,还有其他去云算法如sentinel-2的s2cloudless算法,但上述方法最为常用,去云效果较好。