// Sentinel-1 False-Color Visualization V1.0.0
// Twitter: Pierre Markuse (@pierre_markuse)
// Website: https://pierre-markuse.net/
// CC BY 4.0 International - https://creativecommons.org/licenses/by/4.0/
function stretch ( val , min , max ) {
return ( val - min ) / ( max - min );
}
function satEnh ( rgbArr ) {
var avg = rgbArr . reduce (( a , b ) => a + b , 0 ) / rgbArr . length ;
return rgbArr . map ( a => avg * ( 1 - saturation ) + a * saturation );
}
var BLUE = [ 0.0 , 0.2 , 1.0 ];
var GREEN = [ 0.0 , 0.7 , 0.0 ];
var BLACK = [ 0.0 , 0.0 , 0.0 ];
var RED = [ 1.0 , 0.0 , 0.0 ];
var water_normal = [ stretch ( VV * 1 , 0.0 , 0.99 ), stretch ( VV * 8 , 0.0 , 0.99 ), 0.5 + VV * 3 + stretch ( VH * 2000 , 0.0 , 0.99 )];
var water_bright = [ stretch ( VV * 1.33 , 0.0 , 0.99 ), stretch ( VV * 10 , 0.0 , 0.99 ), 0.5 + VV * 4 + stretch ( VH * 3000 , 0.0 , 0.99 )];
var oilspill_1 = [ stretch ( VV * 5.0 , 0.2 , 0.99 ), 0.0 + stretch ( VV * 10 , 0.10 , 0.50 ), 0.0 + stretch ( VV * 20 , 0.10 , 0.50 )];
var oilspill_2 = [ stretch ( VV * 5.0 , 0.2 , 0.99 ), 0.0 + stretch ( VV * 10 , 0.15 , 0.40 ), 0.1 + stretch ( VV * 20 , 0.15 , 0.40 )];
var oilspill_3 = [ stretch ( VV * 5.0 , 0.2 , 0.99 ), 0.1 + stretch ( VV * 11 , 0.03 , 0.60 ), 0.1 + stretch ( VV * 23 , 0.01 , 0.58 )];
var land_redder = [ stretch ( VV * 3.4 , - 0.0 , 0.99 ),( stretch ( VV * 1.1 , - 0.0 , 0.99 ) + stretch ( VH * 8.75 , - 0.0 , 0.99 )), stretch ( VH * 1.75 , - 0.0 , 0.99 )];
var land_normal = [ stretch ( VV * 3.0 , - 0.0 , 0.99 ),( stretch ( VV * 1.1 , - 0.0 , 0.99 ) + stretch ( VH * 8.75 , - 0.0 , 0.99 )), stretch ( VH * 1.75 , - 0.0 , 0.99 )];
var land_greener = [ stretch ( VV * 3.0 , - 0.0 , 0.99 ),( stretch ( VV * 1.4 , - 0.0 , 0.99 ) + stretch ( VH * 9.75 , - 0.0 , 0.99 )), stretch ( VH * 1.75 , - 0.0 , 0.99 )];
var city = [ 0.9 - VV - 2 * VH , 0.9 - VV - 3 * VH , 0.9 - 0.3 * VV - 6 * VH ];
var watervis = water_normal ;
var landvis = land_normal ;
var water_threshold = 25 ; //lower means more water
var saturation = 1.0 ; //Standard 1.0
var brightness = 1.0 ; //Standard 1.0
var avoid_dark_land = 0 ; //0=off,1=on
var avoid_dark_land_threshold = 0.1 ; //Standard 0.05
var avoid_dark_water = 0 ; //0=off,1=on
var avoid_dark_water_threshold = 1.00 ; //Standard 1.00
var manualCorrection_water = [ 0.00 , 0.00 , 0.00 ];
var manualCorrection_land = [ 0.00 , 0.00 , 0.00 ];
var i = 0 ;
while ( i < 3 ) {
watervis [ i ] = watervis [ i ] + manualCorrection_water [ i ];
landvis [ i ] = landvis [ i ] + manualCorrection_land [ i ];
landvis [ i ] = landvis [ i ] * brightness ;
i ++ ;
};
var watervis = satEnh ( watervis );
var landvis = satEnh ( landvis );
if ( avoid_dark_land ) {
var dark = landvis [ 0 ] + landvis [ 1 ] + landvis [ 2 ];
if ( dark < avoid_dark_land_threshold ) { var landvis = BLUE ;}; //Try other things than BLUE!
};
if ( avoid_dark_water ) {
var dark = watervis [ 0 ] + watervis [ 1 ] + watervis [ 2 ];
if ( dark < avoid_dark_water_threshold ) { var watervis = BLUE ;}; //Try other things than BLUE!
};
return (( VV / VH ) > water_threshold )
? watervis :
landvis ;