Skip to main content

Optically-Shallow-Deep

This python tool delineates optically shallow and deep waters in Sentinel-2 imagery. The tool uses a deep neural network (DNN) that was trained on a diverse set of global images.

Supported input includes Level-1C (L1C) SAFE files and ACOLITE-processed L2R netCDF files. The output geotiff contains probabilities of water pixels being optically shallow and deep.

Home page: https://github.com/yulunwu8/Optically-Shallow-Deep

Publication: Richardson, G., Foreman, N., Knudby, A., Wu, Y., & Lin, Y. (2024). Global deep learning model for delineation of optically shallow and optically deep water in Sentinel-2 imagery. Remote Sensing of Environment, 311, 114302. https://doi.org/10.1016/j.rse.2024.114302

Originally coded by G. Richardson and A. Knudby, modified and packaged by Y. Wu

Models trained by G. Richardson and N. Foreman

Installation

1 - Create a conda environment and activate it:

conda create --name opticallyshallowdeep python=3.10
conda activate opticallyshallowdeep

2 - Install tensorflow

For mac OS:

conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos==2.13.0

For Windows and Linux:

pip3 install tensorflow==2.13.0

More on installing tensorflow: https://www.tensorflow.org/install

3 - Install opticallyshallowdeep:

pip3 install opticallyshallowdeep

Quick Start

For L1C files:

import opticallyshallowdeep as osd

# Input file 
file_L1C = 'folder/S2.SAFE' 

# Output folder 
folder_out = 'folder/test_folder_out'

# Run the OSW/ODW classifier 
osd.run(file_L1C, folder_out)

For ACOLITE L2R files:

import opticallyshallowdeep as osd

# Input files 
file_L1C = 'test_folder_in/S2.SAFE' 
file_L2R = 'test_folder_in/L2R.nc' 

# Output folder 
folder_out = 'folder/test_folder_out'

# Run the OSW/ODW classifier 
osd.run(file_L1C, folder_out, file_L2R=file_L2R)

The L1C file is always required as it contains a built-in cloud mask. Pixels within 8 pixels of the cloud mask are masked to reduce the impact of clouds.

Output is a 1-band geotiff, with values of prediction probability of optically shallow water (OSW): 100 means most likely OSW, 0 means most likely optically deep water (ODW). Non-water pixels are masked.

A log file, an intermediate multi-band geotiff, and a preview PNG are also generated in the output folder. They can be deleted after the processing.

Sample Sentinel-2 scene and output:

Tips

It is recommended to treat pixels with values between 0 and 40 as ODW, and those between 60 and 100 as OSW (Richardson et al., 2024).

Users have reported that averaging results from multiple images acquired on different days can help reduce noise and improve the overall accuracy of classification results.

Training, test, and validation data

All annotated shapefiles used in training, testing, and validating the DNN model are in the annotated_shapefiles folder, grouped by Sentinel-2 Scene ID.

Release files for opticallyshallowdeep 1.2.3.post1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opticallyshallowdeep 1.2.3.post1
File Size Uploaded
opticallyshallowdeep-1.2.3.post1.tar.gz 259.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for opticallyshallowdeep 1.2.3.post1
File Interpreter ABI Platform
opticallyshallowdeep-1.2.3.post1-py3-none-any.whl Python 3 none any Details

Total release size: 519.2 kB

Release files / opticallyshallowdeep-1.2.3.post1.tar.gz

Download URL opticallyshallowdeep-1.2.3.post1.tar.gz
Size 259.7 kB
Tags Source
SHA-256 checksum
How to use checksums
59741509278804ceb41150b033f705339f61f67283176edfe7d2acb654d10351
BLAKE2b-256 checksum
How to use checksums
b981e94d67f28ca8e598f3b09ea74cfabe58993a35e6761aa61ea6a91d91cb24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.18

Release files / opticallyshallowdeep-1.2.3.post1-py3-none-any.whl

Download URL opticallyshallowdeep-1.2.3.post1-py3-none-any.whl
Size 259.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0f10fa13e0fb172adbbf0771d9f12571fdee252994de911cf2695a72df42430e
BLAKE2b-256 checksum
How to use checksums
c61f78eee3b21202246360b5e162b4a9195102838a0e6bea0b6794bfcc1baf36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.18

Release history Release notifications | RSS feed

This release

1.2.3.post1 This release

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.5

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page