Skip to main content

SuperResolution of Sentinel2 imagery.

Project description

Super-resolution for Sentinel 2 files.

This library presents a special approach to sharpening imagery, where areas are only sharpened if the model is confident in doing so.

It works by using an inception res-net style Deep Learning model trained on 1000 sites randomly selected around the globe. The sites represent at least 25 samples within each Köppen-Geiger climate zone and at least one image for each city in the world with at least 1 million inhabitants. For each location, three training mosaics were collected spread out across different seasons resulting in a total of 3000 mosaics.

The model itself is trained by using the RGB bands to sharpen the downsampled NIR band. First the resampled NIR band is transposed to the mean values of the RGB bands, secondly the network super-samples the transposed NIR band, and thirdly the network mean-matches the low-resolution image to the generated high-resolution image. To super-sample the other bands, they are substituted with the NIR band. The model has been purposely made small to ensure easy deployment, and the methodology is quite conservative in its estimates to ensure that no wild predictions are made.

The package aims to be a drop-in replacement for arrays sharpened with the bilinear method and should provide a minor improvement in downstream model accuracy. Please look at the example colab or investigate the results in their full resolution.

Dependencies
buteo(https://casperfibaek.github.io/buteo/)
tensorflow (https://www.tensorflow.org/)

Installation
pip install s2super

Quickstart

# Setup
from s2super import super_sample

# Constants
YEAR = 2021
MONTHS = 1
AOI = [0.039611, -51.169216] # Macapá

# Example get Sentinel 2 data function.
data = get_data_from_latlng(AOI, year=YEAR, months=MONTHS)[0] 

# Fast is about 2.5 times faster and almost as good.
super_sampled = super_sample(data, method="fast", fit_data=False)

Example colab notebook Open All Collab

Super-sampled band 12. TOPLEFT: RGB, TOPRIGHT: CONFIDENCE, BOTLEFT: UNSHARP, BOTRIGHT:SHARP Super-sampled band 12 Zoomed 1. TOPLEFT: RGB, TOPRIGHT: CONFIDENCE, BOTLEFT: UNSHARP, BOTRIGHT:SHARP Super-sampled band 12 Zoomed 2. TOPLEFT: RGB, TOPRIGHT: CONFIDENCE, BOTLEFT: UNSHARP, BOTRIGHT:SHARP Super-sampled bands: B05, B06, B07, B8A, B11, B12 Super-sampled bands: B05, B06, B07, B8A, B11, B12 Super-sampled bands: B05, B06, B07, B8A, B11, B12

super_sample

Super-sample a Sentinel 2 image. The source can either be a NumPy array of the bands, or a .safe file.

Args:

data (str/np.ndarray): The image to supersample. Either .safe file or NumPy array.

Kwargs:

indices (dict): If the input is not a .safe file, a dictionary with the band names and the indices in the NumPy array must be proved. It comes in the form of { "B02": 0, "B03": 1, ... } (Default: 10m first, then 20m)
method (str): Either fast or accurate. If fast, uses less overlaps and weighted average merging. If accurate, uses more overlaps and the mad_merge algorithm (Default: "fast")
fit_data (bool): Should the deep learning model be fitted with the data? Improves accuracy, but takes around 1m to fit on colab. (Default: True)
fit_epochs (int): If the model is refitted, for how many epochs should it run? (Default: 5)
verbose (bool): If True, print statements will update on the progress (Default: True)
normalise (bool): If the input data should be normalised. Leave this True, unless it has already been done. The model expects sentinel 2 l2a data normalised by dividing by 10000.0 (Default: True)
preloaded_model (None/tf.model): Allows preloading the model, useful if applying the super_sampling function within a loop. (Default: None)

Returns:

(np.ndarray): A NumPy array with the supersampled data.

Cite

Fibaek, C.S, Super-sample Sentinel 2, (2022), GitHub repository, https://github.com/casperfibaek/super_res_s2

Developed at the European Space Agency's Φ-lab.

Build

python -m build; python -m twine upload dist/*

Cuda-setup

conda install -c nvidia cuda-python conda install -c conda-forge cudnn

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s2super-1.2.26.tar.gz (30.5 MB view details)

Uploaded Source

Built Distribution

s2super-1.2.26-py3-none-any.whl (30.6 MB view details)

Uploaded Python 3

File details

Details for the file s2super-1.2.26.tar.gz.

File metadata

  • Download URL: s2super-1.2.26.tar.gz
  • Upload date:
  • Size: 30.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.7

File hashes

Hashes for s2super-1.2.26.tar.gz
Algorithm Hash digest
SHA256 fb0417b45d976bf3ca1f620ed8f9050f1cf9b37cbe834bb1e25a7c51bcf6ab33
MD5 bab9d39965e79fc981778d9c8316177f
BLAKE2b-256 49967124286f5aa023714ad3152d3928b7c6d32e0a7ee3e68b0900f97f6360a2

See more details on using hashes here.

File details

Details for the file s2super-1.2.26-py3-none-any.whl.

File metadata

  • Download URL: s2super-1.2.26-py3-none-any.whl
  • Upload date:
  • Size: 30.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.7

File hashes

Hashes for s2super-1.2.26-py3-none-any.whl
Algorithm Hash digest
SHA256 6b1d9af48ca8c500696e988ce6985e255d23978bf08f9c56b7d2b63c29b358ce
MD5 e3f5f3ce0132480c7610c60f19eafbdf
BLAKE2b-256 aa1119e77ff2e1f6f01d38fc25a2e571fd19a428e43ce78f3446a277a5acb39b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page