Request for Changes-4: Add basic support for Sentinel1 Product

From OTBWiki
Jump to: navigation, search




SENTINEL-1 is the first of the five missions that ESA is developing for the Copernicus initiative. This RFC implements a basic sensor model class for sentinel1 L1 product. Processing of metadata is handled by via ossim library. The current implementation includes parsing of common metadata information from SAFE manifest and product xml associated with product, reading calibration and noise annotation datasets( CADS), reading orbit state vectors.


The idea is to read, process sentinel1 product.

Implementation details

This class is based on ossimSarModel as opposed to ossimGeometricSarSensorModel class like other Radar sensors. The motive behind this move is to keep in par with current ossim sensor model architecture. ossimSarModel is written as the base class for all SAR based sensors. Even though not used widely, this class has a generic way of computing ::lineSampleHeightToWorld() and ::worldToLineSample() implementation. We belive this will pave the way for geometric correction later at some point in future of OTB release.

Classes and files


ossimSentinel1Model: This class is derived from ossimSarModel. It parses file comes with sentinel1product. Following metadata are currently read from sentinel1.

  • Sensor identification string
  • Mission id
  • Acquistion date
  • Polarization
  • Number of bands
  • Product type (SLC/GRD/RAW)
  • Image size
  • Swath
  • Acquisiton mode
  • Orbit information
  • Range Sampling Rate
  • Radar Frequency
  • orbitList
  • Doppler centroid
  • Coordinate conversion list

The ossimSentinel1Model::saveState() method save all these information into a keyword list. It is also responsible to add the metadata values parsed from ossimSentinel1ProductDoc.

ossimSentinel1ProductDoc: This reads product xml file that is available in the annotation folder. Reading of calibation and noise lookup data, orbit state vectors (platform position) are done here. This class actually fills up an ossimkeywordlist which is then used in ossimSentinel1Model::saveState( )


  • otbSentinel1ImageMetadataInterface - metadata interface class that actually talks with otb and ossimkeywordlist created by ossimSentinel1Model
  • otbSentinel1ImageMetadataInterfaceFactory - factory class for sentinel1
  • otbImageMetadataInterfaceFactory && otbSarImageMetadataInterfaceFactory - register sentinel1
  • otb-module.cmake - change dependency to boost via OTBBoostAdapters. OTBBoost -> OTBBoostAdapters [1]


  • External_ossim.cmake - update OSSIM to 1.8.20

The current version of ossim used in superbuild is ossim svn-revsion: 23092. There is a bug that prevents reading Sentinel1 The issue has been fixed in upstream and is included in the latest stable release. Hence an upgrade of ossim in the superbuild is included in this RFC.




Three tests are added: Modules/Core/Metadata/

  1. ioTuSentinel1ImageMetadataInterfaceNew - test creation of metadatainterface class
  2. ioTvImageMetadataInterfaceBaseTest_Sentinel1 - test metadata read from a sentinel1 product. (Baseline pushed in OTB LargeInput)
  3. ioTvSarCalibrationLookupDataTest_SENTINEL1 - test to check lookupdata value from Sentinel1ImageMetadataInterface

Note that second test is not executed on dashboard because it required OTB_USE_LARGE_INPUT!

Baseline and inputs required for the above tests has been added to OTB-Data repository.


Baseline data to check ioTvSarCalibrationLookupDataTest_Sentinel1 test.


A 300x300 extract of SENTINEL1 data for ioTvSarCalibrationLookupDataTest_SENTINEL1 test.


.geom file for the above 300x300 extract.


Baseline for ioTvImageMetadataInterfaceBase_Sentinel1 test.


Additional notes

  • IMP!. ossim version must be >= 1.8.20 for sentinel1. SuperBuild archives and Linux, Windows (OSGeo4W, MXE) packages must update their OSSIM version.
  • Geometric correction is not focused in this RFC.
  • Only L1 SLC support is done now.
  • First things first. Straight out Sar support in OTB. The current situation is very unpleasant. (another RFC)