... | ... | @@ -156,6 +156,68 @@ Here is a new workflow to replace the current function |
|
|
to store the metadata. If the parsing returns successfully, the
|
|
|
generated ImageMetadata is given to the *ImageCommon* that
|
|
|
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
|
|
|
|
... | ... | |