GEE 按月份处理遥感数据特征变量(各月份NDVI均值合成,含完整代码链接)

文章介绍了如何使用GoogleEarthEngine(GEE)对Sentinel-2遥感数据进行去云处理和计算NDVI等特征,然后按月份提取并合成月均值,以减少异常值影响并展现数据变化趋势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按月份提取遥感数据特征,可以比较好地反映数据的变化趋势,同时又由于数据缺失、成像质量等因素,每个月份的可用数据量可能比较小,那么合成得到的数据结果仍有可能具有一些异常值,而多年的数据,不考虑年份,只按照所属月份进行提取合成,可以较好地解决这一问题。
这里以Sentinel-2数据为例。
首先加载Sentinel-2数据,后面会对数据进行去云,因此在对数据筛选的时候,没有对影像含云量进行过滤。

//哨兵2 光学数据集
var dataset_s2 = ee.ImageCollection('COPERNICUS/S2')
    .filterBounds(roi_cm).filter(ee.Filter.date(startDate, endDate))
    .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 100))

Sentinel-2影像去云函数。QA60波段按位存储像元含云量信息,根据该波段可去掉有云像元。

//  /*---------------去云函数---------------*\

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影像添加变量波段函数。根据研究需要,对数据添加计算得到的NDVI等特征。

var addVariables = function(image) {
   return image
    // Add an NDVI band.
    .addBands(image.normalizedDifference(['B8', 'B4']).rename('NDVI')).float()
    // //Add an NDBI band.
    .addBands(image.normalizedDifference(['B6', 'B4']).rename('NDBI')).float()
  //Add an MNDWI band.
    .addBands(image.normalizedDifference(['B3', 'B8']).rename('MNDWI')).float()
  

     
};

Sentinel-2数据调用去云函数与添加变量波段函数,先去云再计算特征变量。

var imgCol_s2=dataset_s2.map(rmCloudByQA).map(addVariables);

以NDVI特征为例,进行按月均值合成。

var NDVI=imgCol_s2.select('NDVI');
  var MonthlyDataCol = NDVI.filter(ee.Filter.calendarRange(1,  1,'month'))
  .mean().rename('NDVI1');
var MonthlyDataColNDVI=MonthlyDataCol;

  for(var j=2;j<=12;j++){
    var data_collection = NDVI.filter(ee.Filter.calendarRange(j,  j,'month')).mean().clip(roi_cm);   
    
    var StringBandName='NDVI'+j.toString();
    var monthlydata=data_collection.select('NDVI').rename(StringBandName);
  
    MonthlyDataColNDVI=ee.Image.cat([MonthlyDataColNDVI,monthlydata.select(StringBandName)]);

  
  
  }
  print(MonthlyDataColNDVI.getInfo());

这里比较关键的是用到了ee.Filter.calender(start,end,field)函数,函数解释如下,根据field对时间进行筛选,如果field为’month’,就是按照起止月份筛选,想要筛选一月份的数据,就是ee.Filter.calender(1,1,‘month’),添加循环自动计算一月份、二月份…十二月份的数据,提取数据后按照需求进行均值、最值等不同处理方式合成即可。
在这里插入图片描述完整代码链接:GEE-各月份NDVI均值合成
https://code.earthengine.google.com/24b69d45a2df14c6915ad231cd6c4336

RSEI(Relative Spatial Entropy Index)是一种常用的空间异质性指标,用于评估地理空间数据中的变化程度。在JavaScript库如Google Earth Engine (GEE) 中,你可以使用遥感数据和一些数学运算来计算RSEI。以下是简单的步骤: 1. **导入必要的库**: ```javascript // 导入GEE库 var ee = require('@google/earthengine'); ``` 2. **获取遥感数据**: - 选择你需要分析的时间序列数据,例如NDVI (Normalized Difference Vegetation Index) 或者其他适合度变量。 ```javascript var dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') .filterDate('2015-01-01', '2016-12-31') // 时间范围 .select(['B5', 'B4']); // 通常NDVI基于近红外(NIR) 和红波段(RGB) ``` 3. **计算NDVI**: ```javascript var ndvi = dataset.normalizedDifference(['B5', 'B4']); ``` 4. **准备参考图像**: 可能需要先计算一段时间内的平均值作为参考。 ```javascript var meanNdvi = ndvi.mean(); ``` 5. **计算RSEI**: - 计算每个像素相对于平均值的变化率,然后取对数以减少极值的影响。 ```javascript var changeRate = ndvi.subtract(meanNdvi).log(); ``` 6. **计算熵**: 使用几何熵(geometric entropy),它反映的是数据分布的离散程度。 ```javascript var entropy = changeRate.reduceRegion({ reducer: ee.Reducer.entropy(), geometry: meanNdvi.geometry(), scale: 30, // 根据需求调整分辨率 bestEffort: true, maxPixels: 1e9 }); ``` 7. **计算RSEI**: RSEI通常是熵减去均值再除以标准差,表示变异程度。 ```javascript var rsei = (entropy.get('entropy') - meanEntropy) / standardDeviation; ``` 注意:以上代码示例是简化版,实际操作可能需要处理数据处理、异常值、以及更复杂的区域选择等。上述步骤会返回一个地理编码结果,你可以进一步处理这个结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值