Skip to content

Implement otb::SarTransformBase, otb::SarForwardTransform and otb::SarInverseTransform

This issue is part of the SAR sensor models refactoring story (#2142 (closed))

Rationale

The new SAR transform architecture needs to be similar to RPC transform.

classDiagram
  class Transform~TScalarType, NInputDimensions, NOutputDimensions~{
  -TransformPoint(Point)* Point
  }

  class SensorTransformBase~TScalarType, NInputDimensions, NOutputDimensions~{
  -SetMetadata(ImageMetadata&)* bool
  -IsValidSensorModel()* bool
  }

  class SARTransformBase~TScalarType, NInputDimensions, NOutputDimensions~{
  -SetMetadata(ImageMetadata&) bool
  -IsValidSensorModel() bool
  #Projection_SARParam m_SARParam
  #SARSensorModel m_Transformer
  }

  class SARForwardTransform~TScalarType, NInputDimensions, NOutputDimensions~{
  -TransformPoint(Point) Point
  }

  class SARInverseTransform~TScalarType, NInputDimensions, NOutputDimensions~{
  -TransformPoint(Point) Point
  }

  Transform <|-- SensorTransformBase
  SensorTransformBase <|-- SARTransformBase
  SARTransformBase <|-- SARForwardTransform
  SARTransformBase <|-- SARInverseTransform

Analysis

The otb::SARTransformBase class is in charge of the model. Is is composed of a otb::SarSensorModel and is in charge of instantiating this object using the provided otb::ImageMetadata.

The otb::SARForwardTransform and otb::SARInverseTransform classes are in charge of using correctly the otb::SarSensorModel to perform respectively the forward and the inverse transform.

This classes also need to be added to the sensor transforms' factory described in #2150 (closed).


classDiagram
  Object <|.. SensorTransformBase : skipping classes in the dependency tree for clarity
  SensorTransformBase <|.. SARTransformBase
  SARTransformBase <|.. SARForwardTransform
  SARTransformBase <|.. SARInverseTransform
  
  ObjectFactoryBase  <|.. SARForwardTransformFactory
  ObjectFactoryBase  <|.. SARInverseTransformFactory

  SARForwardTransformFactory ..> SARForwardTransform : CreateInstance
  SARInverseTransformFactory ..> SARInverseTransform : CreateInstance

  SensorTransformFactory ..>  SARForwardTransformFactory : RegisterFactory
  SensorTransformFactory ..>  SARInverseTransformFactory : RegisterFactory

  GenericRSTransform ..> SensorTransformFactory

  SensorTransformBase : +IsValidSensorModel() = 0
  SensorTransformBase : +TransformPoint() = 0
  SensorTransformBase : -SetMetadata(ImageMetadata&)* bool

  SARTransformBase : -SARSensorModel m_Transformer
  SARTransformBase : +IsValidSensorModel()
  SARTransformBase : -SetMetadata(ImageMetadata&)* bool

  SARForwardTransform : +TransformPoint()
  SARInverseTransform : +TransformPoint()

  SensorTransformFactory : +DirectionType direction {Forward,Inverse}
  SensorTransformFactory : +CreateMachineLearningModel
  SensorTransformFactory : +CleanFactories
  SensorTransformFactory : -RegisterBuiltInFactories()
  SensorTransformFactory : -RegisterFactory()

  ObjectFactoryBase : +CreateObject()

Classes and methods to implement:

  • otb::SARTransformBase
    • otb::SARTransformBase::SetMetadata(ImageMetadata&)
    • otb::SARTransformBase::IsValidSensorModel()
    • otb::SARTransformBase::PrintSelf()
  • otb::SARForwardTransform
    • otb::SARForwardTransform::TransformPoint(Point)
  • otb::SARInverseTransform
    • otb::SARInverseTransform::TransformPoint(Point)
  • otb::SARForwardTransformFactory
  • otb::SARInverseTransformFactory

Acceptance criterions

  • The new classes are correctly tested with there respective unitary tests.
  • The documentation is up to date.

Risk management

Risk Likelihood Impact Action
Edited by Julien Osman