如何在Google Earth Engine中去除Landsat 1影像云覆盖并制作合成影像
Landsat 1月度无云合成/镶嵌问题
我刚接触Google Earth Engine(仅用过网页代码编辑器),对JavaScript比较陌生(正在学习)。现在想用GEE计算Landsat 1影像的月度合成值,要求目标区域影像无云覆盖。了解到ee.Algorithms.Landsat.simpleCloudScore(...)对Landsat 1无效,但影像属性表有CLOUD_COVER变量,想问能不能通过这个属性筛选云覆盖占比<20%的影像?
我的最终目标是生成指定时间段内相对无云的镶嵌影像,以下是用R语言rgee包写的示例代码:
library(rgee) library(sf) ee_Initialize() # ROI --------------------------------------------------------------------- rlist=list(xmin=-81.4,xmax=-81.0,ymin=25.8,ymax=25.95) ROI <- c(rlist$xmin, rlist$ymin, rlist$xmax, rlist$ymin, rlist$xmax, rlist$ymax, rlist$xmin, rlist$ymax, rlist$xmin, rlist$ymin) ee_ROI <- matrix(ROI, ncol = 2, byrow = TRUE) |> list() |> st_polygon() |> st_sfc() |> st_set_crs(4326) |> sf_as_ee() # Image Collection - Oct 1974 ---------------------------------------------- collection <- ee$ImageCollection('LANDSAT/LM01/C02/T2')$ filterDate('1974-10-01', '1974-10-31')$ filter(ee$Filter$lt("CLOUD_COVER",20)) ## composite and clip ------------------------------------------------------ composite <- collection$mean() composite_clip=composite$clip(ee_ROI) ## display image ----------------------------------------------------------- Map$setCenter(lon = -81.23789, lat = 25.875944) Map$setZoom(zoom = 12) Map$addLayer( eeObject = composite_clip, visParams = list(bands = c("B6", "B4", "B5"),gamma=1.1), name = "max value composite" )
我试过用ee$Filter$gte("CLOUD_COVER",50)做测试,发现生成的合成影像和之前几乎没差异。另外想请教,collection$mean()是否适合用来做指定时间段内ImageCollection的合成或镶嵌?
更新
我已经找到问题所在:之前的思路是对的,但因为阈值和时间段选择的问题,影像没有出现明显变化。后来我改用filterMetadata('CLOUD_COVER_LAND','less_than',1)进行筛选,还通过rgee的ee_table_to_drive(...)导出元数据做了验证。
另外,我之前可能混淆了mosaic(镶嵌)和composite(合成)的概念,现在整理了自己的理解:
- Mosaic(镶嵌):把多幅影像拼接在一起,重叠区域可以指定融合处理函数,比如R语言中的
raster::mosaic(...)需要指定重叠区域像元值的计算规则。 - Composite(合成):将多层影像栈生成单幅影像,和镶嵌类似但有区别,部分方法可以通用,这也是我之前混淆的原因。
内容的提问来源于stack exchange,提问作者Paul Julian
相关产品推荐
相关产品推荐

