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();