如何屏蔽 LANDSAT/LE07/C01/T1_TOA 的阴影?

How to mask out shadows from LANDSAT/LE07/C01/T1_TOA?

我想在 google earth engine 中使用 LANDSAT/LE07/C01/T1_TOA 集合,我正在努力理解这些位是如何工作的,以便用云和阴影掩盖区域。好不容易写了下面的,但是自己不是很自信,不知道怎么遮掉阴影。

var dataset = ee.ImageCollection('LANDSAT/LE07/C01/T1_TOA')
 .filterBounds(geometry)
    .map(function(image){return image.clip(geometry)})
    .filter(ee.Filter.calendarRange(6,8,'month'))
      .filterDate('1999-05-01','2017-09-30');

var qas = function(image) {
  var qa = image.select('BQA');
  var mask = qa.eq(672);
  return image.updateMask(mask).copyProperties(image);
}
var merged = dataset.map(qas);


var addNDVI = function(image) {
  var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI');
  return image.addBands(ndvi);
};

var ndvi = merged.map(addNDVI);

如何正确地使用位进行质量屏蔽?

Try It


var cloudMaskL7 = function(image) {
  var qa = image.select('BQA');
  var cloud = qa.bitwiseAnd(1 << 4)
                  .and(qa.bitwiseAnd(1 << 6))
                  .or(qa.bitwiseAnd(1 << 8));
  var mask2 = image.mask().reduce(ee.Reducer.min());
  return image
       .select(['B3', 'B4'], ['Red', 'NIR'])
       .updateMask(cloud.not()).updateMask(mask2)
       .set('system:time_start', image.get('system:time_start'));
};


var dataset = ee.ImageCollection("LANDSAT/LE07/C01/T1_TOA")
                            .filterBounds(geometry)
                            .filterDate('2012-05-01','2017-09-30')
                            .map(cloudMaskL7)

var NDVIofLANDSAT = function(image) {
  var ndvi = image.normalizedDifference(['NIR', 'Red']).rename('NDVI');
  return image.addBands(ndvi);
};

var ndviCollection = dataset
                     .map(NDVIofLANDSAT)
                     .select("NDVI");
print("Total no of LANDSAT Images ", ndviCollection);
Map.addLayer (ndviCollection.first().select('NDVI').clip(geometry),  {min:0, max:1,  'palette': ['red','yellow', 'green']}, 'NDVI')