去云算法是进行数据处理中所要进行一步重要操作,Sentinal-2数据中已经提供了去云算法,但是Landsat Collection2系列数据中并没有提供去云算法,下面就以Landsat 8 Collection2为例进行介绍。
import ee
import geemap
ee.Initialize()
Map = geemap.Map()
Map
Map = geemap.Map()
# Landsat-8 Collection2 去云算法
def rmL8CloudNew(image):
#根据'QA_PIXEL'波段,如果设置了云位(3)并且云阴影位(4)较高,则认为它是坏像素。
cloudShadowBitMask = (1 << 4)
cloudsBitMask = (1 << 3)
qa = image.select('QA_PIXEL')
mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0) \
.And(qa.bitwiseAnd(cloudsBitMask).eq(0))
return image.updateMask(mask) \
.copyProperties(image) \
.copyProperties(image, ["system:time_start"])
# 应用缩放因子
def apply_scale_factors(image):
optical_bands = image.select('SR_B.').multiply(0.0000275).add(-0.2)
thermal_bands = image.select('ST_B.*').multiply(0.00341802).add(149.0)
return image.addBands(optical_bands, None, True).addBands(
thermal_bands, None, True
)
centroid = ee.Geometry.Point([-122.4439, 37.7538]) #创建一个点坐标
collection = (
ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') #Landsat 8数据
.filterDate('2021-08-01', '2021-09-01') #时间
.filterBounds(centroid) #筛选经过点的数据
.filter(ee.Filter.gt('CLOUD_COVER', 20)) #获取一幅云量较多的数据
.map(rmL8CloudNew) #进行map去云
.map(apply_scale_factors) #应用缩放因子
)
image = collection.first() #选择第一景数据
vis = {
'bands': ['SR_B4', 'SR_B3', 'SR_B2'],
'min': 0.0,
'max': 0.3,
}#设置可视化参数
Map.centerObject(image, 8) #设置中心
Map.addLayer(image, vis, 'Landsat-8')
Map
未进行去云之前
去云之后的结果,其结果基本就是将云像素给去掉。
大家如果有问题需要交流或者有项目需要合作,可以加Q Q :504156006详聊,加好友请留言“CSDN”,谢谢。