Skip to main content

Algorithms and utilities for Synthetic Aperture Radar (SAR) sensors

Project description

Sarsen

Algorithms and utilities for Synthetic Aperture Radar (SAR) sensors. Enables cloud-native SAR processing via Xarray and Dask.

This Open Source project is sponsored by B-Open - https://www.bopen.eu.

Features and limitations

Sarsen is a Python library and command line tool with the following functionalities:

  • provides algorithms to terrain-correct satellite SAR data
    • geometric terrain correction (geocoding)
      • fast mode: to terrain-correct images
      • accurate mode: for interferometric processing
    • radiometric terrain correction (gamma flattening)
  • accesses SAR data via xarray-sentinel:
    • supports most Sentinel-1 data products as distributed by ESA:
      • Sentinel-1 Single Look Complex (SLC) SM/IW/EW
      • Sentinel-1 Ground Range Detected (GRD) SM/IW/EW
    • reads uncompressed and compressed SAFE data products on the local computer or on a network via fsspec - depends on rasterio>=1.3
  • accesses DEM data via rioxarray:
    • reads local and remote data in virtually any raster format via rasterio / GDAL
  • supports larger-than-memory and distributed data access and processing via Dask
    • efficient geometric terrain-correction for a full GRD
    • efficient radiometric terrain-correction for a full GRD.

Overall, the software is in the beta phase and the usual caveats apply.

Current limitations:

  • documentation needs improvement. See #6.

Non-objectives / Caveat emptor items:

  • No attempt is made to support UTC leap seconds. Observations that include a leap second may crash the code or silently return wrong results.

SAR terrain-correction

The typical side-looking SAR system acquires data with uniform sampling in azimuth and slant range, where the azimuth and range represents the time when a given target is acquired and the absolute sensor-to-target distance, respectively. Because of this, the near range appears compressed with respect to the far range. Furthermore, any deviation of the target elevation from a smooth geoid results in additional local geometric and radiometric distortions known as foreshortening, layover and shadow.

  • Radar foreshortening: Terrain surfaces sloping towards the radar appear shortened relative to those sloping away from the radar. These regions are much brighter than other places on the SAR image.
  • Radar layover: It's an extreme case of foreshortening occurring when the terrain slope is greater than the angle of the incident signal.
  • Radar shadows: They occur when ground points at the same azimuth but different slant ranges are aligned in the direction of the line-of-sight. This is usually due to a back slope with an angle steeper than the viewing angle. When this happens, the radar signal never reaches the farthest points, and thus there is no measurement, meaning that this lack of information is unrecoverable.

The geometric terrain correction (GTC) corrects the distortions due to the target elevation. The radiometric terrain correction (RTC) also compensates for the backscatter modulation generated by the topography of the scene.

Install

The easiest way to install sarsen is in a pip environment.

  pip install sarsen

Note that in order to handle input DEM whose vertical coordinate is not on a known ellipsoid, for example SRTM DEM with heights over the EGM96 geoid, you need to download and configure the appropriate PROJ transformation grids.

Command line usage

The sarsen command line tool corrects SAR data based on a selected DEM and may produce geometrically terrain-corrected images (GTC) or radiometrically terrain-corrected images (RTC). Terrain-corrected images will have the same pixels as the input DEM, that should be resampled to the target projection and spacing in advance, for example using gdalwarp.

The following command performs a geometric terrain correction:

  sarsen gtc S1B_IW_GRDH_1SDV_20211217T141304_20211217T141329_030066_039705_9048.SAFE IW/VV South-of-Redmond-10m_UTM.tif

Performing geometric and radiometric terrain correction is more demanding, but it is possible to produce the RTC of a full GRD product at a 10m resolution in one go (and it takes approx 25 minutes on a 32Gb MacBook Pro):

  sarsen rtc S1B_IW_GRDH_1SDV_20211217T141304_20211217T141329_030066_039705_9048.SAFE IW/VV South-of-Redmond-10m_UTM.tif

Python API usage

The python API has entry points to the same commands and it also gives access to several lower level algorithms, but internal APIs should not be considered stable:

The following code applies the geometric terrain correction to the VV polarization of "S1B_IW_GRDH_1SDV_20211217T141304_20211217T141329_030066_039705_9048.SAFE" product:

>>> import sarsen
>>> product = sarsen.Sentinel1SarProduct(
...     "tests/data/S1B_IW_GRDH_1SDV_20211223T051122_20211223T051147_030148_039993_5371.SAFE",
...     measurement_group="IW/VV",
... )
>>> gtc = sarsen.terrain_correction(
...     product,
...     dem_urlpath="tests/data/Rome-30m-DEM.tif",
... )

The radiometric correction can be activated using the key correct_radiometry:

>>> rtc = sarsen.terrain_correction(
...     product,
...     dem_urlpath="tests/data/Rome-30m-DEM.tif",
...     correct_radiometry="gamma_nearest",
... )

Reference documentation

This is the list of the reference documents:

Project resources

on-push codecov

Contributing

The main repository is hosted on GitHub. Testing, bug reports and contributions are highly welcomed and appreciated:

https://github.com/bopen/sarsen

Lead developer:

Main contributors:

See also the list of contributors who participated in this project.

Sponsoring

B-Open commits to maintain the project long term and we are happy to accept sponsorships to develop new features.

We wish to express our gratitude to the project sponsors:

  • Microsoft has sponsored the support for GRD products and the gamma flattening algorithm.

License

Copyright 2016-2022 B-Open Solutions srl

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

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

sarsen-0.9.6rc1.tar.gz (2.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sarsen-0.9.6rc1-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

Details for the file sarsen-0.9.6rc1.tar.gz.

File metadata

  • Download URL: sarsen-0.9.6rc1.tar.gz
  • Upload date:
  • Size: 2.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for sarsen-0.9.6rc1.tar.gz
Algorithm Hash digest
SHA256 5707b39a66242f8e87347fd154e7899ebab2a4a6bfaf7db7cd6394b34c06cd8e
MD5 4b88ec371416d86041e0701ee01f8d06
BLAKE2b-256 e5e4a9f27a7c1bb1ac69334aa2a0297d6a720001466e1bf03fae3a582c004c05

See more details on using hashes here.

Provenance

The following attestation bundles were made for sarsen-0.9.6rc1.tar.gz:

Publisher: on-push.yml on bopen/sarsen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sarsen-0.9.6rc1-py3-none-any.whl.

File metadata

  • Download URL: sarsen-0.9.6rc1-py3-none-any.whl
  • Upload date:
  • Size: 29.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for sarsen-0.9.6rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 a5a402d6a89e8e1efec3ee1dfd7320c7e135bd20d0e64a5ef86bb3a2b24e6418
MD5 dc2b2bc27e12fac1d04bccebef31262a
BLAKE2b-256 ac457a0edbef830adf36a74b1e9bdb48da4037e2240f6274b07a76f03eda8fa3

See more details on using hashes here.

Provenance

The following attestation bundles were made for sarsen-0.9.6rc1-py3-none-any.whl:

Publisher: on-push.yml on bopen/sarsen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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