GEE(8):使用MODIS填补由去云后的Landsat影像计算得到的NDVI数据

最近想要在GEE中使用Landsat影像计算一下广州的NDVI值,发现这片区域云覆盖较多,去云以后部分月份的数据很少,就造成NDVI计算结果缺失的问题。经过查阅相关资料,可以使用MODIS的NDVI产品来填补由Landsat计算NDVI数据缺失的部分。主要用到了GEE中的.blend()函数。

.

实现代码如下:

//设置研究区
var geometry = 
    /* color: #d63000 */
    /* shown: false */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[112.38214918009086, 23.76360001525737],
          [112.38214918009086, 22.348421631032746],
          [114.09601636759086, 22.348421631032746],
          [114.09601636759086, 23.76360001525737]]], null, false);

//Landsat去云函数
function maskL8sr(image) {
  // Bits 3 and 5 are cloud shadow and cloud, respectively.
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  // Get the pixel QA band.
  var qa = image.select('pixel_qa');
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}


// 定义计算NDVI函数
var getNDVI = function(image){
var NDVI = image.normalizedDifference(['B5', 'B4']).rename('NDVI')
return image.addBands(NDVI).copyProperties(image, ["system:time_start"])
};

//由Landsat 8 计算NDVI
var l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.map(maskL8sr)
.filterBounds(geometry)
.select('B4','B5')
.map(getNDVI)
.select(['NDVI'])

//导入MODIS NDVI产品
var MOD13Q1 = ee.ImageCollection('MODIS/006/MOD13Q1').select('NDVI')
          .map(function(image){
              var img = image.multiply(0.0001);
              return img.set('system:time_start',image.get('system:time_start')) ;
           });


// 以2020年为例,计算2020年12个月NDVI最大值
var listMonths = ee.List.sequence(1,12);
var collectMonth = ee.ImageCollection(listMonths
  .map(function(month) {
  var start = ee.Date.fromYMD(2020, month, 1);
  var end = ee.Date.fromYMD(2020, month, 1).advance(1, 'month');
  var landsat = l8.filterDate(start, end).max()
  var modis = MOD13Q1.filterDate(start, end).max().reproject('EPSG:4326',null,250)
    return modis.blend(landsat)
                  .reduce(ee.Reducer.max()).float().clip(geometry)
                  .set('system:time_start',month)
                  .resample();
}));
//print (collectMonth);

var visParams = {
  bands: ['B4', 'B3', 'B2'],
  min: 0,
  max: 3000,
  gamma: 1.4,
};

var ndviVis = {
  min: 0.0,
  max: 1.0,
  palette: [
    'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
    '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
    '012E01', '011D01', '011301'
  ],
};


var dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
                  .filterDate('2020-01-01', '2020-02-01')
                  .map(maskL8sr);
var ndvil8 = dataset.map(getNDVI)
                    .select('NDVI')
                    .max()
                    .clip(geometry);
              

Map.addLayer(ndvil8,ndviVis,'landsat_NDVI'); //使用去云后Landsat数据计算得到的NDVI
Map.addLayer(ee.Image(collectMonth.toList(12).get(0)),ndviVis,'Tianbu'); //使用MODIS填补后
Map.addLayer(dataset,visParams,'OriginImage'); //原始影像

//批量展示2020年12个月的NDVI计算结果
for(var i = 0;i < 12;i++){
  var image = ee.Image(collectMonth.toList(12).get(i));
  Map.addLayer(image,ndviVis,'NDVI_'+String(i));
}


下面分别为填补前后的结果:

原始影像:

去云后的影像

去云后计算的NDVI:

去云后的NDVI

填补后的NDVI:

填补后的NDVI

小结:

这只是一种比较简单的填补方法,由于文中所选取的月份云量较大,所以填补内容较多,效果还是可以的。在实际中可以结合sentinel 数据计算NDVI来替换Landsat中云量较大的时间段。在之前也见过一种方法,是通过计算哨兵数据两个月份(比如1月和2月)之间NDVI值的比例,如果现在需要使用Landsat计算2月的NDVI,就将这个比例乘以1月的Landsat计算的NDVI,从而得到2月的NDVI值,这也是一种替换方法。大家实际计算时可以自行选择。

  • 10
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
GEE(Google Earth Engine)是一款基于计算平台的地理信息处理引擎,可以进行高效的地理数据分析和可视化。在遥感图像处理中,常常会出现遮挡的问题,也就是图像上会有一些的区域,这些区域可能会影响后续的分析和应用。 为了解决图像中的遮挡问题,可以使用线性插值方法进行去空洞的处理。线性插值是一种简单而有效的插值方法,它通过已知数据点之间的线性关系,来预测未知点的数值。 在去空洞的过程中,我们可以先找到没有的参考区域,以此作为已知数据点。然后,通过线性插值的方法,将参考区域的数值与遮挡区域的边界上的数值进行对应,从而填补洞。 具体步骤如下:首先,将图像进行分割,将遮挡区域与没有的参考区域分开。然后,找到遮挡区域与参考区域的边界,并确定插值的方向。接下来,利用遮挡区域与参考区域边界上的点,通过线性插值计算洞中的像素值。最后,将计算得到的像素值填充到遮挡区域中,完成去空洞的过程。 线性插值方法填补空洞的优点是简单而有效,能够快速高效地解决遥感图像中的遮挡问题。然而,线性插值方法也存在一些缺点,例如对于复杂的地貌或纹理变化明显的区域,线性插值可能无法准确预测未知点的数值,需要结合其他更复杂的插值方法来处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GISerQ.

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值