[GIS] ImageCollection (Error) User memory limit exceeded

google-earth-engine

i get the following Error when running the code: ImageCollection (Error) User memory limit exceeded.

I want to calculate the difference between two images in an image Collection.
Can anybody help me?
Here is my code:

// Load Sentinel-2 TOA reflectance data.
var Sentinel2 = ee.ImageCollection('COPERNICUS/S2')
              .filterDate('2018-01-01', '2018-12-31')
              // Pre-filter to get less cloudy granules.
              .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
              .map(maskS2clouds)
              .filterBounds(Greece);

function addNBR(image) {
// Compute the Normalized Difference Vegetation Index (NDVI).
var nir = image.select('B8A');
var swir = image.select('B12');
var nbr = nir.subtract(swir).divide(nir.add(swir)).rename('NBR');
return image.addBands(nbr)
}
var Sentinel2_collection = Sentinel2.map(addNBR)

print ('Sentinel2_collection: ', Sentinel2_collection)

var NBR = Sentinel2_collection.select('NBR').sort('system:time_start');

print ('NBR is ', NBR)

var NBRlist = ee.List(NBR.aggregate_array('system:time_start'))
print ('NBRlist ', NBRlist)

var NBRdiff = ee.ImageCollection.fromImages(NBRlist.map(function(date){

  // get the image corresponding to the date
  var currentImage = NBR.filter(ee.Filter.eq('system:time_start',    date)).first();

 // Now we have to get the 'previous' image in the collection
  var indexCurrent = NBRlist.indexOf(date);
  var indexPrevious = indexCurrent.subtract(1);
  var datePrevious = NBRlist.get(indexPrevious);
  var previousImage = NBR.filter(ee.Filter.eq('system:time_start',    datePrevious)).first();

  // Subtract the current image from the previous
  var diffImage = currentImage.subtract(previousImage).select(['NBR'], ['NBRdiff']);

 // return the image
  return currentImage.addBands(diffImage)
        .set('system:index_previous', previousImage.get('system:index'));
}));

// print and add to the map
print('Difference Image Collection', NBRdiff);

Best Answer

use tileScale in reduceRegion() method to counter this error. Setting a tile scale to parallelize the computation so overcoming memory exceed error.