Last active
July 25, 2025 18:04
-
-
Save 7yl4r/9719c9017aa8e1240faf280367682e8f to your computer and use it in GitHub Desktop.
Deglinting for Planet Imagery in GEE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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