0

Hi I'm new to google earth engine so I am struggling with a (probably) quite basic error.

Here is my code - the issue is with the Sunglint Corrected layer.

I'm trying to correct sentinel-2 images for Sunglint so that I can remote sense seagrass.

I think the issue is something to do with incorrect scaling, although I'm very unsure how to fix this. Plz help!

var dataset = ee.ImageCollection('COPERNICUS/S2_SR')
                  .filterDate('2021-05-01', '2021-09-30')
                  
                  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
                  .filterBounds(roi)
                  
                  
                  .select(['B2','B3','B4','B1', 'B8']);
                      
var rgbVis = {
 min: 0.0,
 max: 1000,
 bands: ['B3', 'B2', 'B4'],
};

Map.addLayer(dataset, rgbVis, 'Filtered Collection'); 
var mosaic = dataset.mosaic();


var medianComposite = dataset.min(); 
Map.addLayer(medianComposite, rgbVis, 'Median Composite', 0);

var hansenImage = ee.Image('UMD/hansen/global_forest_change_2015');
var datamask = hansenImage.select('datamask');
var mask = datamask.eq(2);
var maskedComposite = medianComposite.updateMask(mask);
Map.addLayer(maskedComposite, rgbVis, 'masked');

Map.addLayer(maskedComposite, {
  bands: ['B4', 'B3', 'B2',],
  min: 0,
  max: 1000
}, 'BOA'); 

var B2 = maskedComposite.select(['B8', 'B2']);
var B3 = maskedComposite.select(['B8', 'B3']);
var B4 = maskedComposite.select(['B8', 'B4']);

var lfitB2 = B2.reduceRegion({
  reducer: ee.Reducer.linearFit(),
  geometry: glint,
  scale: 10,
  //maxPixels: 1000,
  //bestEffort: true
});

var lfitB3 = B3.reduceRegion({
  reducer: ee.Reducer.linearFit(),
  geometry: glint,
  scale: 10,
});

var lfitB4 = B4.reduceRegion({
  reducer: ee.Reducer.linearFit(),
  geometry: glint,
  scale: 10,
});

//print('B2 OLS estimates:', lfitB2);
//print('B2 y-intercept:', lfitB2.get('offset'));
//print('B2 Slope:', lfitB2.get('scale'));
//print('B3 Slope:', lfitB3.get('scale'));
//print('B4 Slope:', lfitB4.get('scale'));

var slope_B2 = ee.Image.constant(lfitB2.get('scale')).clip(roi).rename('slope_B2');
var slope_B3 = ee.Image.constant(lfitB3.get('scale')).clip(roi).rename('slope_B3');
var slope_B4 = ee.Image.constant(lfitB4.get('scale')).clip(roi).rename('slope_B4');
var min_B8 = ee.Image.constant(maskedComposite.select('B8').reduceRegion(ee.Reducer.min(),roi, 3).get('B8')).rename('min_B8');

var glint_factors = ee.Image([slope_B2, slope_B3, slope_B4, min_B8]);
var S2 = maskedComposite.addBands(glint_factors);

/*var deglint_B2 = S2.select('B8').subtract(min_B8);
var deglint_B2 = slope_B2.multiply(deglint_B2);
var deglint_B2 = S2.select('B2').subtract(deglint_B2);
Map.addLayer(deglint_B2);*/

var deglint_B2 = S2.expression(
    'Blue - (Slope * (NIR - MinNIR))', {
    'Blue': S2.select('B2'),
    'NIR': S2.select('B8'),
    'MinNIR': S2.select('min_B8'),
    'Slope': S2.select('slope_B2')
}).rename('B2');

var deglint_B3 = S2.expression(
    'Green - (Slope * (NIR - MinNIR))', {
    'Green': S2.select('B3'),
    'NIR': S2.select('B8'),
    'MinNIR': S2.select('min_B8'),
    'Slope': S2.select('slope_B3')
}).rename('B3');

var deglint_B4 = S2.expression(
    'Red - (Slope * (NIR - MinNIR))', {
    'Red': S2.select('B4'),
    'NIR': S2.select('B8'),
    'MinNIR': S2.select('min_B8'),
    'Slope': S2.select('slope_B4')
}).rename('B4');

var S2_deglint = ee.Image([deglint_B2, deglint_B3, deglint_B4]);

 

Map.addLayer(S2_deglint, {
  bands: ['B4', 'B3', 'B2'],
  min: 0.0,
  max: 0.2
}, 'Sunglint Corrected');

 var linkedMap = ui.Map();

0 Answers0