Learning to Read a Satellite Bathymetry Map

Satellite Derived Bathymetry Mapping - SDBM Script

Show script or download it.

                                  //VERSION=three (motorcar-converted from i)                                    /* SATELLITE DERIVED BATHYMETRY MAPPING Author: Mohor Gartner (https://www.linkedin.com/in/mohor-gartner/) */                  ////// INPUT SETTINGS                                    //// 1. Select MULTI-TEMPORAL SCENES (Playground)                                    var                  scenes                  =                  [                  "                  2019-08-09                  "                  ,                  "                  2019-07-20                  "                  ,                  "                  2018-08-29                  "                  ,                  "                  2017-08-24                  "                  ,                  "                  2018-07-30                  "                  ];                  //// 2. Set water surface detection THRESHOLDS                                    //Calibration might be needed, depends on the scene                                    var                  MNDWI_thr                  =                  0.2                  ;                  var                  NDWI_thr                  =                  0.2                  ;                  //// three. Turn on/off filtering of faux water surface detections                                    //urban areas&blank soil. Recommended=truthful                                    var                  filter_UABS                  =                  true                  ;                  //shadows&snow/ice. Recommended=false                                    var                  filter_SSI                  =                  false                  ;                  //// 4. Set bands RATIOS to calculate SDB                                    //SDB can exist blue/greenish (true) or blueish/red (false,aka SDBred)                                    //Generally SDBred is ameliorate for depth<5m and SDBgreen is better for depth>5m                                    var                  SDBgreen                  =                  truthful                  ;                  //// 5. Select visualization scheme SDB                                    //0-blue ramp,1-blueish alloy,2-blueBlack blend                                    var                  cs                  =                  0                  ;                  //// 6. Of import! a.) faux - if m1 and m0 already known OR b.) truthful - pre-analysis to evaluate m1 and m0                                    var                  preAnalysis                  =                  false                  ;                  // half dozen.a) set already known (from articles or calculated) m1 (scale) and m0 (offset)                                    var                  m1                  =                  155.86                  ;                  var                  m0                  =                  146.46                  ;                  // 6.b) If m1 and m0 unknown, preAnalysis=truthful (in a higher place) and pre-analysis of pSDB is necessary to evaluate m1 and m0! This step is done "off the platform" (Example TUTORIAL IN SUPPLEMENTARY MATERIAL). In this instance mp, pSDBmin, pSDBmax, nConst are applicable                                    //multiplier for pSDB output value in Greenish Channel, recommended one thousand                                    var                  mp                  =                  1000                  ;                  //pSDBmin,pSDBmax are clamped output range [0-i] of Scout Hub in READ CHANNEL                                    //Recommended 0.201 and 4.983 - theoretical minimum and maximum values of pSDB. If higher accuracy is needed, values 0.565 and 1.769 might be appropriate too. For latter, color values range of pSDB is bigger                                    var                  pSDBmin                  =                  0.201                  ;                  // pSDB<=pSDBmin -> Sentinel Hub returns 0 for red channel                                    var                  pSDBmax                  =                  4.983                  ;                  // pSDB>=pSDBmax -> Sentinel Hub returns 1 for ruddy channel                                    //pSDB calc. parameter, recommended grand. Assures that both logarithms will be positive and that the ratio produces a linear response over the retrievable water depth                                    var                  nConst                  =                  1000                  ;                  ////// VAR                                    var                  nrDS                  ,                  s1DS                  ,                  s2DS                  ;                  // Color SDB                                    var                  cs0                  =                  new                  ColorMapVisualizer                  ([[                  0                  ,                  0x6cd3fb                  ],[                  1                  ,                  0x4d91ff                  ],[                  2                  ,                  0x4976ff                  ],[                  4                  ,                  0x445bff                  ],[                  six                  ,                  0x3e52f0                  ],                  [                  8                  ,                  0x3948e1                  ],[                  10                  ,                  0x333fd3                  ],[                  12                  ,                  0x3039b7                  ],[                  fourteen                  ,                  0x2e349b                  ],[                  sixteen                  ,                  0x1e1e4a                  ],[                  xviii                  ,                  0x11112b                  ]]);                  //water torso id                                    role                  wbi                  (                  r                  ,                  g                  ,                  b                  ,                  nr                  ,                  s1                  ,                  s2                  )                  {                  //h2o surf.                                    let                  ws                  =                  0                  ;                  try                  {                  var                  ndvi                  =                  (                  nr                  -                  r                  )                  /                  (                  nr                  +                  r                  ),                  mndwi                  =                  (                  g                  -                  s1                  )                  /                  (                  thousand                  +                  s1                  ),                  ndwi                  =                  (                  g                  -                  nr                  )                  /                  (                  g                  +                  nr                  ),                  ndwi_l                  =                  (                  nr                  -                  s1                  )                  /                  (                  nr                  +                  s1                  ),                  aweish                  =                  b                  +                  two.v                  *                  m                  -                  1.5                  *                  (                  nr                  +                  s1                  )                  -                  0.25                  *                  s2                  ,                  aweinsh                  =                  4                  *                  (                  k                  -                  s1                  )                  -                  (                  0.25                  *                  nr                  +                  ii.75                  *                  s1                  ),                  dbsi                  =                  ((                  s1                  -                  thousand                  )                  /                  (                  s1                  +                  g                  ))                  -                  ndvi                  ;                  //DEFINE WB                                    if                  (                  mndwi                  >                  MNDWI_thr                  ||                  ndwi                  >                  NDWI_thr                  ||                  aweinsh                  >                  0.1879                  ||                  aweish                  >                  0.1112                  ||                  ndvi                  <-                  0.2                  ||                  ndwi_l                  >                  1                  ){                  ws                  =                  1                  ;}                  //filter urban&bare                                    ws                  =                  ((                  filter_UABS                  &&                  ws                  ==                  1                  )                  &&                  ((                  aweinsh                  <=-                  0.03                  )                  ||                  (                  dbsi                  >                  0                  )))?                  0                  :                  ws                  ;                  //filter shadows&snow/ice                                    ws                  =                  ((                  filter_SSI                  &&                  ws                  ==                  1                  )                  &&                  ((                  aweish                  <=                  0.1112                  &&                  ndvi                  >-                  0.2                  )                  ||                  (                  aweinsh                  <                  0.5                  &&                  ndvi                  >-                  0.2                  )                  ||                  ((                  aweinsh                  <                  0                  ||                  aweish                  <=                  0                  ||                  ndvi                  >-                  0.1                  ))                  ||                  (((                  m                  >=                  0.319                  )?((                  mndwi                  >                  0.ii                  )?((                  nr                  >                  0.15                  )?((                  b                  >                  0.eighteen                  )?                  1                  :                  0                  ):                  0                  ):                  0                  ):                  0                  ))                  ||                  (                  chiliad                  >                  0.319                  )                  ||                  (                  mndwi                  <                  aweinsh                  )                  ||                  (                  ndwi                  -                  aweinsh                  >                  0.5                  )))?                  0                  :                  ws                  ;                  }                  grab                  (                  err                  ){                  ws                  =                  0                  ;}                  return                  ws                  ;                  }                  //pSDB calc, denum:greenish or red                                    getPsdb                  =                  (                  b                  ,                  denum                  ,                  due north                  )                  =>                  (                  Math                  .                  log                  (                  n                  *                  b                  ))                  /                  (                  Math                  .                  log                  (                  n                  *                  denum                  ));                  //SDB calc                                    getSdb                  =                  (                  pSDB                  ,                  m1                  ,                  m0                  )                  =>                  m1                  *                  pSDB                  -                  m0                  ;                  //multi-temp. https://bit.ly/2TQJWnU                                    function                  filterScenes                  (                  ss                  ,                  inputMetadata                  )                  {                  render                  ss                  .                  filter                  (                  function                  (                  s                  ){                  var                  sStr                  =                  datef                  (                  southward                  .                  date                  );                  return                  (                  scenes                  .                  indexOf                  (                  sStr                  )                  >=                  0                  )?                  true                  :                  fake                  ;                  });                  }                  office                  datef                  (                  t                  ){                  var                  d                  =                  t                  .                  getDate                  (),                  yard                  =                  t                  .                  getMonth                  ()                  +                  1                  ,                  y                  =                  t                  .                  getFullYear                  ();                  if                  (                  d                  <                  10                  )                  d                  =                  '                  0                  '                  +                  d                  ;                  if                  (                  m                  <                  10                  )                  m                  =                  '                  0                  '                  +                  m                  ;                  return                  y                  +                  '                  -                  '                  +                  m                  +                  '                  -                  '                  +                  d                  ;                  }                  // setup values                                    part                  setup                  ()                  {                  return                  {                  input                  :                  [{                  bands                  :                  [                  "                  B02                  "                  ,                  "                  B03                  "                  ,                  "                  B04                  "                  ,                  "                  B08                  "                  ,                  "                  B11                  "                  ,                  "                  B12                  "                  ]                  }],                  output                  :                  {                  bands                  :                  3                  },                  mosaicking                  :                  "                  ORBIT                  "                  }                  }                  //eval                                    function                  evaluatePixel                  (                  p                  )                  {                  nrDS                  =                  "                  B08                  "                  ;                  s1DS                  =                  "                  B11                  "                  ;                  s2DS                  =                  "                  B12                  "                  ;                  //S2 bands                                    //nrDS="B05";s1DS="B06";s2DS="B07"; Bands for Landsat 8; don't forget to besides change the input bands                                    ////Due north,avg,sum+reduce avg                                    var                  Due north                  =                  p                  .                  length                  ,                  wAvg                  =                  0                  ,                  bAvg                  =                  0                  ,                  gAvg                  =                  0                  ,                  rAvg                  =                  0                  ,                  psdbAvg                  =                  0                  ,                  sdbAvg                  =                  0                  ,                  west                  =                  0                  ,                  psdb                  =                  0                  ,                  sdb                  =                  0                  ,                  trimNavg                  =                  0                  ;                  //loop scenes                                    for                  (                  var                  i                  =                  0                  ;                  i                  <                  North                  ;                  i                  ++                  ){                  let                  bi                  =                  p                  [                  i                  ].                  B02                  ,                  gi                  =                  p                  [                  i                  ].                  B03                  ,                  ri                  =                  p                  [                  i                  ].                  B04                  ;                  if                  ((                  bi                  +                  gi                  +                  ri                  ==                  iii                  )                  ||                  (                  bi                  +                  gi                  +                  ri                  ==                  0                  ))                  {                  ++                  trimNavg                  ;                  }                  else                  {                  //nir,swir12                                    let                  nri                  =                  p                  [                  i                  ][                  nrDS                  ],                  s1_i                  =                  p                  [                  i                  ][                  s1DS                  ],                  s2_i                  =                  p                  [                  i                  ][                  s2DS                  ];                  //denumi                                    let                  deNumi                  =                  (                  SDBgreen                  )?                  gi                  :                  ri                  ;                  //h2o body id                                    westward                  =                  wbi                  (                  ri                  ,                  gi                  ,                  bi                  ,                  nri                  ,                  s1_i                  ,                  s2_i                  );                  //sum part of avg calc                                    wAvg                  =                  wAvg                  +                  w                  ;                  bAvg                  =                  bAvg                  +                  bi                  ;                  gAvg                  =                  gAvg                  +                  gi                  ;                  rAvg                  =                  rAvg                  +                  ri                  ;                  //calc pSDB                                    psdb                  =                  getPsdb                  (                  bi                  ,                  deNumi                  ,                  nConst                  );                  //if preAnalysis=false, calc final SDB                                    if                  (                  !                  preAnalysis                  )                  {                  sdb                  =                  getSdb                  (                  psdb                  ,                  m1                  ,                  m0                  );}                  wAvg                  =                  wAvg                  +                  west                  ;                  psdbAvg                  =                  psdbAvg                  +                  psdb                  ;                  sdbAvg                  =                  sdbAvg                  +                  sdb                  ;                  bAvg                  =                  bAvg                  +                  bi                  ;                  gAvg                  =                  gAvg                  +                  gi                  ;                  rAvg                  =                  rAvg                  +                  ri                  ;                  }                  }                  N                  =                  N                  -                  trimNavg                  ;                  wAvg                  =                  wAvg                  /                  Northward                  ;                  bAvg                  =                  bAvg                  /                  N                  ;                  gAvg                  =                  gAvg                  /                  N                  ;                  rAvg                  =                  rAvg                  /                  Northward                  ;                  psdbAvg                  =                  psdbAvg                  /                  Northward                  ;                  sdbAvg                  =                  sdbAvg                  /                  N                  ;                  //preAnalysis out color:red-clampedMinMax; green-true Value*multiplier(mp)                                    let                  psdbCol                  =                  colorBlend                  (                  psdbAvg                  ,[                  pSDBmin                  ,                  pSDBmax                  ],[[                  0                  ,                  0                  ,                  0                  ],[                  i                  ,                  0                  ,                  ane                  ]])                  psdbCol                  [                  1                  ]                  =                  psdbAvg                  *                  mp                  ;                  //bath color: psdb||sdb(cs0||ane||2)                                    let                  bathroom                  =                  (                  preAnalysis                  )?                  psdbCol                  :((                  cs                  ==                  0                  )?                  cs0                  .                  getColorFromValue                  (                  sdbAvg                  ):((                  cs                  ==                  1                  )?                  colorBlend                  (                  sdbAvg                  ,[                  0                  ,                  eighteen                  ],[[                  0                  ,                  1                  ,                  1                  ],[                  0                  ,                  0                  ,                  0.vii                  ]]):                  colorBlend                  (                  sdbAvg                  ,[                  0                  ,                  18                  ],[[                  0                  ,                  0                  ,                  i                  ],[                  0                  ,                  0                  ,                  0                  ]])));                  return                  (                  wAvg                  >=                  0.1                  )?                  bathroom                  :[                  rAvg                  *                  2                  ,                  gAvg                  *                  2                  ,                  bAvg                  *                  ii                  ];                  }                              

Evaluate and visualize

  • Lookout man Hub Temporal

  • EO Browser

Full general clarification of the script

Bathymetry information is needed for research in global processes in h2o (heat, table salt, nutrients, pollutants transfer), undersea seismic events, navigation, commerce, marine habitats, disasters prevention and management (modelling tsunami, wave height estimation), hazard assessment [eleven]. There are various methods to obtain bathymetry, from high-cost sonar measurements, special LIDAR which penetrates water cavalcade, time consuming in-situ measurements, to cost-constructive and relatively fast Satellite Derived Bathymetry (SDB). Latter of course might not produce equally authentic results as methods with sonar. Still, it provides effective evaluation of bathymetry in shallow waters. SDB is usually constructive up to 20 meters, sometimes even 25 meters. At that place was already extensive research on topic of Satellite Derived Bathymetry [1,2,vi,7,10,11]. Satellite Derived Bathymetry (SDB) method is therefore implemented in this script.

The primary goal of the script is to place shallow water depths (upward to 18 meters) for selected expanse and specific scene. Sentinel Hub services provide cost-effective and fast evaluation of shallow bathymetry compared to all-encompassing sonar or in-situ measurements of depth. Nevertheless, if input parameters calibration (m1) and get-go (m0) for calculation of Satellite Derived Bathymetry (SDB) are unknown, at least 5-10 scale points with known depth [i] and small work of the platform are needed. For some locations, bathymetry data can be found online or one could brand in-situ measurements.

Information technology should be noted that in general, script is simplified compared to the usual scientific approach on Satellite Derived Bathymetry as script does not include pre-processing of the scene (atmospheric correction, water reflectance, tide offset).

To notice h2o surface, simplified version of the existing custom script Water Bodiesí Mapping (WBM) is used [iii]. Applicable filters can be used, to right false detections of water surface. Water Bodies` Mapping is done on the ground of half dozen bands (red, green, blue, NIR, SWIR1, SWIR2) and various indices used for water bodiesí detection (NDVI, MNDWI, NDWI, AWEISH, AWEINSH).

For detected water surfaces, Satellite Derived Bathymetry processing is washed using band ratio calculation [1]. Process is based on ratio of 2 bands: blueish/green or blue/red. Sometime ratio is better suited for depths betwixt five to xviii meters and latter is better for depths lower than v meters. Ratio model uses a ratio of log-transformed water reflectance of bands.

On the basis of bands ratio, pseudo Satellite Derived Bathymetry (pSDB) is calculated. In add-on, with tunable constants scale and kickoff (m1 and m0), Satellite Derived Bathymetry can be calculated with equation: SDB = m1 * pSDB ñ m0

If m1 and m0 are known in advance (from articles etc.), pre-analysis and tuning of m1 and m0 is not needed. Consequence of the SDB equation are clamped with advisable color mapping. Three unlike styles of bathymetry colour mapping are available: blue ramp, blueish blend and blue-black blend.

Still, if m1 and m0 are unknown, pre-analysis is needed to appropriately tune m1 and m0. Pre-assay includes depth data for at least 5 to x points and minor work ìoff the Sentinel Hub platformî to correlate depth data and calculated pSDB for mentioned points. Instance of ìoff the Sentinel Hub platformî procedure is described in Supplementary material document.

If the goal of the mapping is simply visual presentation of bathymetry variability, already known values of m1 and m0 for similar scenes or location could be plenty without any pre-assay procedure.

There is also an option to apply the script in multi-temporal analysis (Sentinel Playground). As Satellite Derived Bathymetry procedure needs scenes with good and relatively constant weather (no clouds, no/low turbidity, waves, wind), therefore scenes for multi-temporal analysis must be selected by dates.

Primarily, script is adult for Sentinel-2 L1C information source. Nevertheless, it tin can exist used also for Landsat eight and Watch-2 L2A. Latter information source images usually take less reflectance than L1C. Therefore, thresholds for water bodies mapping (MNDWI, NDWI) commonly have to be adapted.

Instance of multi-temporal analysis on a basis of Sentinel-2 L2A for 5 scenes is in a VISUALIZATION shared link. Constants m1 and m0 were evaluated on the basis of linear regression pSDB and depth values for 168 locations. Thresholds for water bodies` mapping MNDWI and NDWI had to be adjusted to values 0.ii.

Details of the script

APPLICABILITY OF THE SCRIPT:

Script is in globally applicable in the coastal zones of reservoirs, ponds, lakes, seas and oceans. It is recommended to use scenes with higher illumination and no or depression presence of cloud coverage (<ten%), shadow areas, turbidity, waves, wind. Uniform type of the sea bed or lake bottom is recommended for individual scene assay.

Simulated DETECTION Issues AND LIMITATIONS:

There could be fake detection of water surface as urban, bare soil, clouds, snow/ice and shadow areas. That could be mitigated with 2 filters in the script. Yet, filters are only necessary for better visual representation.

For non-uniform scenes with low (black seaweed, dark bottom, shadow area) or loftier (high turbidity, shallow waters with bright bottom) reflectance of the lesser, script might not exist applicable. That can result in over or under estimation of the depth. SDB method is usually effective upwards to twenty meters, sometimes even 25 meters.

Script has simplified process for Satellite Derived Bathymetry method compared to usual enquiry, as information technology does non include: water level difference between measured depths and h2o level at the fourth dimension of satellite image acquisition (tide, storm surge, etc.), pre-processing of the scene (reflectance correction etc.) and validation procedure. Limitation of the script is as well in case of unknown m1 and m0 as bathymetry data is needed and minor ìoff the platformî work.

Nevertheless, script can serve perfectly equally a tool for fast evaluation of shallow bathymetry.

In case of false or no detection of bathymetry depth, script could also serve to identify sediment transport, higher turbidity areas, white-water areas, bigger ships anchoring locations (illegal), or even ships movement direction by visible wake at the movement of the acquisition.

HOW THE SCRIPT WORKS:

  1. In case of multi-temporal use in Watch Playground, user has to select scenes dates: var scenes = ["2019-08-09",Ö];

  2. In case default values of MNDWI and NDWI thresholds practice not work as expected, values should be adjusted.

  3. In case of needed filtering of false h2o surface detection, user tin can try to plow on/off two filters: filter_UABS and var filter_SSI. Former is recommended and latter is recommended only in multi-temporal assay.

  4. SDB can be calculated on the footing of two different band ratios: blue/dark-green or blue/ruby-red. Therefore, user must fix SDBgreen=true for former and SDBgreen=false for latter. var SDBgreen=true;

  5. At that place is an option (cs) for dissimilar visualization schemes for final SDB: 0-blue ramp, one-blue blend, 2-blue-black alloy (legends in Supplementary material).

  6. The nigh important step is to define, if m1 and m0 are already known. If they are, final calculation of SDB follows. If that is the case, user well-nigh prepare var preAnalysis=false; and known values of m1 and m0. In this example output of the script should already exist appropriate. But if m1 and m0 are unknown, pre-analysis with tuning m1 and m0 is needed. Therefore, user sets var preAnalysis=true;

In this instance user needs to accept available depths for v to 10 points. It is recommended that this points are part of bathymetry cantankerous department with variable depths (due east.chiliad. from 0 to eighteen meters). For latter points calculated pSDB values are needed from pre-analysis. This tin can be obtained from green or red aqueduct values of pre-analysis output. One has to exist aware that red and green channels outputs adapted pSDB values (multiplied or clamped). Therefore, that values must be outset adjusted back to ìtrueî pSDB value. And so, latter values with known depths are used in linear regression to obtain m1 and m0. Finally, preAnalyis=fake and obtained m1 and m0 are set up for final SDB analysis.

In supplementary material, yous tin discover detailed caption of pre-analysis, tutorial on how to obtain multiplied pSDB values in dark-green channel output and how to make linear regression.

On the basis of the settings in a higher place, rest of the script gets executed. Firstly, values for setInputComponents is assault the basis of selected data source in OE Browser or Sentinel Playground. As Band 12 does not be for Landsat 8, script automatically knows which data source is it analysing (Sentinel-2 or Landsat 8). On this footing, advisable bands for NIR, SWIR1 and SWIR2 are taken.

Scene(s) are analysed for h2o surface. According to settings, pixels are filtered or non for false detection of water surface. Both is done on the ground of thresholds for different indices. This part of the script is really simplified version of H2o Bodies` Mapping script.

Next, if m1 and m0 are known and pre-analysis is not needed, pSDB and SDB values are calculated. On the basis of SDB values and appropriate definition of color scheme for output, script returns Satellite Derived Bathymetry map. Script is adjusted to show depths from 0 to 18 meters.

Mohor Gartner

Description of representative images

1) The Gulf of Trieste, Northern Adriatic Sea, Lookout-2 L1C, 2018-08-09

Input parameters: MNDWI_thr=0.42, NDWI_thr=0.4, filter_UABS=true, filter_SSI=simulated, SDBgreen=truthful, m1=184.362, m0=190.037, nConst=1000

Image is analysed on the basis of Lookout-2 data source from 9.8.2018. Pre-analysis procedure to obtain m1 and m0 values are described in Supplementary materials. Full general identification of water surface advisable. Bathymetry depth is shown with blue ramp color scheme: from bright blueish for depths from 0 to one meter to dark blue for depths more 18 meters. Former can be observed more than on the due north and latter can be observed on the due south part of the analysed area. Compared to bathymetry model, more of the open up waters should have nighttime blue color as depth is deeper than xviii meters. Difference can be accounted to definition of m1 and m0 on linear regression of i cross department with nine locations. As it tin be seen for multi-temporal example in VISUALIZATION shared link, open waters have more appropriate color scheme.

Still, near shore areas properly bear witness higher lesser inclination in the east part of the coast (Croatian declension, Slovenian coast, Italian coast from Trieste to Soca/Isonzo river mouth) and lower inclination on the north and west side of the coastline. Marano Lagoon has nicely show dynamic depths. Even so, that could exist also an effect of different sediment color. In improver, Secovlje Salina Nature Park in Slovenia realistically shows lower depths.

Mostly it does not seem there would be whatsoever high active sediment transportation or water pollution at the time of the scene. Simply exception is due south part of an epitome where we can see bright trail in the open waters. Nearby we tin can also run into some reflectance divergence in direction north-south, which is probably result of satellite image acquisition.

Some brighter spots can be seen in the water, which are most probably ships. North west from Savudrija there is likewise visible ships` wake. In addition, discrete breakwaters of the Port of Trieste are also visible. The Gulf of Trieste, Northern Adriatic Sea

2) West Palm Beach, United states of america, Picket L2A, 2019-12-07

Input parameters: MNDWI_thr=0.42, NDWI_thr=0.4, filter_UABS=simulated, filter_SSI=false, SDBgreen=true/false, m1=59.nine/half dozen.5, m0=59.1/7, nConst=k

Image is composed of two scenes. On the acme is scene with bluish/dark-green ratio and on the bottom is the scene with blue/red ratio. Former is better for depths between 5 to xviii meters and latter is better suited for depths betwixt 0 and five meters. Tunable constants m1 and m0 are result of research in an article [1]. Sentinel Hub does not have access to Sentry L2A data for the scenes on which constants were obtained in the article (7.12.2017). Therefore scene from 7.12.2019 is used in this instance.

In both scenes h2o surface identification is mostly appropriate. Merely some smaller inland water bodies are not identified. Nevertheless, latter are not of import for bathymetry assay. Within the lagoon depth identification is not advisable as contants (m1, m0) were not tuned to bathymetry at that place, but in the open due east declension.

In the height scene (blueish/green) bright blue identification is probably too wide. As already said, blue/green ratio is more than advisable for depths between 5 to 18 meters. So that is expected. Open waters on the eastward of the scene are more appropriately identified as depths at least eighteen meters or more. Identified depths between iv to 18 meters have expected transition. Parallel to the declension there are 3 ìlines from north to southî, which are in brighter color and identified every bit lower depth as surrounding bathymetry. On that location there is aggregated reef in surrounding sand bottom co-ordinate to the Unified Reef Map [10].

In lesser scene (blueish/cherry-red) there is better depth transition from 0 to 6 meters, closer to the coastline every bit expected. On more east side, depths are than falsely identified.

Both scenes take some prototype noise. West Palm Beach, USA

iii) Tampa Bay, USA, Landsat 8, 2015-02-20

Input parameters: MNDWI_thr=0.42, NDWI_thr=0.4, filter_UABS=true, filter_SSI=fake, SDBgreen=true, m1=-66.05, m0=-65.89, nConst=1

Scene is analysed on a ground of constants m1 and m0 from article [6]. Besides paradigm (2015-02-20) is the same, but this script has no pre-processing to right the prototype (atmospheric correction-DOS, water reflectance). Notwithstanding, bathymetry identification is satisfactory for depths betwixt 5 to 12 meters. Most probably depths identified as from 0 to 1 meter are too low considering of bluish/green ratio band. Tampa Bay, USA

four) Mobile Bay, USA, Sentinel L1C, 2019-eleven-19

Input parameters: MNDWI_thr=0.42, NDWI_thr=0.four, filter_UABS=true, filter_SSI=false, SDBgreen=true, m1=87.722, m0=86.63, nConst=1000

Constants m1 and m0 are based on linear regression analysis for 55 locations on selected cross sections with calculated pSDB from script pre-analysis and online bathymetry [7]. Scene is in the area of Mobile bay in front end of Fort Morgan. Even though blueish/green ratio is used, shallower depths (0-5 meters) are appropriately identified. Less advisable is identified depths in more open waters on s, which are underestimated. Parallel to the shoreline there is identified strip from west to eastward, which it seems is underwater sandbar. Mobile Bay, USA

5) San Luis Obispo Bay, Usa, Sentinel L1C, 2018-02-16

Input parameters: MNDWI_thr=0.42, NDWI_thr=0.4, filter_UABS=true, filter_SSI=false, SDBgreen=true, m1=242.06, m0=253.02, nConst=grand

Constants m1 and m0 are based on linear regression analysis for 170 locations on selected cantankerous sections with calculated pSDB from script pre-assay and online bathymetry [seven].

Bathymetry in the bay is appropriately identified for shallow (0-5 meters) equally for deeper water (5-18 meters). In add-on, even open waters are accordingly identified as at least 18 meters depths. In the bay, brighter dots are event of anchored smaller boats. San Luis Obispo Bay, USA

Credits

[1] Caballero, I. and Stumpf, R.P. 2019. Retrieval of nearshore bathymetry from Lookout man-2A and 2B satellites in South Florida coastal waters.

[2] Stumpf, R.P, Holderied, K., Sinclair, M.Determination of water depth with loftier-resolution satellite imagery over variable bottom types.

[three] Gartner, K. Water Bodies` Mapping Custom Script for Sentry Hub

[4] Du, Y., Zhang Y., Ling, F., Wang, Q., Li, Due west., Li, Ten. 2016.Water Bodiesí Mapping from Sentinel-ii Imagery with Modified Normalized Departure H2o Alphabetize at 10-m Spatial Resolution Produced by Sharpening the SWIR Band.

[5] Feyisa, G.50., Fensholt R., Proud S. 2014. Automated Water Extraction Index: A New Technique for Surface H2o Mapping Using Landsat Imagery.

References

[6] Yunus, A.P., Dou, J., Song, X., Avtar, R. 2019. Loftier Resolution Sentinel-2 Images for Improved Bathymetric Mapping of Coastal and Lake Environments.

[7] U. S. Geological Survey. Topobathymetric Models. CoNED Applications Project TBDEM Data and Metadata Download.

[viii] Trobec, A., Busetti, K., Zgur, F., Baradello, 50., Babich, A., Cova, A., Gordini, East., Romeo, R., Tomini, I., Poglajen, S., Diviacco, P., Vrabec, One thousand. 2018. Thickness of marine Holocene sediment in the Gulf of Trieste (northern Adriatic Ocean). University of Ljubljana, OGS ñ Instituto di Ocenografia e di Geofisica Sperimantale, Universita di Trieste, Harpha Sea d.o.o. Earth System Science Information.

[9] Trobec, A. and Busetti, M. (2017): Models of the bathymetry, of the base and of the thickness of Holocene marine sediment in the Gulf of Trieste (Northern Adriatic Body of water). OGS SNAP System.

[ten] Florida Fish and Wild fauna Conservation Commision. Florida'south Unified Reef Map.

[eleven] Traganos, D. 2018. Estimating Satellite-Derived Bathymetry (SDB) with the Google World Engine and Sentinel-2.

phillipsmothough.blogspot.com

Source: https://custom-scripts.sentinel-hub.com/custom-scripts/sentinel-2/satellite_derived_bathymetry_mapping-sdbm/

0 Response to "Learning to Read a Satellite Bathymetry Map"

Postar um comentário

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel