GEE处理遥感空值(nodata)的方法

GEE在进行掩膜以后,难免会出现空值(nodata),如果不进行处理就会影响后续的空间分析与数理统计。本文基于Sentinel-2和Sentinel-3提出一种线性回归插值处理操作。操作简单,只需几行代码。代码分析如下:

varS2=ee.ImageCollection("COPERNICUS/S2_SR"),    
S3=ee.ImageCollection("COPERNICUS/S3/OLCI"),    
roi=ee.FeatureCollection("users/cdut/daying"),    
point= eometry.Point([105.2435311900359, 30.630392078811834]),
S2_Cloud=ee.ImageCollection("COPERNICUS/S2_CLOUD_PROBABILITY");
// 建立去云函数 
function CloudProbability(img,thread){
  var prob = img.select('probability')
  return img.updateMask(prob.lte(thread))
}
 var startDay = '2020-11-5'
 var endDay = '2020-11-12'
 var cloudMask = S2_Cloud
                          .filterDate(startDay,endDay)
                          .filterBounds(point)
                          .map(function (image){
                            return CloudProbability(image, 30);
                          })
                          .first()
  var S2_ndvi = S2
                     .filterDate(startDay,endDay)
                     .filterBounds(point)
                    .sort('CLOUDY_PIXEL_PERCENTAGE')
                    .map(function(img){
                      return img.normalizedDifference(['B8','B4'])
                    })
                     .first()
                    .updateMask(cloudMask)
                    .rename('S2_ndvi')
print(S2_ndvi,'S2_ndvi')
var S2_mean = S2_ndvi.reduceRegion({reducer:ee.Reducer.mean(),geometry:roi.geometry()})
print(S2_mean,'S2_mean')
  var S3_ndvi = S3
                    .filterDate(startDay,endDay)
                    .filterBounds(point)
                    .map(function(img){
                      return img.normalizedDifference(['Oa17_radiance','Oa08_radiance'])
                    })
                    .max()
                    // .updateMask(cloudMask)
                    .rename('S3_ndvi')
var S3_mean = S3_ndvi.reduceRegion({reducer:ee.Reducer.mean(),geometry:roi.geometry(),crs:'EPSG:32648',scale:300,maxPixels:1e13})
print(S3_mean,'S3_mean')
var scale = ee.Image.constant(S2_mean.get('S2_ndvi')).divide(ee.Image.constant(S3_mean.get('S3_ndvi')))
print(scale)
var S3_ndvi_scale = S3_ndvi.multiply(scale)
var newimg1 = S2_ndvi.unmask(S3_ndvi)
var newimg2 = S2_ndvi.unmask(S3_ndvi_scale)
Map.addLayer(S2_ndvi,{min:0,max:1},'S2_ndvi')
Map.addLayer(S3_ndvi,{min:0,max:1},'S3_ndvi')
Map.addLayer(newimg1,{min:0,max:1},'newimg1')
Map.addLayer(newimg2,{min:0,max:1},'newimg2')

结果显示:
1)原始影像ndvi去云后:
GEE处理遥感空值(nodata)的方法_第1张图片
2)利用同时期的Sentinel-3影像ndvi插值以后:
GEE处理遥感空值(nodata)的方法_第2张图片
3)利用拉伸后的Sentinel-3影像ndvi插值以后:
GEE处理遥感空值(nodata)的方法_第3张图片
结果分析:
不同类型传感器的遥感影像存在系统差异,如果直接填充,容易形成团块状误差(图2),拉伸后可以减轻这种影响(图3)。当然,拉伸处理只是最简单的处理方式之一,想要更多关于遥感数据填充、融合的算法吗?

关注我们
微信公众号:GEE遥感训练营
专注GEE遥感算法,包括遥感影像下载、遥感影像制图、遥感GIS空间分析、遥感生态评价、遥感影像融合、去干扰等多元遥感云计算,并分享前沿GEE知识。

你可能感兴趣的:(GEE,遥感,大数据)