Skip to main content

Python library for making cloud-free Sentinel-2 mosaics

Project description

S2Mosaic 🛰️🌍

S2Mosaic is a Python package for creating cloud-free mosaics from Sentinel-2 satellite imagery. It allows users to generate composite images for specified grid areas and time ranges, with various options for scene selection and mosaic creation.

Features 🌟

  • Create Sentinel-2 mosaics for specific grid areas and time ranges.
  • Flexible scene selection methods: by valid data percentage, oldest, or newest scenes.
  • Multiple mosaic creation methods: mean or first valid pixel.
  • Support for different spectral bands, including visual (RGB) composites.
  • State-of-the-art cloud masking using the OmniCloudMask library.
  • Export mosaics as GeoTIFF files or return as NumPy arrays.

Note 📝

We use OmniCloudMask for state-of-the-art cloud and cloud shadow masking. OCM will run significantly faster if an available NVIDIA GPU is present.

Try in Colab

Colab_Button

Installation 🛠️

You can install S2Mosaic using pip:

pip install s2mosaic

Usage Example 1 🚀

Here's a basic example of how to use S2Mosaic:

from s2mosaic import mosaic
from pathlib import Path

# Create a mosaic for a specific grid area and time range
result = mosaic(
    grid_id="50HMH", # Sentinel-2 scene grid ID
    start_year=2022,
    start_month=1,
    start_day=1,
    duration_months=2, # Duration to collect data from
    output_dir=Path("output"), # Output directory for mosaic TIFF files
    sort_method="valid_data", # Method to sort potential scenes before download
    mosaic_method="mean", # Approach used to combine scenes
    required_bands=['visual'], # Required Sentinel-2 bands
    no_data_threshold=0.001 # Threshold for early stopping
)

print(f"Mosaic saved to: {result}")

This example creates a mosaic for the grid area "50HMH" for the first two months of 2022, using the visual (TCI) product. The scenes are sorted by valid data percentage, and the mosaic is created using the mean of valid pixels. The process stops iterating through scenes once the no_data_threshold is reached.

Usage Example 2 🔬

Here's another example of how to use S2Mosaic:

from s2mosaic import mosaic

# Create a mosaic for a specific grid area and time range
array, rio_profile = mosaic(
    grid_id="50HMH",
    start_year=2022,
    start_month=1,
    start_day=1,
    duration_months=2,
    sort_method="valid_data",
    mosaic_method="mean",
    required_bands=["B04", "B03", "B02", "B08"],
    no_data_threshold=0.001
)

print(f"Mosaic array shape: {array.shape}")

Similar to the example above but with 16-bit red, green, blue, and NIR bands returned as a NumPy array and rasterio profile.

Advanced Usage 🧠

S2Mosaic provides several options for customizing the mosaic creation process:

  • sort_method: Choose between "valid_data", "oldest", or "newest" to determine scene selection priority.
  • mosaic_method: Use "mean" for an average of valid pixels or "first" to use the first valid pixel.
  • required_bands: Specify which spectral bands to include in the mosaic. Use ["visual"] for an RGB composite.
  • no_data_threshold: Set the threshold for considering a pixel as no-data. Set to None to process all scenes.
  • ocm_batch_size: Set the batch size for OmniCloudMask inference (default: 6).
  • ocm_inference_dtype: Set the data type for OmniCloudMask inference (default: "bf16").

For more detailed information on these options and additional functionality, please refer to the function docstring in the source code.

Performance Tips 🚀

  • ocm_batch_size: If using a GPU, setting this above the default value (1) will speed up cloud masking. In most cases, a value of 4 works well. If you encounter CUDA errors, try using a lower number.
  • ocm_inference_dtype: if the device supports it 'bf16' tends to be the fastest option, failing this try 'fp16' then 'fp32'.
  • sort_method: Using "valid_data" as the sort method tends to be the fastest option if no_data_threshold is not None.
  • mosaic_method: Using 'first' can be a lot faster than 'mean' as only valid, non cloudy, new pixels are downloaded.

Contributing 🤝

Contributions to S2Mosaic are welcome! Please feel free to submit pull requests, create issues, or suggest improvements. 🙌

License 📄

This project is licensed under the MIT License. ⚖️

Acknowledgments 🙏

This package uses the Planetary Computer STAC API and the OmniCloudMask library for cloud masking.

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

s2mosaic-0.1.8.tar.gz (5.6 MB view details)

Uploaded Source

Built Distribution

s2mosaic-0.1.8-py3-none-any.whl (5.6 MB view details)

Uploaded Python 3

File details

Details for the file s2mosaic-0.1.8.tar.gz.

File metadata

  • Download URL: s2mosaic-0.1.8.tar.gz
  • Upload date:
  • Size: 5.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.8

File hashes

Hashes for s2mosaic-0.1.8.tar.gz
Algorithm Hash digest
SHA256 d113111925a78a57b4c189ff0ae7b3bc054217fb33dcbb7fd5ab1b436a43b415
MD5 19764e1a90b9006d43080cc33788f326
BLAKE2b-256 9afd1b30090047414ca4f76ce59f13a8b9d7fa7c1fbd9d22dd4c947acf96b59e

See more details on using hashes here.

File details

Details for the file s2mosaic-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: s2mosaic-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 5.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.8

File hashes

Hashes for s2mosaic-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 a3bcabd5424692d8d8d5d01034d92c443a36a00b48002d5567e32aab7c233c34
MD5 5df2efd33bea7c67c7db5a06111fd828
BLAKE2b-256 8e3b944ff0c3f9a540619e7d4dd95e4111d15033e0fbbebc06997cbd4cab3851

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