Skip to content

Instantly share code, notes, and snippets.

@7yl4r
Last active July 25, 2025 18:04
Show Gist options
  • Save 7yl4r/9719c9017aa8e1240faf280367682e8f to your computer and use it in GitHub Desktop.
Save 7yl4r/9719c9017aa8e1240faf280367682e8f to your computer and use it in GitHub Desktop.
Deglinting for Planet Imagery in GEE
var image = ee.Image('...Image Asset Path Here...')
var sunglintRegions = geometry; // this is a geometry of sunglinted areas
// Select the bands
var NIR = image.select('b8'); // NIR
var minNIR = NIR.reduceRegion({
reducer: ee.Reducer.min(),
geometry: NIR.geometry(),
scale: 4,
maxPixels: 1e9
}).getNumber('b8'); // Extract the value directly
// //print("minNIR:", minNIR);
// Perform linear regression between NIR and each visible band using reduceRegion
var b1Regression = image.select(['b8', 'b1'])
.reduceRegion({
reducer: ee.Reducer.linearFit(),
geometry: sunglintRegions,
scale: 4,
maxPixels: 1e9
});
var b2Regression = image.select(['b8', 'b2'])
.reduceRegion({
reducer: ee.Reducer.linearFit(),
geometry: sunglintRegions,
scale: 4,
maxPixels: 1e9
});
var b3Regression = image.select(['b8', 'b3'])
.reduceRegion({
reducer: ee.Reducer.linearFit(),
geometry: sunglintRegions,
scale: 4,
maxPixels: 1e9
});
var b4Regression = image.select(['b8', 'b4'])
.reduceRegion({
reducer: ee.Reducer.linearFit(),
geometry: sunglintRegions,
scale: 4,
maxPixels: 1e9
});
var b5Regression = image.select(['b8', 'b5'])
.reduceRegion({
reducer: ee.Reducer.linearFit(),
geometry: sunglintRegions,
scale: 4,
maxPixels: 1e9
});
var b6Regression = image.select(['b8', 'b6'])
.reduceRegion({
reducer: ee.Reducer.linearFit(),
geometry: sunglintRegions,
scale: 4,
maxPixels: 1e9
});
var b7Regression = image.select(['b8', 'b7'])
.reduceRegion({
reducer: ee.Reducer.linearFit(),
geometry: sunglintRegions,
scale: 4,
maxPixels: 1e9
});
// Get the slope and intercept for each band
var slopeb1 = ee.Number(b1Regression.get('scale'));
var interceptb1 = ee.Number(b1Regression.get('offset'));
var slopeb2 = ee.Number(b2Regression.get('scale'));
var interceptb2 = ee.Number(b2Regression.get('offset'));
var slopeb3 = ee.Number(b3Regression.get('scale'));
var interceptb3 = ee.Number(b3Regression.get('offset'));
var slopeb4 = ee.Number(b4Regression.get('scale'));
var interceptb4 = ee.Number(b4Regression.get('offset'));
var slopeb5 = ee.Number(b5Regression.get('scale'));
var interceptb5 = ee.Number(b5Regression.get('offset'));
var slopeb6 = ee.Number(b6Regression.get('scale'));
var interceptb6 = ee.Number(b6Regression.get('offset'));
var slopeb7 = ee.Number(b7Regression.get('scale'));
var interceptb7 = ee.Number(b7Regression.get('offset'));
// //print('slopeb7',slopeb7,interceptb7)
// var NIRminusMinimum = image.select('b8').subtract(minNIR) ;
var NIRminusMinimum = image.select('b8').subtract(ee.Image.constant(minNIR));
//print('NIRminusMinimum',NIRminusMinimum)
// // Rb1b = Rb1a - slope * (Rb8a - min(b8)) ; // deglinting equation
var b1_deglinted = image.select('b1').subtract(ee.Image.constant(slopeb1).multiply(NIRminusMinimum)) ;
var b2_deglinted = image.select('b2').subtract(ee.Image.constant(slopeb2).multiply(NIRminusMinimum)) ;
var b3_deglinted = image.select('b3').subtract(ee.Image.constant(slopeb3).multiply(NIRminusMinimum)) ;
var b4_deglinted = image.select('b4').subtract(ee.Image.constant(slopeb4).multiply(NIRminusMinimum)) ;
var b5_deglinted = image.select('b5').subtract(ee.Image.constant(slopeb5).multiply(NIRminusMinimum)) ;
var b6_deglinted = image.select('b6').subtract(ee.Image.constant(slopeb6).multiply(NIRminusMinimum)) ;
var b7_deglinted = image.select('b7').subtract(ee.Image.constant(slopeb7).multiply(NIRminusMinimum)) ;
var deglintedImage = image.addBands(b1_deglinted.rename('b1_deglinted'))
.addBands(b2_deglinted.rename('b2_deglinted'))
.addBands(b3_deglinted.rename('b3_deglinted'))
.addBands(b4_deglinted.rename('b4_deglinted'))
.addBands(b5_deglinted.rename('b5_deglinted'))
.addBands(b6_deglinted.rename('b6_deglinted'))
.addBands(b7_deglinted.rename('b7_deglinted'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment