Update Remove OSSIM with description of the SensorModel architecture authored by Julien Osman's avatar Julien Osman
...@@ -157,6 +157,68 @@ Here is a new workflow to replace the current function ...@@ -157,6 +157,68 @@ Here is a new workflow to replace the current function
generated ImageMetadata is given to the *ImageCommon* that generated ImageMetadata is given to the *ImageCommon* that
propagate through the pipeline. propagate through the pipeline.
### The new Sensor Model mechanism
```mermaid
classDiagram
class Transform~TScalarType, NInputDimensions, NOutputDimensions~{
-TransformPoint(Point)* Point
}
class SensorModelBase~TScalarType, NInputDimensions, NOutputDimensions~{
-SetMetadataModel(boost_any)* bool
-IsValidSensorModel()* bool
}
class RPCTransformBase~TScalarType, NInputDimensions, NOutputDimensions~{
-SetMetadataModel(boost_any) bool
-IsValidSensorModel() bool
#Projection_RPCParam m_RPCParam
#GDALRPCTransformer m_Transformer
}
class RPCForwardTransform~TScalarType, NInputDimensions, NOutputDimensions~{
-TransformPoint(Point) Point
}
class RPCInverseTransform~TScalarType, NInputDimensions, NOutputDimensions~{
-TransformPoint(Point) Point
}
Transform <|-- SensorModelBase
SensorModelBase <|-- RPCTransformBase
RPCTransformBase <|-- RPCForwardTransform
RPCTransformBase <|-- RPCInverseTransform
```
The class ```SensorModelBase``` is the new base class for sensor
models. It inherits from ```otb::Transform```, which inherits from
```itk::Transform```. It is templated over the data type, and input
and output dimentions. All sensor model classes should inherit from
it, and implement the methods:
- ```SetMetadataModel``` that takes a boost::any object representing
the model;
- ```IsValidSensorModel``` that returns ```true``` if the model is
correctly set;
- ```TransformPoint``` that process the transformation.
#### RPC sensor model
The RPC model is stored in the ```ImageMetadata``` object, using the
key ```MDGeom::RPC```. The classes ```RPCTransformBase```,
```RPCForwardTransform``` and ```RPCInverseTransform``` are used to
perform forward and inverse transformation using this model.
The abstract class ```RPCTransformBase``` contains the implementation
of the ```SetMetadataModel``` method, which receives the RPC
description from the ```ImageMetadata``` and instantiates a
```GDALRPCTransformer```.
The classes ```RPCForwardTransform``` and ```RPCInverseTransform```
each implement there version of the ```TransformPoint``` method which
uses the ```GDALRPCTransformer```.
## Justifications for the technical choices ## Justifications for the technical choices
### Refactor OTB Metadata ### Refactor OTB Metadata
... ...
......