|
|
|
|
|
|
|
function setup() { |
|
return { |
|
input: [{ |
|
bands: [ |
|
"B03", |
|
"B04", |
|
"B05", |
|
"B06", |
|
"B07", |
|
"B8A", |
|
"B11", |
|
"B12", |
|
"viewZenithMean", |
|
"viewAzimuthMean", |
|
"sunZenithAngles", |
|
"sunAzimuthAngles" |
|
], |
|
units: ["REFLECTANCE", "REFLECTANCE", "REFLECTANCE", "REFLECTANCE", "REFLECTANCE", "REFLECTANCE", "REFLECTANCE", "REFLECTANCE", "DEGREES", "DEGREES", "DEGREES", "DEGREES"] |
|
}], |
|
output: [ |
|
{ |
|
id: "default", |
|
sampleType: "FLOAT32", |
|
bands: 1 |
|
} |
|
] |
|
} |
|
} |
|
|
|
var degToRad = Math.PI / 180; |
|
|
|
function evaluatePixel(sample) { |
|
var b03_norm = normalize(sample.B03, 0, 0.253061520472); |
|
var b04_norm = normalize(sample.B04, 0, 0.290393577911); |
|
var b05_norm = normalize(sample.B05, 0, 0.305398915249); |
|
var b06_norm = normalize(sample.B06, 0.00663797254225, 0.608900395798); |
|
var b07_norm = normalize(sample.B07, 0.0139727270189, 0.753827384323); |
|
var b8a_norm = normalize(sample.B8A, 0.0266901380821, 0.782011770669); |
|
var b11_norm = normalize(sample.B11, 0.0163880741923, 0.493761397883); |
|
var b12_norm = normalize(sample.B12, 0, 0.49302598446); |
|
var viewZen_norm = normalize(Math.cos(sample.viewZenithMean * degToRad), 0.918595400582, 0.999999999991); |
|
var sunZen_norm = normalize(Math.cos(sample.sunZenithAngles * degToRad), 0.342022871159, 0.936206429175); |
|
var relAzim_norm = Math.cos((sample.sunAzimuthAngles - sample.viewAzimuthMean) * degToRad) |
|
|
|
var n1 = neuron1(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm); |
|
var n2 = neuron2(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm); |
|
var n3 = neuron3(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm); |
|
var n4 = neuron4(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm); |
|
var n5 = neuron5(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm); |
|
|
|
var l2 = layer2(n1, n2, n3, n4, n5); |
|
|
|
var fcover = denormalize(l2, 0.000181230723879, 0.999638214715); |
|
|
|
return {default: [fcover]} |
|
} |
|
|
|
function neuron1(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm) { |
|
var sum = |
|
- 1.45261652206 |
|
- 0.156854264841 * b03_norm |
|
+ 0.124234528462 * b04_norm |
|
+ 0.235625516229 * b05_norm |
|
- 1.8323910258 * b06_norm |
|
- 0.217188969888 * b07_norm |
|
+ 5.06933958064 * b8a_norm |
|
- 0.887578008155 * b11_norm |
|
- 1.0808468167 * b12_norm |
|
- 0.0323167041864 * viewZen_norm |
|
- 0.224476137359 * sunZen_norm |
|
- 0.195523962947 * relAzim_norm; |
|
|
|
return tansig(sum); |
|
} |
|
|
|
function neuron2(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm) { |
|
var sum = |
|
- 1.70417477557 |
|
- 0.220824927842 * b03_norm |
|
+ 1.28595395487 * b04_norm |
|
+ 0.703139486363 * b05_norm |
|
- 1.34481216665 * b06_norm |
|
- 1.96881267559 * b07_norm |
|
- 1.45444681639 * b8a_norm |
|
+ 1.02737560043 * b11_norm |
|
- 0.12494641532 * b12_norm |
|
+ 0.0802762437265 * viewZen_norm |
|
- 0.198705918577 * sunZen_norm |
|
+ 0.108527100527 * relAzim_norm; |
|
|
|
return tansig(sum); |
|
} |
|
|
|
function neuron3(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm) { |
|
var sum = |
|
+ 1.02168965849 |
|
- 0.409688743281 * b03_norm |
|
+ 1.08858884766 * b04_norm |
|
+ 0.36284522554 * b05_norm |
|
+ 0.0369390509705 * b06_norm |
|
- 0.348012590003 * b07_norm |
|
- 2.0035261881 * b8a_norm |
|
+ 0.0410357601757 * b11_norm |
|
+ 1.22373853174 * b12_norm |
|
+ -0.0124082778287 * viewZen_norm |
|
- 0.282223364524 * sunZen_norm |
|
+ 0.0994993117557 * relAzim_norm; |
|
|
|
return tansig(sum); |
|
} |
|
|
|
function neuron4(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm) { |
|
var sum = |
|
- 0.498002810205 |
|
- 0.188970957866 * b03_norm |
|
- 0.0358621840833 * b04_norm |
|
+ 0.00551248528107 * b05_norm |
|
+ 1.35391570802 * b06_norm |
|
- 0.739689896116 * b07_norm |
|
- 2.21719530107 * b8a_norm |
|
+ 0.313216124198 * b11_norm |
|
+ 1.5020168915 * b12_norm |
|
+ 1.21530490195 * viewZen_norm |
|
- 0.421938358618 * sunZen_norm |
|
+ 1.48852484547 * relAzim_norm; |
|
|
|
return tansig(sum); |
|
} |
|
|
|
function neuron5(b03_norm,b04_norm,b05_norm,b06_norm,b07_norm,b8a_norm,b11_norm,b12_norm, viewZen_norm,sunZen_norm,relAzim_norm) { |
|
var sum = |
|
- 3.88922154789 |
|
+ 2.49293993709 * b03_norm |
|
- 4.40511331388 * b04_norm |
|
- 1.91062012624 * b05_norm |
|
- 0.703174115575 * b06_norm |
|
- 0.215104721138 * b07_norm |
|
- 0.972151494818 * b8a_norm |
|
- 0.930752241278 * b11_norm |
|
+ 1.2143441876 * b12_norm |
|
- 0.521665460192 * viewZen_norm |
|
- 0.445755955598 * sunZen_norm |
|
+ 0.344111873777 * relAzim_norm; |
|
|
|
return tansig(sum); |
|
} |
|
|
|
function layer2(neuron1, neuron2, neuron3, neuron4, neuron5) { |
|
var sum = |
|
- 0.0967998147811 |
|
+ 0.23080586765 * neuron1 |
|
- 0.333655484884 * neuron2 |
|
- 0.499418292325 * neuron3 |
|
+ 0.0472484396749 * neuron4 |
|
- 0.0798516540739 * neuron5; |
|
|
|
return sum; |
|
} |
|
|
|
function normalize(unnormalized, min, max) { |
|
return 2 * (unnormalized - min) / (max - min) - 1; |
|
} |
|
function denormalize(normalized, min, max) { |
|
return 0.5 * (normalized + 1) * (max - min) + min; |
|
} |
|
function tansig(input) { |
|
return 2 / (1 + Math.exp(-2 * input)) - 1; |
|
} |